From 61dc6a8537541ac13c224a426f9a17a686e57843 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 18 Jan 2022 10:35:50 +0100 Subject: [PATCH 01/38] Rewrote to ts, tests are not running yet --- .eslintrc | 30 +- index.js | 28 - package-lock.json | 1985 ++++++++++++++- package.json | 55 +- rollup.config.js | 103 +- src/boolean.ts | 102 + src/{compare_events.js => compare_events.ts} | 20 +- ...ompare_segments.js => compare_segments.ts} | 37 +- src/{compute_fields.js => compute_fields.ts} | 63 +- src/{connect_edges.js => connect_edges.ts} | 108 +- src/constants.ts | 6 + src/contour.js | 19 - src/contour.ts | 12 + src/{debug_utils.js => debug_utils.ts} | 0 src/{divide_segment.js => divide_segment.ts} | 17 +- src/{edge_type.js => edge_type.ts} | 0 src/{equals.js => equals.ts} | 11 +- src/fill_queue.js | 74 - src/fill_queue.ts | 95 + src/index.js | 96 - src/index.ts | 17 + src/operation.js | 4 - src/operation.ts | 10 + ...tersection.js => possible_intersection.ts} | 63 +- ...ntersection.js => segment_intersection.ts} | 93 +- src/{signed_area.js => signed_area.ts} | 5 +- src/subdivide_segments.js | 78 - src/subdivide_segments.ts | 94 + src/sweep_event.js | 142 -- src/sweep_event.ts | 132 + src/types.ts | 19 + test/compare_events.test.js | 67 +- test/compare_segments.test.js | 72 +- test/divide_segment.test.js | 153 +- test/featureTypes.test.js | 107 +- test/genericTestCases.test.js | 41 +- test/index.test.js | 99 +- test/segment_intersection.test.js | 164 +- test/signed_area.test.js | 9 +- test/sweep_event.test.js | 21 +- test/sweep_line.test.js | 48 +- tsconfig.json | 29 + web/data | 1 + web/index-bundle.js | 2189 +++++++++++++++++ web/index.html | 28 + web/index.ts | 282 +++ web/js/booleanopcontrol.js | 57 + web/js/coordinates.js | 23 + web/js/polygoncontrol.ts | 39 + web/orthogonal.html | 15 + web/styles.css | 19 + web/tsconfig.json | 9 + 52 files changed, 6015 insertions(+), 975 deletions(-) delete mode 100644 index.js create mode 100644 src/boolean.ts rename src/{compare_events.js => compare_events.ts} (69%) rename src/{compare_segments.js => compare_segments.ts} (51%) rename src/{compute_fields.js => compute_fields.ts} (60%) rename src/{connect_edges.js => connect_edges.ts} (69%) create mode 100644 src/constants.ts delete mode 100644 src/contour.js create mode 100644 src/contour.ts rename src/{debug_utils.js => debug_utils.ts} (100%) rename src/{divide_segment.js => divide_segment.ts} (64%) rename src/{edge_type.js => edge_type.ts} (100%) rename src/{equals.js => equals.ts} (69%) delete mode 100644 src/fill_queue.js create mode 100644 src/fill_queue.ts delete mode 100644 src/index.js create mode 100644 src/index.ts delete mode 100644 src/operation.js create mode 100644 src/operation.ts rename src/{possible_intersection.js => possible_intersection.ts} (66%) rename src/{segment_intersection.js => segment_intersection.ts} (68%) rename src/{signed_area.js => signed_area.ts} (66%) delete mode 100644 src/subdivide_segments.js create mode 100644 src/subdivide_segments.ts delete mode 100644 src/sweep_event.js create mode 100644 src/sweep_event.ts create mode 100644 src/types.ts create mode 100644 tsconfig.json create mode 120000 web/data create mode 100644 web/index-bundle.js create mode 100644 web/index.html create mode 100644 web/index.ts create mode 100644 web/js/booleanopcontrol.js create mode 100644 web/js/coordinates.js create mode 100644 web/js/polygoncontrol.ts create mode 100644 web/orthogonal.html create mode 100644 web/styles.css create mode 100644 web/tsconfig.json diff --git a/.eslintrc b/.eslintrc index 355a3d0..e0fe57c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,9 +4,7 @@ "node": true, "mocha": true }, - "extends": [ - "eslint:recommended" - ], + "extends": ["eslint:recommended"], "parserOptions": { "ecmaVersion": 6, "sourceType": "module" @@ -23,11 +21,7 @@ "Worker": true, "URL": true }, - "plugins": [ - "promise", - "import-order", - "jsdoc" - ], + "plugins": ["promise", "import-order", "jsdoc"], "rules": { "indent": 0, // "prefer-const": "error", @@ -45,9 +39,7 @@ "argsIgnorePattern": "^_" } ], - "no-constant-condition": [ - "error" - ], + "no-constant-condition": ["error"], "no-multi-spaces": 0, "semi": [ // semicolons are required @@ -95,15 +87,9 @@ // no multi line strings using \ "error" ], - "no-multiple-empty-lines": [ - "error" - ], - "no-trailing-spaces": [ - "error" - ], - "no-mixed-spaces-and-tabs": [ - "error" - ], + "no-multiple-empty-lines": ["error"], + "no-trailing-spaces": ["error"], + "no-mixed-spaces-and-tabs": ["error"], "curly": 0, "brace-style": 0, "keyword-spacing": [ @@ -203,9 +189,7 @@ "error", "except-parens" ], - "no-inner-declarations": [ - "error" - ], + "no-inner-declarations": ["error"], "no-console": 2, // `console.log(...)` is allowed "import-order/import-order": 0, diff --git a/index.js b/index.js deleted file mode 100644 index 04441cf..0000000 --- a/index.js +++ /dev/null @@ -1,28 +0,0 @@ -import boolean from './src/'; -import { - INTERSECTION, - DIFFERENCE, - UNION, - XOR -} from './src/operation'; - -export function union (subject, clipping) { - return boolean(subject, clipping, UNION); -} - -export function diff (subject, clipping) { - return boolean(subject, clipping, DIFFERENCE); -} - -export function xor (subject, clipping) { - return boolean(subject, clipping, XOR); -} - -export function intersection (subject, clipping) { - return boolean(subject, clipping, INTERSECTION); -} - -/** - * @enum {Number} - */ -export const operations = { UNION, DIFFERENCE, INTERSECTION, XOR }; diff --git a/package-lock.json b/package-lock.json index d688e39..c51e67c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,10 +41,23 @@ "uglify-js": "^3.3.21" } }, +<<<<<<< HEAD "node_modules/@babel/code-frame": { "version": "7.16.7", "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", +======= + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true, "license": "MIT", "dependencies": { @@ -503,6 +516,7 @@ } } }, +<<<<<<< HEAD "node_modules/deep-equal": { "version": "1.1.1", "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", @@ -3803,6 +3817,146 @@ "js-tokens": "^4.0.0" } }, +======= + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, + "@mapbox/typehead": { + "version": "1.0.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/@mapbox/typehead/-/typehead-1.0.3.tgz", + "integrity": "sha512-gmJdnOE5w+qWS9wQC8lXQrApLWN5uXk9+M/f4Y7VU+r4tn8zw0Tabblf3ym0Vkb0x7jB5SAwmclyhmcwsajAjw==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "commander": "^8.1.0", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "esbuild": "^0.12.22", + "esbuild-plugin-lodash": "^1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@rollup/pluginutils": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", + "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } + } + }, + "@ts-type/package-dts": { + "version": "1.0.56", + "resolved": "https://nexus3.linkurious.net/repository/npm/@ts-type/package-dts/-/package-dts-1.0.56.tgz", + "integrity": "sha512-nBjbCaVV+R81jk7q/6sRuNYOhDAbBOmaCkPI2quK0Rnye2f4FUHX+4JL+3rDPiRPHxgX3pNfVKKHBlPAHiRddw==", + "dev": true, + "requires": { + "@types/semver": "^7.3.9", + "ts-type": "^2.1.2" + } + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "@turf/union": { "version": "4.7.3", "resolved": "https://nexus3.linkurious.net/repository/npm/@turf/union/-/union-4.7.3.tgz", @@ -3824,10 +3978,55 @@ "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", "dev": true }, + "@types/jsts": { + "version": "0.17.9", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/jsts/-/jsts-0.17.9.tgz", + "integrity": "sha512-+NVh23rGOe4wjEGDWrcB9aWgsmLg5ZvGgiIvieLRETOSqa68rAQlQ0w3LiK83BCtBaHPyzpBCgfuGtWKqu3lbQ==", + "dev": true, + "requires": { + "@types/openlayers": "*" + } + }, + "@types/leaflet": { + "version": "1.7.8", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/leaflet/-/leaflet-1.7.8.tgz", + "integrity": "sha512-prZwhmUznkwTYCTZVGTR4U1GzgPP3PAWYYQ3wDgVkIoiuQTheWoycsXx4Rz9ARYhlDTl0Ycd8lvhH2/rNSkqIg==", + "dev": true, + "requires": { + "@types/geojson": "*" + } + }, + "@types/leaflet-editable": { + "version": "1.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/leaflet-editable/-/leaflet-editable-1.2.1.tgz", + "integrity": "sha512-7Oms1HgulWiclkI0s1XLmr1yRylNoJX8sVUfAv9+28JzwWbKbLcQ6//vhFEOmoMlBQyL5veogKpUUb5qeF+Qyg==", + "dev": true, + "requires": { + "@types/leaflet": "*" + } + }, "@types/node": { +<<<<<<< HEAD "version": "17.0.23", "resolved": "https://nexus3.linkurious.net/repository/npm/@types/node/-/node-17.0.23.tgz", "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", +======= + "version": "17.0.8", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "dev": true + }, + "@types/openlayers": { + "version": "4.6.18", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/openlayers/-/openlayers-4.6.18.tgz", + "integrity": "sha512-srqcI4chyzzs11ZhYpnZqT6Lh1v/O5EXh+pPENDtAwhE7CM31h+JsGomt+ioGhuNVJ96Jl4UkHR1Lllb/XrQAA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true }, "@types/resolve": { @@ -3839,6 +4038,33 @@ "@types/node": "*" } }, + "@types/semver": { + "version": "7.3.9", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/semver/-/semver-7.3.9.tgz", + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", + "dev": true + }, + "@types/tape": { + "version": "4.13.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/tape/-/tape-4.13.2.tgz", + "integrity": "sha512-V1ez/RtYRGN9cNYApw5xf27DpMkTB0033X6a2i3KUmKhSojBfbWN0i3EgZxboUG96WJLHLdOyZ01aiZwVW5aSA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@yarn-tool/resolve-package": { + "version": "1.0.41", + "resolved": "https://nexus3.linkurious.net/repository/npm/@yarn-tool/resolve-package/-/resolve-package-1.0.41.tgz", + "integrity": "sha512-ybJqQztdSkTr9Z0BkPo5OlQBZoHlXHHXxssPJgFT8lFgyOxlhkjUg3WBFn7MSK6JMUoXU32wd2KKFBL/Fgsb8Q==", + "dev": true, + "requires": { + "@ts-type/package-dts": "^1.0.56", + "pkg-dir": "< 6 >= 5", + "tslib": "^2.3.1", + "upath2": "^3.1.12" + } + }, "acorn": { "version": "6.4.2", "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-6.4.2.tgz", @@ -3859,6 +4085,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://nexus3.linkurious.net/repository/npm/ajv/-/ajv-6.12.6.tgz", @@ -3903,6 +4135,22 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-1.0.10.tgz", @@ -3912,6 +4160,35 @@ "sprintf-js": "~1.0.2" } }, + "array.prototype.every": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/array.prototype.every/-/array.prototype.every-1.1.3.tgz", + "integrity": "sha512-vWnriJI//SOMOWtXbU/VXhJ/InfnNHPF6BLKn5WfY8xXy+NWql0fUy20GO3sdqBhCAO+qw8S/E5nJiZX+QFdCA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "is-string": "^1.0.7" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, "astral-regex": { "version": "1.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/astral-regex/-/astral-regex-1.0.0.tgz", @@ -3927,6 +4204,12 @@ "lodash": "^4.17.14" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "balanced-match": { "version": "1.0.2", "resolved": "https://nexus3.linkurious.net/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3949,6 +4232,12 @@ "platform": "^1.3.3" } }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3959,6 +4248,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "buble": { "version": "0.19.8", "resolved": "https://nexus3.linkurious.net/repository/npm/buble/-/buble-0.19.8.tgz", @@ -3975,6 +4273,12 @@ "regexpu-core": "^4.5.4" } }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "buffer-shims": { "version": "1.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/buffer-shims/-/buffer-shims-1.0.0.tgz", @@ -4020,6 +4324,22 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://nexus3.linkurious.net/repository/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -4056,12 +4376,27 @@ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, +<<<<<<< HEAD +======= + "commander": { + "version": "4.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "comment-parser": { "version": "0.7.6", "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-0.7.6.tgz", "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://nexus3.linkurious.net/repository/npm/concat-map/-/concat-map-0.0.1.tgz", @@ -4080,6 +4415,45 @@ "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", "dev": true }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -4111,17 +4485,80 @@ } }, "deep-equal": { +<<<<<<< HEAD "version": "1.1.1", "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", +======= + "version": "2.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true, "requires": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", "object-keys": "^1.1.1", +<<<<<<< HEAD "regexp.prototype.flags": "^1.2.0" +======= + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "deep-is": { @@ -4130,6 +4567,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", @@ -4145,6 +4588,12 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/doctrine/-/doctrine-3.0.0.tgz", @@ -4222,6 +4671,68 @@ "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.1" +<<<<<<< HEAD +======= + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "es-to-primitive": { @@ -4235,9 +4746,21 @@ "is-symbol": "^1.0.2" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "esbuild": { + "version": "0.12.29", + "resolved": "https://nexus3.linkurious.net/repository/npm/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true + }, + "esbuild-plugin-lodash": { + "version": "1.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/esbuild-plugin-lodash/-/esbuild-plugin-lodash-1.1.0.tgz", + "integrity": "sha512-DtvAnHuALecQguNWeIf2Ea3bCp0Pe9t+knjJNxHJE9PHagorZR92B1Xmx2cLKJz5fzkBzXLFnegiTdWYUi1AyQ==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, @@ -4344,6 +4867,12 @@ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, + "esm": { + "version": "3.2.25", + "resolved": "https://nexus3.linkurious.net/repository/npm/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, "espree": { "version": "6.2.1", "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-6.2.1.tgz", @@ -4480,6 +5009,84 @@ "flat-cache": "^2.0.1" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "flat-cache": { "version": "2.0.1", "resolved": "https://nexus3.linkurious.net/repository/npm/flat-cache/-/flat-cache-2.0.1.tgz", @@ -4512,12 +5119,47 @@ "is-callable": "^1.1.3" } }, +<<<<<<< HEAD +======= + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://nexus3.linkurious.net/repository/npm/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + } + } + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "fs.realpath": { "version": "1.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://nexus3.linkurious.net/repository/npm/function-bind/-/function-bind-1.1.1.tgz", @@ -4547,6 +5189,15 @@ "has-symbols": "^1.0.1" } }, +<<<<<<< HEAD +======= + "get-package-type": { + "version": "0.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "get-symbol-description": { "version": "1.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -4627,6 +5278,19 @@ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, +<<<<<<< HEAD +======= + "has-dynamic-import": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", + "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "has-flag": { "version": "3.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-3.0.0.tgz", @@ -4646,6 +5310,17 @@ "dev": true, "requires": { "has-symbols": "^1.0.2" +<<<<<<< HEAD +======= + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "he": { @@ -4854,6 +5529,37 @@ "version": "1.0.4", "resolved": "https://nexus3.linkurious.net/repository/npm/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", +<<<<<<< HEAD +======= + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -4879,11 +5585,130 @@ "version": "2.8.1", "resolved": "https://nexus3.linkurious.net/repository/npm/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", +<<<<<<< HEAD +======= "dev": true, "requires": { "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-reference": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", + "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, +<<<<<<< HEAD "is-date-object": { "version": "1.0.5", "resolved": "https://nexus3.linkurious.net/repository/npm/is-date-object/-/is-date-object-1.0.5.tgz", @@ -4984,6 +5809,44 @@ "has-symbols": "^1.0.2" } }, +======= + "is-symbol": { + "version": "1.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "is-typed-array": { + "version": "1.1.8", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + } + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "is-weakref": { "version": "1.0.2", "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakref/-/is-weakref-1.0.2.tgz", @@ -4991,6 +5854,19 @@ "dev": true, "requires": { "call-bind": "^1.0.2" +<<<<<<< HEAD +======= + } + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "isarray": { @@ -5005,6 +5881,34 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5039,10 +5943,17 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, +<<<<<<< HEAD "json-schema-traverse": { "version": "0.4.1", "resolved": "https://nexus3.linkurious.net/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", +======= + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true }, "json-stable-stringify-without-jsonify": { @@ -5057,6 +5968,15 @@ "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", "dev": true }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsts": { "version": "1.3.0", "resolved": "https://nexus3.linkurious.net/repository/npm/jsts/-/jsts-1.3.0.tgz", @@ -5085,6 +6005,12 @@ "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "load-json-file": { "version": "2.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/load-json-file/-/load-json-file-2.0.0.tgz", @@ -5097,6 +6023,15 @@ "strip-bom": "^3.0.0" } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://nexus3.linkurious.net/repository/npm/lodash/-/lodash-4.17.21.tgz", @@ -5124,14 +6059,43 @@ "sourcemap-codec": "^1.4.8" } }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "mime": { - "version": "1.6.0", + "make-dir": { + "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mime": { + "version": "1.6.0", "resolved": "https://nexus3.linkurious.net/repository/npm/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true @@ -5210,6 +6174,12 @@ } } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "npm-run-all": { "version": "4.1.5", "resolved": "https://nexus3.linkurious.net/repository/npm/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -5247,6 +6217,26 @@ "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" +<<<<<<< HEAD +======= + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "object-keys": { @@ -5323,6 +6313,30 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://nexus3.linkurious.net/repository/npm/parent-module/-/parent-module-1.0.1.tgz", @@ -5347,12 +6361,27 @@ "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", "dev": true }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-is-network-drive": { + "version": "1.0.13", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-network-drive/-/path-is-network-drive-1.0.13.tgz", + "integrity": "sha512-Hg74mRN6mmXV+gTm3INjFK40ncAmC/Lo4qoQaSZ+GT3hZzlKdWQSqAjqyPeW0SvObP2W073WyYEBWY9d3wOm3A==", + "dev": true, + "requires": { + "tslib": "^2.3.1" + } + }, "path-key": { "version": "2.0.1", "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-2.0.1.tgz", @@ -5365,6 +6394,18 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, +<<<<<<< HEAD +======= + "path-strip-sep": { + "version": "1.0.10", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-strip-sep/-/path-strip-sep-1.0.10.tgz", + "integrity": "sha512-JpCy+8LAJQQTO1bQsb/84s1g+/Stm3h39aOpPRBQ/paMUGVPPZChLTOTKHoaCkc/6sKuF7yVsnq5Pe1S6xQGcA==", + "dev": true, + "requires": { + "tslib": "^2.3.1" + } + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "path-type": { "version": "3.0.0", "resolved": "https://nexus3.linkurious.net/repository/npm/path-type/-/path-type-3.0.0.tgz", @@ -5382,6 +6423,12 @@ } } }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, "pidtree": { "version": "0.3.1", "resolved": "https://nexus3.linkurious.net/repository/npm/pidtree/-/pidtree-0.3.1.tgz", @@ -5394,6 +6441,15 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, "platform": { "version": "1.3.6", "resolved": "https://nexus3.linkurious.net/repository/npm/platform/-/platform-1.3.6.tgz", @@ -5463,6 +6519,7 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, +<<<<<<< HEAD "qs": { "version": "6.10.3", "resolved": "https://nexus3.linkurious.net/repository/npm/qs/-/qs-6.10.3.tgz", @@ -5470,6 +6527,15 @@ "dev": true, "requires": { "side-channel": "^1.0.4" +======= + "randombytes": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "re-emitter": { @@ -5534,6 +6600,15 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://nexus3.linkurious.net/repository/npm/regenerate/-/regenerate-1.4.2.tgz", @@ -5550,13 +6625,39 @@ } }, "regexp.prototype.flags": { +<<<<<<< HEAD "version": "1.4.1", "resolved": "https://nexus3.linkurious.net/repository/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", +======= + "version": "1.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" +<<<<<<< HEAD +======= + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "regexpp": { @@ -5678,9 +6779,15 @@ } }, "robust-predicates": { +<<<<<<< HEAD "version": "2.0.4", "resolved": "https://nexus3.linkurious.net/repository/npm/robust-predicates/-/robust-predicates-2.0.4.tgz", "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" +======= + "version": "3.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/robust-predicates/-/robust-predicates-3.0.1.tgz", + "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) }, "rollup": { "version": "1.32.1", @@ -5745,6 +6852,101 @@ } } }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "rollup-plugin-typescript2": { + "version": "0.31.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.1.tgz", + "integrity": "sha512-sklqXuQwQX+stKi4kDfEkneVESPi3YM/2S899vfRdF9Yi40vcC50Oq4A4cSZJNXsAQE/UsBZl5fAOsBLziKmjw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.0", + "@yarn-tool/resolve-package": "^1.0.36", + "find-cache-dir": "^3.3.1", + "fs-extra": "8.1.0", + "resolve": "1.20.0", + "tslib": "2.2.0" + }, + "dependencies": { + "resolve": { + "version": "1.20.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + } + } + }, "rollup-pluginutils": { "version": "2.8.2", "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", @@ -5767,6 +6969,14 @@ "dev": true, "requires": { "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "safe-buffer": { @@ -5793,6 +7003,15 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-1.2.0.tgz", @@ -5850,6 +7069,30 @@ } } }, + "source-map": { + "version": "0.7.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://nexus3.linkurious.net/repository/npm/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://nexus3.linkurious.net/repository/npm/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -5908,6 +7151,269 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, +<<<<<<< HEAD +======= + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string.prototype.padend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "string.prototype.trim": { + "version": "1.2.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", + "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "string_decoder": { "version": "1.0.3", "resolved": "https://nexus3.linkurious.net/repository/npm/string_decoder/-/string_decoder-1.0.3.tgz", @@ -6160,6 +7666,7 @@ "requires": { "tap-parser": "^1.1.5", "tape": "^4.0.0" +<<<<<<< HEAD } }, "tape": { @@ -6183,6 +7690,309 @@ "resumer": "~0.0.0", "string.prototype.trim": "~1.2.5", "through": "~2.3.8" +======= + }, + "dependencies": { + "deep-equal": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "object-inspect": { + "version": "1.11.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "tap-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-1.3.2.tgz", + "integrity": "sha1-EgxQiciMPIp5PvKIhn3jIeGPjCI=", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "inherits": "~2.0.1", + "js-yaml": "^3.2.7", + "readable-stream": "^2" + } + }, + "tape": { + "version": "4.14.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-4.14.0.tgz", + "integrity": "sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ==", + "dev": true, + "requires": { + "call-bind": "~1.0.2", + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "glob": "~7.1.7", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.1.3", + "minimist": "~1.2.5", + "object-inspect": "~1.11.0", + "resolve": "~1.20.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.4", + "through": "~2.3.8" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + } + } + }, + "tape": { + "version": "5.4.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-5.4.1.tgz", + "integrity": "sha512-7bGaJ3WnQ/CX3xOWzlR+9lNptEWoD+11gyREP8k+SYrDu2a20EifKpTmZndXn25ZRxesYHSuNtE7Fb+THcjfGA==", + "dev": true, + "requires": { + "array.prototype.every": "^1.1.3", + "call-bind": "^1.0.2", + "deep-equal": "^2.0.5", + "defined": "^1.0.0", + "dotignore": "^0.1.2", + "for-each": "^0.3.3", + "get-package-type": "^0.1.0", + "glob": "^7.2.0", + "has": "^1.0.3", + "has-dynamic-import": "^2.0.1", + "inherits": "^2.0.4", + "is-regex": "^1.1.4", + "minimist": "^1.2.5", + "object-inspect": "^1.12.0", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "resolve": "^2.0.0-next.3", + "resumer": "^0.0.0", + "string.prototype.trim": "^1.2.5", + "through": "^2.3.8" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "tape-es": { + "version": "1.2.17", + "resolved": "https://nexus3.linkurious.net/repository/npm/tape-es/-/tape-es-1.2.17.tgz", + "integrity": "sha512-rimlqa7S+4k03kLw4T7xLeYC0NZWQlwYPYbi5Cr+V9CYSmch0XhKA80uaXsVJxX0B1MQ1OQl6VxXNc7w4ZhMkQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "commander": "^4.1.1", + "glob": "^7.2.0", + "tape": "^4.14.0" + }, + "dependencies": { + "deep-equal": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "object-inspect": { + "version": "1.11.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "tape": { + "version": "4.14.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-4.14.0.tgz", + "integrity": "sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ==", + "dev": true, + "requires": { + "call-bind": "~1.0.2", + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "glob": "~7.1.7", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.1.3", + "minimist": "~1.2.5", + "object-inspect": "~1.11.0", + "resolve": "~1.20.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.4", + "through": "~2.3.8" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + } + } + }, + "terser": { + "version": "5.10.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "text-table": { @@ -6240,9 +8050,15 @@ } }, "tinyqueue": { +<<<<<<< HEAD "version": "1.2.3", "resolved": "https://nexus3.linkurious.net/repository/npm/tinyqueue/-/tinyqueue-1.2.3.tgz", "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" +======= + "version": "2.0.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) }, "tmp": { "version": "0.0.33", @@ -6253,16 +8069,69 @@ "os-tmpdir": "~1.0.2" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "trim": { "version": "0.0.1", "resolved": "https://nexus3.linkurious.net/repository/npm/trim/-/trim-0.0.1.tgz", "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", "dev": true }, + "ts-node": { + "version": "10.4.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + } + } + }, + "ts-type": { + "version": "2.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/ts-type/-/ts-type-2.1.2.tgz", + "integrity": "sha512-64/2XoaipFXa/bidwXChQCSJ3VaCUVKrEaRPXiP5gLIlkPoAHfnwOMC0EWr42DsTm/+qYYuNwzxc0VQroeDs+g==", + "dev": true, + "requires": { + "tslib": "^2.3.1", + "typedarray-dts": "^1.0.0" + } + }, "tslib": { +<<<<<<< HEAD "version": "1.14.1", "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", +======= + "version": "2.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true }, "type-check": { @@ -6280,6 +8149,7 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, +<<<<<<< HEAD "typescript": { "version": "3.9.10", "resolved": "https://nexus3.linkurious.net/repository/npm/typescript/-/typescript-3.9.10.tgz", @@ -6290,6 +8160,18 @@ "version": "3.15.3", "resolved": "https://nexus3.linkurious.net/repository/npm/uglify-js/-/uglify-js-3.15.3.tgz", "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", +======= + "typedarray-dts": { + "version": "1.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/typedarray-dts/-/typedarray-dts-1.0.0.tgz", + "integrity": "sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA==", + "dev": true + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://nexus3.linkurious.net/repository/npm/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true }, "unbox-primitive": { @@ -6302,6 +8184,17 @@ "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" +<<<<<<< HEAD +======= + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "unicode-canonical-property-names-ecmascript": { @@ -6341,6 +8234,23 @@ "qs": "^6.4.0" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "upath2": { + "version": "3.1.12", + "resolved": "https://nexus3.linkurious.net/repository/npm/upath2/-/upath2-3.1.12.tgz", + "integrity": "sha512-yC3eZeCyCXFWjy7Nu4pgjLhXNYjuzuUmJiRgSSw6TJp8Emc+E4951HGPJf+bldFC5SL7oBLeNbtm1fGzXn2gxw==", + "dev": true, + "requires": { + "path-is-network-drive": "^1.0.13", + "path-strip-sep": "^1.0.10", + "tslib": "^2.3.1" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://nexus3.linkurious.net/repository/npm/uri-js/-/uri-js-4.4.1.tgz", @@ -6400,6 +8310,35 @@ "is-symbol": "^1.0.3" } }, +<<<<<<< HEAD +======= + "which-collection": { + "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + } + }, +>>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "word-wrap": { "version": "1.2.3", "resolved": "https://nexus3.linkurious.net/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", @@ -6426,6 +8365,24 @@ "resolved": "https://nexus3.linkurious.net/repository/npm/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 352fb27..2ab98fb 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,11 @@ "name": "martinez-polygon-clipping", "version": "0.7.3", "description": "Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor", - "main": "dist/martinez.umd.js", - "browser": "dist/martinez.umd.js", - "module": "index.js", - "jsnext:main": "index.js", + "main": "dist/index.js", + "browser": "dist/index.js", + "module": "dist/index.esm.js", + "jsnext:main": "dist/index.esm.js", + "types": "dist/types", "files": [ "index.d.ts", "index.js", @@ -13,15 +14,15 @@ "dist/" ], "scripts": { - "test": "tape -r reify buble/register test/*.test.js | tap-spec && npm run ts", + "test2": "tape -r ts-node/register test/*.test.ts | tap-spec && npm run ts", + "test": "tape -r esm test/*.test.js | tap-spec && npm run ts", "ts": "tsc index.d.ts", "bench": "node --require reify bench.js", "lint": "eslint ./src/", "watch": "rollup -c -w", "serve": "http-server -p 3000", - "start": "run-p watch serve", - "build": "npm run lint && rollup -c && npm run min", - "min": "uglifyjs ./dist/martinez.umd.js -o ./dist/martinez.min.js -m --comments", + "start": "typehead serve", + "build": "npm run lint && rollup -c", "prepublishOnly": "npm run lint && npm run test && npm run build" }, "keywords": [ @@ -42,19 +43,26 @@ "author": "Alex Milevski ", "license": "MIT", "devDependencies": { + "@mapbox/typehead": "^1.0.3", "@turf/union": "^4.6.0", - "@types/geojson": "^1.0.2", + "@types/geojson": "^1.0.6", + "@types/jsts": "^0.17.9", + "@types/leaflet": "^1.7.8", + "@types/leaflet-editable": "^1.2.1", + "@types/node": "^17.0.8", + "@types/tape": "^4.13.2", "benchmark": "^2.1.4", "buble": "^0.19.3", "eslint": "^6.8.0", "eslint-plugin-import-order": "^2.1.4", "eslint-plugin-jsdoc": "^20.0.2", "eslint-plugin-promise": "^3.8.0", + "esm": "^3.2.25", "geojson-project": "^1.0.0", "http-server": "^0.12.1", "json-stringify-pretty-compact": "^2.0.0", "leaflet": "^1.2.0", - "leaflet-editable": "^1.1.0", + "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", @@ -62,15 +70,32 @@ "rollup-plugin-buble": "^0.19.8", "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.31.1", "tap-spec": "^5.0.0", "tap-status": "^1.0.1", - "tape": "^4.12.1", - "typescript": "^3.7.4", - "uglify-js": "^3.3.21" + "tape": "^5.4.1", + "tape-es": "^1.2.17", + "ts-node": "^10.4.0", + "tslib": "^2.3.1", + "typescript": "^3.9.10" }, "dependencies": { - "robust-predicates": "^2.0.4", + "robust-predicates": "^3.0.1", "splaytree": "^0.1.4", - "tinyqueue": "^1.2.0" + "tinyqueue": "^2.0.3" + }, + "prettier": { + "singleQuote": true, + "semi": true, + "useTabs": false, + "tabWidth": 2, + "trailingComma": "none", + "endOfLine": "lf", + "bracketSpacing": true, + "printWidth": 80 + }, + "esm": { + "mode": "all" } } diff --git a/rollup.config.js b/rollup.config.js index 06a3f84..21c0096 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,7 @@ -import resolve from 'rollup-plugin-node-resolve'; +import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; -import buble from 'rollup-plugin-buble'; +import typescript from 'rollup-plugin-typescript2'; +import { terser } from 'rollup-plugin-terser'; import { version, author, license, description } from './package.json'; const name = 'martinez'; @@ -16,34 +17,74 @@ const banner = `\ */ `; -module.exports = [{ - input: './index.js', - output: { - file: `dist/${name}.umd.js`, - name: 'martinez', - sourcemap: true, - format: 'umd', - banner +module.exports = [ + { + input: './src/index.ts', + output: { + file: 'dist/index.js', + name: 'martinez', + sourcemap: true, + format: 'umd', + banner + }, + plugins: [ + resolve(), // so Rollup can find external libs + commonjs(), // so Rollup can convert commonJS to an ES module + typescript({ + useTsconfigDeclarationDir: true + }) + ] }, - plugins: [ - resolve(), // so Rollup can find external libs - commonjs(), // so Rollup can convert commonJS to an ES module - buble() - ] -}, { - input: 'demo/js/index.js', - output: { - file: 'demo/js/bundle.js', - format: 'iife', - globals: { - leaflet: 'L', - jsts: 'jsts' - } + { + input: './src/index.ts', + output: { + file: 'dist/index.esm.js', + name: 'martinez', + sourcemap: true, + format: 'esm', + banner + }, + plugins: [ + resolve(), // so Rollup can find external libs + commonjs(), // so Rollup can convert commonJS to an ES module + typescript({ + useTsconfigDeclarationDir: true + }) + ] }, - external: ['jsts', 'leaflet'], - plugins: [ - resolve(), // so Rollup can find external libs - commonjs(), // so Rollup can convert commonJS to an ES module - buble() - ] -}]; + { + input: './src/index.ts', + output: { + file: 'dist/index.min.js', + name: 'martinez', + sourcemap: true, + format: 'umd', + banner + }, + plugins: [ + resolve(), // so Rollup can find external libs + commonjs(), // so Rollup can convert commonJS to an ES module + typescript({ + useTsconfigDeclarationDir: true + }), + terser() + ] + }, + { + input: 'web/index.ts', + output: { + file: 'web/index-bundle.js', + format: 'iife', + globals: { + leaflet: 'L', + jsts: 'jsts' + } + }, + external: ['jsts', 'leaflet', 'leaflet-editable'], + plugins: [ + resolve(), // so Rollup can find external libs + commonjs(), // so Rollup can convert commonJS to an ES module + typescript({ tsconfig: 'web/tsconfig.json' }) + ] + } +]; diff --git a/src/boolean.ts b/src/boolean.ts new file mode 100644 index 0000000..cae92fe --- /dev/null +++ b/src/boolean.ts @@ -0,0 +1,102 @@ +import { MultiPolygon, BoundingBox, Polygon } from './types'; +import subdivideSegments from './subdivide_segments'; +import connectEdges from './connect_edges'; +import fillQueue from './fill_queue'; +import { + INTERSECTION, + DIFFERENCE, + UNION, + XOR, + OperationType +} from './operation'; +import { EMPTY } from './constants'; + +function trivialOperation( + subject: MultiPolygon, + clipping: MultiPolygon, + operation: OperationType +) { + if (subject.length * clipping.length === 0) { + if (operation === INTERSECTION) return EMPTY; + if (operation === DIFFERENCE) return subject; + if (operation === UNION || operation === XOR) { + return subject.length === 0 ? clipping : subject; + } + } + return null; +} + +function checkOverlap( + subject: MultiPolygon, + clipping: MultiPolygon, + sbbox: BoundingBox, + cbbox: BoundingBox, + operation: OperationType +) { + if ( + sbbox[0] > cbbox[2] || + cbbox[0] > sbbox[2] || + sbbox[1] > cbbox[3] || + cbbox[1] > sbbox[3] + ) { + if (operation === INTERSECTION) return EMPTY; + if (operation === DIFFERENCE) return subject; + if (operation === UNION || operation === XOR) + return subject.concat(clipping); + } + return null; +} + +export default function boolean( + subject: MultiPolygon | Polygon, + clipping: MultiPolygon | Polygon, + operation: OperationType +) { + const s = + typeof subject[0][0][0] === 'number' + ? ([subject] as MultiPolygon) + : (subject as MultiPolygon); + const c = + typeof clipping[0][0][0] === 'number' + ? ([clipping] as MultiPolygon) + : (clipping as MultiPolygon); + + let trivial = trivialOperation(s, c, operation); + if (trivial) return trivial === EMPTY ? null : trivial; + + const sbbox: BoundingBox = [Infinity, Infinity, -Infinity, -Infinity]; + const cbbox: BoundingBox = [Infinity, Infinity, -Infinity, -Infinity]; + + // console.time('fill queue'); + const eventQueue = fillQueue(s, c, sbbox, cbbox, operation); + //console.timeEnd('fill queue'); + + trivial = checkOverlap(s, c, sbbox, cbbox, operation); + if (trivial) return trivial === EMPTY ? null : trivial; + + // console.time('subdivide edges'); + const sortedEvents = subdivideSegments(eventQueue, sbbox, cbbox, operation); + //console.timeEnd('subdivide edges'); + + // console.time('connect vertices'); + const contours = connectEdges(sortedEvents); + //console.timeEnd('connect vertices'); + + // Convert contours to polygons + const polygons: MultiPolygon = []; + for (let i = 0; i < contours.length; i++) { + const contour = contours[i]; + if (contour.isExterior()) { + // The exterior ring goes first + const rings = [contour.points]; + // Followed by holes if any + for (let j = 0; j < contour.holeIds.length; j++) { + const holeId = contour.holeIds[j]; + rings.push(contours[holeId].points); + } + polygons.push(rings); + } + } + + return polygons; +} diff --git a/src/compare_events.js b/src/compare_events.ts similarity index 69% rename from src/compare_events.js rename to src/compare_events.ts index fee7fa2..d1b9d6d 100644 --- a/src/compare_events.js +++ b/src/compare_events.ts @@ -1,11 +1,13 @@ import signedArea from './signed_area'; +import SweepEvent, { isBelow } from './sweep_event'; +import { Point } from './types'; /** * @param {SweepEvent} e1 * @param {SweepEvent} e2 * @return {Number} */ -export default function compareEvents(e1, e2) { +export default function compareEvents(e1: SweepEvent, e2: SweepEvent) { const p1 = e1.point; const p2 = e2.point; @@ -17,16 +19,18 @@ export default function compareEvents(e1, e2) { // Event with lower y-coordinate is processed first if (p1[1] !== p2[1]) return p1[1] > p2[1] ? 1 : -1; - return specialCases(e1, e2, p1, p2); + return specialCases(e1, e2, p1 /*, p2 */); } - /* eslint-disable no-unused-vars */ -function specialCases(e1, e2, p1, p2) { +function specialCases( + e1: SweepEvent, + e2: SweepEvent, + p1: Point /*, p2: Point */ +) { // Same coordinates, but one is a left endpoint and the other is // a right endpoint. The right endpoint is processed first - if (e1.left !== e2.left) - return e1.left ? 1 : -1; + if (e1.left !== e2.left) return e1.left ? 1 : -1; // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) @@ -35,9 +39,9 @@ function specialCases(e1, e2, p1, p2) { // not collinear if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { // the event associate to the bottom segment is processed first - return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1; + return !isBelow(e1, e2.otherEvent.point) ? 1 : -1; } - return (!e1.isSubject && e2.isSubject) ? 1 : -1; + return !e1.isSubject && e2.isSubject ? 1 : -1; } /* eslint-enable no-unused-vars */ diff --git a/src/compare_segments.js b/src/compare_segments.ts similarity index 51% rename from src/compare_segments.js rename to src/compare_segments.ts index 47e1d71..bc04366 100644 --- a/src/compare_segments.js +++ b/src/compare_segments.ts @@ -1,25 +1,28 @@ -import signedArea from './signed_area'; +import signedArea from './signed_area'; import compareEvents from './compare_events'; -import equals from './equals'; - +import equals from './equals'; +import SweepEvent, { isBelow } from './sweep_event'; /** * @param {SweepEvent} le1 * @param {SweepEvent} le2 * @return {Number} */ -export default function compareSegments(le1, le2) { +export default function compareSegments(le1: SweepEvent, le2: SweepEvent) { if (le1 === le2) return 0; // Segments are not collinear - if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || - signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { - + if ( + signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || + signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0 + ) { // If they share their left endpoint use the right endpoint to sort - if (equals(le1.point, le2.point)) return le1.isBelow(le2.otherEvent.point) ? -1 : 1; + if (equals(le1.point, le2.point)) + return isBelow(le1, le2.otherEvent.point) ? -1 : 1; // Different left endpoint: use the left endpoint to sort - if (le1.point[0] === le2.point[0]) return le1.point[1] < le2.point[1] ? -1 : 1; + if (le1.point[0] === le2.point[0]) + return le1.point[1] < le2.point[1] ? -1 : 1; // has the line segment associated to e1 been inserted // into S after the line segment associated to e2 ? @@ -27,17 +30,21 @@ export default function compareSegments(le1, le2) { // The line segment associated to e2 has been inserted // into S after the line segment associated to e1 - return le1.isBelow(le2.point) ? -1 : 1; + return isBelow(le1, le2.point) ? -1 : 1; } - if (le1.isSubject === le2.isSubject) { // same polygon - let p1 = le1.point, p2 = le2.point; - if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) { - p1 = le1.otherEvent.point; p2 = le2.otherEvent.point; + if (le1.isSubject === le2.isSubject) { + // same polygon + let p1 = le1.point, + p2 = le2.point; + if (p1[0] === p2[0] && p1[1] === p2[1] /*equals(le1.point, le2.point)*/) { + p1 = le1.otherEvent.point; + p2 = le2.otherEvent.point; if (p1[0] === p2[0] && p1[1] === p2[1]) return 0; else return le1.contourId > le2.contourId ? 1 : -1; } - } else { // Segments are collinear, but belong to separate polygons + } else { + // Segments are collinear, but belong to separate polygons return le1.isSubject ? -1 : 1; } diff --git a/src/compute_fields.js b/src/compute_fields.ts similarity index 60% rename from src/compute_fields.js rename to src/compute_fields.ts index 10d8eb9..3a42aab 100644 --- a/src/compute_fields.js +++ b/src/compute_fields.ts @@ -8,36 +8,39 @@ import { INTERSECTION, UNION, DIFFERENCE, - XOR + XOR, + OperationType } from './operation'; +import SweepEvent from './sweep_event'; -/** - * @param {SweepEvent} event - * @param {SweepEvent} prev - * @param {Operation} operation - */ -export default function computeFields (event, prev, operation) { +export default function computeFields( + event: SweepEvent, + prev: SweepEvent | null, + operation: OperationType +) { // compute inOut and otherInOut fields if (prev === null) { - event.inOut = false; + event.inOut = false; event.otherInOut = true; - // previous line segment in sweepline belongs to the same polygon + // previous line segment in sweepline belongs to the same polygon } else { if (event.isSubject === prev.isSubject) { - event.inOut = !prev.inOut; + event.inOut = !prev.inOut; event.otherInOut = prev.otherInOut; - // previous line segment in sweepline belongs to the clipping polygon + // previous line segment in sweepline belongs to the clipping polygon } else { - event.inOut = !prev.otherInOut; + event.inOut = !prev.otherInOut; event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; } // compute prevInResult field if (prev) { - event.prevInResult = (!inResult(prev, operation) || prev.isVertical()) - ? prev.prevInResult : prev; + event.prevInResult = + !inResult(prev, operation) || prev.isVertical() + ? prev.prevInResult + : prev; } } @@ -50,9 +53,7 @@ export default function computeFields (event, prev, operation) { } } - -/* eslint-disable indent */ -function inResult(event, operation) { +function inResult(event: SweepEvent, operation: OperationType) { switch (event.type) { case NORMAL: switch (operation) { @@ -63,8 +64,10 @@ function inResult(event, operation) { case DIFFERENCE: // return (event.isSubject && !event.otherInOut) || // (!event.isSubject && event.otherInOut); - return (event.isSubject && event.otherInOut) || - (!event.isSubject && !event.otherInOut); + return ( + (event.isSubject && event.otherInOut) || + (!event.isSubject && !event.otherInOut) + ); case XOR: return true; } @@ -80,25 +83,27 @@ function inResult(event, operation) { } /* eslint-enable indent */ - -function determineResultTransition(event, operation) { +function determineResultTransition( + event: SweepEvent, + operation: OperationType +) { let thisIn = !event.inOut; let thatIn = !event.otherInOut; let isIn; switch (operation) { case INTERSECTION: - isIn = thisIn && thatIn; break; + isIn = thisIn && thatIn; + break; case UNION: - isIn = thisIn || thatIn; break; + isIn = thisIn || thatIn; + break; case XOR: - isIn = thisIn ^ thatIn; break; + isIn = thisIn !== thatIn; + break; case DIFFERENCE: - if (event.isSubject) { - isIn = thisIn && !thatIn; - } else { - isIn = thatIn && !thisIn; - } + if (event.isSubject) isIn = thisIn && !thatIn; + else isIn = thatIn && !thisIn; break; } return isIn ? +1 : -1; diff --git a/src/connect_edges.js b/src/connect_edges.ts similarity index 69% rename from src/connect_edges.js rename to src/connect_edges.ts index 0ce5c43..62546dd 100644 --- a/src/connect_edges.js +++ b/src/connect_edges.ts @@ -1,17 +1,18 @@ import compareEvents from './compare_events'; import Contour from './contour'; - -/** - * @param {Array.} sortedEvents - * @return {Array.} - */ -function orderEvents(sortedEvents) { - let event, i, len, tmp; - const resultEvents = []; - for (i = 0, len = sortedEvents.length; i < len; i++) { - event = sortedEvents[i]; - if ((event.left && event.inResult) || - (!event.left && event.otherEvent.inResult)) { +import SweepEvent from './sweep_event'; +import { ContourId, Point } from './types'; + +const EmptyPoint: Point = [0, 0]; + +function orderEvents(sortedEvents: SweepEvent[]) { + const resultEvents: SweepEvent[] = []; + for (let i = 0, len = sortedEvents.length; i < len; i++) { + const event = sortedEvents[i]; + if ( + (event.left && event.inResult) || + (!event.left && event.otherEvent.inResult) + ) { resultEvents.push(event); } } @@ -19,10 +20,12 @@ function orderEvents(sortedEvents) { let sorted = false; while (!sorted) { sorted = true; - for (i = 0, len = resultEvents.length; i < len; i++) { - if ((i + 1) < len && - compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { - tmp = resultEvents[i]; + for (let i = 0, len = resultEvents.length; i < len; i++) { + if ( + i + 1 < len && + compareEvents(resultEvents[i], resultEvents[i + 1]) === 1 + ) { + const tmp = resultEvents[i]; resultEvents[i] = resultEvents[i + 1]; resultEvents[i + 1] = tmp; sorted = false; @@ -30,18 +33,16 @@ function orderEvents(sortedEvents) { } } - - for (i = 0, len = resultEvents.length; i < len; i++) { - event = resultEvents[i]; - event.otherPos = i; + for (let i = 0, len = resultEvents.length; i < len; i++) { + resultEvents[i].otherPos = i; } // imagine, the right event is found in the beginning of the queue, // when his left counterpart is not marked yet - for (i = 0, len = resultEvents.length; i < len; i++) { - event = resultEvents[i]; + for (let i = 0, len = resultEvents.length; i < len; i++) { + const event = resultEvents[i]; if (!event.left) { - tmp = event.otherPos; + const tmp = event.otherPos; event.otherPos = event.otherEvent.otherPos; event.otherEvent.otherPos = tmp; } @@ -50,24 +51,21 @@ function orderEvents(sortedEvents) { return resultEvents; } - -/** - * @param {Number} pos - * @param {Array.} resultEvents - * @param {Object>} processed - * @return {Number} - */ -function nextPos(pos, resultEvents, processed, origPos) { - let newPos = pos + 1, - p = resultEvents[pos].point, - p1; +function nextPos( + pos: number, + resultEvents: SweepEvent[], + processed: Set, + origPos: number +) { + let newPos = pos + 1; + const p = resultEvents[pos].point; + let p1 = EmptyPoint; const length = resultEvents.length; - if (newPos < length) - p1 = resultEvents[newPos].point; + if (newPos < length) p1 = resultEvents[newPos].point; while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { - if (!processed[newPos]) { + if (!processed.has(newPos)) { return newPos; } else { newPos++; @@ -79,15 +77,16 @@ function nextPos(pos, resultEvents, processed, origPos) { newPos = pos - 1; - while (processed[newPos] && newPos > origPos) { - newPos--; - } + while (processed.has(newPos) && newPos > origPos) newPos--; return newPos; } - -function initializeContourFromContext(event, contours, contourId) { +function initializeContourFromContext( + event: SweepEvent, + contours: Contour[], + contourId: ContourId +) { const contour = new Contour(); if (event.prevInResult != null) { const prevInResult = event.prevInResult; @@ -129,29 +128,28 @@ function initializeContourFromContext(event, contours, contourId) { } /** - * @param {Array.} sortedEvents * @return {Array.<*>} polygons */ -export default function connectEdges(sortedEvents) { - let i, len; +export default function connectEdges(sortedEvents: SweepEvent[]): Contour[] { const resultEvents = orderEvents(sortedEvents); // "false"-filled array - const processed = {}; - const contours = []; + const processed = new Set(); + const contours: Contour[] = []; - for (i = 0, len = resultEvents.length; i < len; i++) { - - if (processed[i]) { - continue; - } + for (let i = 0, len = resultEvents.length; i < len; i++) { + if (processed.has(i)) continue; const contourId = contours.length; - const contour = initializeContourFromContext(resultEvents[i], contours, contourId); + const contour = initializeContourFromContext( + resultEvents[i], + contours, + contourId + ); // Helper function that combines marking an event as processed with assigning its output contour ID - const markAsProcessed = (pos) => { - processed[pos] = true; + const markAsProcessed = (pos: number) => { + processed.add(pos); if (pos < resultEvents.length && resultEvents[pos]) { resultEvents[pos].outputContourId = contourId; } diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..bf3e004 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,6 @@ +import { MultiPolygon } from './types'; + +export const PRECISION = 12; +export const EMPTY: MultiPolygon = []; +export const EPS: number = Math.pow(10, -PRECISION); +export const E_LIMIT: number = Math.pow(10, PRECISION); diff --git a/src/contour.js b/src/contour.js deleted file mode 100644 index a4c96ce..0000000 --- a/src/contour.js +++ /dev/null @@ -1,19 +0,0 @@ -export default class Contour { - - /** - * Contour - * - * @class {Contour} - */ - constructor() { - this.points = []; - this.holeIds = []; - this.holeOf = null; - this.depth = null; - } - - isExterior() { - return this.holeOf == null; - } - -} diff --git a/src/contour.ts b/src/contour.ts new file mode 100644 index 0000000..b73a49d --- /dev/null +++ b/src/contour.ts @@ -0,0 +1,12 @@ +import { ContourId, Point } from './types'; + +export default class Contour { + public points: Point[] = []; + public holeIds: ContourId[] = []; + public holeOf: ContourId | null = null; + public depth = 0; + + public isExterior() { + return this.holeOf === null; + } +} diff --git a/src/debug_utils.js b/src/debug_utils.ts similarity index 100% rename from src/debug_utils.js rename to src/debug_utils.ts diff --git a/src/divide_segment.js b/src/divide_segment.ts similarity index 64% rename from src/divide_segment.js rename to src/divide_segment.ts index 82ffb90..31a1c1d 100644 --- a/src/divide_segment.js +++ b/src/divide_segment.ts @@ -1,16 +1,11 @@ -import SweepEvent from './sweep_event'; -import equals from './equals'; +import SweepEvent from './sweep_event'; +import equals from './equals'; import compareEvents from './compare_events'; +import { Point, Queue } from './types'; -/** - * @param {SweepEvent} se - * @param {Array.} p - * @param {Queue} queue - * @return {Queue} - */ -export default function divideSegment(se, p, queue) { - const r = new SweepEvent(p, false, se, se.isSubject); - const l = new SweepEvent(p, true, se.otherEvent, se.isSubject); +export default function divideSegment(se: SweepEvent, p: Point, queue: Queue) { + const r = new SweepEvent(p, false, se, se.isSubject); + const l = new SweepEvent(p, true, se.otherEvent, se.isSubject); /* eslint-disable no-console */ if (equals(se.point, se.otherEvent.point)) { diff --git a/src/edge_type.js b/src/edge_type.ts similarity index 100% rename from src/edge_type.js rename to src/edge_type.ts diff --git a/src/equals.js b/src/equals.ts similarity index 69% rename from src/equals.js rename to src/equals.ts index 2cca243..4d39222 100644 --- a/src/equals.js +++ b/src/equals.ts @@ -1,10 +1,9 @@ -export default function equals(p1, p2) { +import { Point } from './types'; + +export default function equals(p1: Point, p2: Point) { if (p1[0] === p2[0]) { - if (p1[1] === p2[1]) { - return true; - } else { - return false; - } + if (p1[1] === p2[1]) return true; + return false; } return false; } diff --git a/src/fill_queue.js b/src/fill_queue.js deleted file mode 100644 index 9319722..0000000 --- a/src/fill_queue.js +++ /dev/null @@ -1,74 +0,0 @@ -import Queue from 'tinyqueue'; -import SweepEvent from './sweep_event'; -import compareEvents from './compare_events'; -import { DIFFERENCE } from './operation'; - -const max = Math.max; -const min = Math.min; - -let contourId = 0; - - -function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { - let i, len, s1, s2, e1, e2; - for (i = 0, len = contourOrHole.length - 1; i < len; i++) { - s1 = contourOrHole[i]; - s2 = contourOrHole[i + 1]; - e1 = new SweepEvent(s1, false, undefined, isSubject); - e2 = new SweepEvent(s2, false, e1, isSubject); - e1.otherEvent = e2; - - if (s1[0] === s2[0] && s1[1] === s2[1]) { - continue; // skip collapsed edges, or it breaks - } - - e1.contourId = e2.contourId = depth; - if (!isExteriorRing) { - e1.isExteriorRing = false; - e2.isExteriorRing = false; - } - if (compareEvents(e1, e2) > 0) { - e2.left = true; - } else { - e1.left = true; - } - - const x = s1[0], y = s1[1]; - bbox[0] = min(bbox[0], x); - bbox[1] = min(bbox[1], y); - bbox[2] = max(bbox[2], x); - bbox[3] = max(bbox[3], y); - - // Pushing it so the queue is sorted from left to right, - // with object on the left having the highest priority. - Q.push(e1); - Q.push(e2); - } -} - - -export default function fillQueue(subject, clipping, sbbox, cbbox, operation) { - const eventQueue = new Queue(null, compareEvents); - let polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk; - - for (i = 0, ii = subject.length; i < ii; i++) { - polygonSet = subject[i]; - for (j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (isExteriorRing) contourId++; - processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); - } - } - - for (i = 0, ii = clipping.length; i < ii; i++) { - polygonSet = clipping[i]; - for (j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (operation === DIFFERENCE) isExteriorRing = false; - if (isExteriorRing) contourId++; - processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); - } - } - - return eventQueue; -} diff --git a/src/fill_queue.ts b/src/fill_queue.ts new file mode 100644 index 0000000..80d48bb --- /dev/null +++ b/src/fill_queue.ts @@ -0,0 +1,95 @@ +import BunaryQueue from 'tinyqueue'; +import SweepEvent from './sweep_event'; +import compareEvents from './compare_events'; +import { DIFFERENCE, OperationType } from './operation'; +import { BoundingBox, Contour, ContourId, MultiPolygon, Queue } from './types'; + +const max = Math.max; +const min = Math.min; + +let contourId: ContourId = 0; + +function processPolygon( + contourOrHole: Contour, + isSubject: boolean, + depth: number, + Q: Queue, + bbox: BoundingBox, + isExteriorRing: boolean +) { + for (let i = 0, len = contourOrHole.length - 1; i < len; i++) { + const s1 = contourOrHole[i]; + const s2 = contourOrHole[i + 1]; + const e1 = new SweepEvent(s1, false, null, isSubject); + const e2 = new SweepEvent(s2, false, e1, isSubject); + e1.otherEvent = e2; + + // skip collapsed edges, or it breaks + if (s1[0] === s2[0] && s1[1] === s2[1]) continue; + + e1.contourId = e2.contourId = depth; + if (!isExteriorRing) { + e1.isExteriorRing = false; + e2.isExteriorRing = false; + } + if (compareEvents(e1, e2) > 0) e2.left = true; + else e1.left = true; + + const [x, y] = s1; + bbox[0] = min(bbox[0], x); + bbox[1] = min(bbox[1], y); + bbox[2] = max(bbox[2], x); + bbox[3] = max(bbox[3], y); + + // Pushing it so the queue is sorted from left to right, + // with object on the left having the highest priority. + Q.push(e1); + Q.push(e2); + } +} + +export default function fillQueue( + subject: MultiPolygon, + clipping: MultiPolygon, + sbbox: BoundingBox, + cbbox: BoundingBox, + operation: OperationType +): Queue { + const eventQueue = new BunaryQueue(undefined, compareEvents); + let polygonSet, isExteriorRing; //, k, kk; + + for (let i = 0, ii = subject.length; i < ii; i++) { + polygonSet = subject[i]; + for (let j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (isExteriorRing) contourId++; + processPolygon( + polygonSet[j], + true, + contourId, + eventQueue, + sbbox, + isExteriorRing + ); + } + } + + for (let i = 0, ii = clipping.length; i < ii; i++) { + polygonSet = clipping[i]; + for (let j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (operation === DIFFERENCE) isExteriorRing = false; + if (isExteriorRing) contourId++; + processPolygon( + polygonSet[j], + false, + contourId, + eventQueue, + cbbox, + isExteriorRing + ); + } + } + + return eventQueue; +} diff --git a/src/index.js b/src/index.js deleted file mode 100644 index b3a3f69..0000000 --- a/src/index.js +++ /dev/null @@ -1,96 +0,0 @@ -import subdivideSegments from './subdivide_segments'; -import connectEdges from './connect_edges'; -import fillQueue from './fill_queue'; -import { - INTERSECTION, - DIFFERENCE, - UNION, - XOR -} from './operation'; - -const EMPTY = []; - - -function trivialOperation(subject, clipping, operation) { - let result = null; - if (subject.length * clipping.length === 0) { - if (operation === INTERSECTION) { - result = EMPTY; - } else if (operation === DIFFERENCE) { - result = subject; - } else if (operation === UNION || - operation === XOR) { - result = (subject.length === 0) ? clipping : subject; - } - } - return result; -} - - -function compareBBoxes(subject, clipping, sbbox, cbbox, operation) { - let result = null; - if (sbbox[0] > cbbox[2] || - cbbox[0] > sbbox[2] || - sbbox[1] > cbbox[3] || - cbbox[1] > sbbox[3]) { - if (operation === INTERSECTION) { - result = EMPTY; - } else if (operation === DIFFERENCE) { - result = subject; - } else if (operation === UNION || - operation === XOR) { - result = subject.concat(clipping); - } - } - return result; -} - - -export default function boolean(subject, clipping, operation) { - if (typeof subject[0][0][0] === 'number') { - subject = [subject]; - } - if (typeof clipping[0][0][0] === 'number') { - clipping = [clipping]; - } - let trivial = trivialOperation(subject, clipping, operation); - if (trivial) { - return trivial === EMPTY ? null : trivial; - } - const sbbox = [Infinity, Infinity, -Infinity, -Infinity]; - const cbbox = [Infinity, Infinity, -Infinity, -Infinity]; - - // console.time('fill queue'); - const eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation); - //console.timeEnd('fill queue'); - - trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation); - if (trivial) { - return trivial === EMPTY ? null : trivial; - } - // console.time('subdivide edges'); - const sortedEvents = subdivideSegments(eventQueue, subject, clipping, sbbox, cbbox, operation); - //console.timeEnd('subdivide edges'); - - // console.time('connect vertices'); - const contours = connectEdges(sortedEvents, operation); - //console.timeEnd('connect vertices'); - - // Convert contours to polygons - const polygons = []; - for (let i = 0; i < contours.length; i++) { - let contour = contours[i]; - if (contour.isExterior()) { - // The exterior ring goes first - let rings = [contour.points]; - // Followed by holes if any - for (let j = 0; j < contour.holeIds.length; j++) { - let holeId = contour.holeIds[j]; - rings.push(contours[holeId].points); - } - polygons.push(rings); - } - } - - return polygons; -} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..af53f38 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,17 @@ +import { MultiPolygon } from './types'; +import boolean from './boolean'; +import { INTERSECTION, DIFFERENCE, UNION, XOR } from './operation'; + +export const union = (subject: MultiPolygon, clipping: MultiPolygon) => + boolean(subject, clipping, UNION); + +export const diff = (subject: MultiPolygon, clipping: MultiPolygon) => + boolean(subject, clipping, DIFFERENCE); + +export const xor = (subject: MultiPolygon, clipping: MultiPolygon) => + boolean(subject, clipping, XOR); + +export const intersection = (subject: MultiPolygon, clipping: MultiPolygon) => + boolean(subject, clipping, INTERSECTION); + +export const operations = { UNION, DIFFERENCE, INTERSECTION, XOR }; diff --git a/src/operation.js b/src/operation.js deleted file mode 100644 index 56a74e3..0000000 --- a/src/operation.js +++ /dev/null @@ -1,4 +0,0 @@ -export const INTERSECTION = 0; -export const UNION = 1; -export const DIFFERENCE = 2; -export const XOR = 3; diff --git a/src/operation.ts b/src/operation.ts new file mode 100644 index 0000000..edfda39 --- /dev/null +++ b/src/operation.ts @@ -0,0 +1,10 @@ +export const INTERSECTION = 0; +export const UNION = 1; +export const DIFFERENCE = 2; +export const XOR = 3; + +export type OperationType = + | typeof INTERSECTION + | typeof UNION + | typeof DIFFERENCE + | typeof XOR; diff --git a/src/possible_intersection.js b/src/possible_intersection.ts similarity index 66% rename from src/possible_intersection.js rename to src/possible_intersection.ts index 6889250..05e1726 100644 --- a/src/possible_intersection.js +++ b/src/possible_intersection.ts @@ -1,12 +1,14 @@ import divideSegment from './divide_segment'; -import intersection from './segment_intersection'; -import equals from './equals'; +import intersection from './segment_intersection'; +import equals from './equals'; import compareEvents from './compare_events'; import { NON_CONTRIBUTING, SAME_TRANSITION, DIFFERENT_TRANSITION } from './edge_type'; +import SweepEvent from './sweep_event'; +import { Point, Queue } from './types'; /** * @param {SweepEvent} se1 @@ -14,25 +16,34 @@ import { * @param {Queue} queue * @return {Number} */ -export default function possibleIntersection (se1, se2, queue) { +export default function possibleIntersection( + se1: SweepEvent, + se2: SweepEvent, + queue: Queue +) { // that disallows self-intersecting polygons, // did cost us half a day, so I'll leave it // out of respect // if (se1.isSubject === se2.isSubject) return; const inter = intersection( - se1.point, se1.otherEvent.point, - se2.point, se2.otherEvent.point + se1.point, + se1.otherEvent.point, + se2.point, + se2.otherEvent.point, + false ); + // simplify intersection result type const nintersections = inter ? inter.length : 0; if (nintersections === 0) return 0; // no intersection // the line segments intersect at an endpoint of both line segments - if ((nintersections === 1) && - (equals(se1.point, se2.point) || - equals(se1.otherEvent.point, se2.otherEvent.point))) { + if ( + nintersections === 1 && + (equals(se1.point, se2.point) || + equals(se1.otherEvent.point, se2.otherEvent.point)) + ) return 0; - } if (nintersections === 2 && se1.isSubject === se2.isSubject) { // if(se1.contourId === se2.contourId){ @@ -45,35 +56,32 @@ export default function possibleIntersection (se1, se2, queue) { // The line segments associated to se1 and se2 intersect if (nintersections === 1) { - + // @ts-ignore; + const i0 = inter[0] as Point; // if the intersection point is not an endpoint of se1 - if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) { - divideSegment(se1, inter[0], queue); + if (!equals(se1.point, i0) && !equals(se1.otherEvent.point, i0)) { + divideSegment(se1, i0, queue); } // if the intersection point is not an endpoint of se2 - if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) { - divideSegment(se2, inter[0], queue); + if (!equals(se2.point, i0) && !equals(se2.otherEvent.point, i0)) { + divideSegment(se2, i0, queue); } return 1; } // The line segments associated to se1 and se2 overlap - const events = []; - let leftCoincide = false; + const events: SweepEvent[] = []; + let leftCoincide = false; let rightCoincide = false; - if (equals(se1.point, se2.point)) { - leftCoincide = true; // linked - } else if (compareEvents(se1, se2) === 1) { - events.push(se2, se1); - } else { - events.push(se1, se2); - } + // linked + if (equals(se1.point, se2.point)) leftCoincide = true; + else if (compareEvents(se1, se2) === 1) events.push(se2, se1); + else events.push(se1, se2); - if (equals(se1.otherEvent.point, se2.otherEvent.point)) { - rightCoincide = true; - } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { + if (equals(se1.otherEvent.point, se2.otherEvent.point)) rightCoincide = true; + else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { events.push(se2.otherEvent, se1.otherEvent); } else { events.push(se1.otherEvent, se2.otherEvent); @@ -82,8 +90,7 @@ export default function possibleIntersection (se1, se2, queue) { if ((leftCoincide && rightCoincide) || leftCoincide) { // both line segments are equal or share the left endpoint se2.type = NON_CONTRIBUTING; - se1.type = (se2.inOut === se1.inOut) - ? SAME_TRANSITION : DIFFERENT_TRANSITION; + se1.type = se2.inOut === se1.inOut ? SAME_TRANSITION : DIFFERENT_TRANSITION; if (leftCoincide && !rightCoincide) { // honestly no idea, but changing events selection from [2, 1] diff --git a/src/segment_intersection.js b/src/segment_intersection.ts similarity index 68% rename from src/segment_intersection.js rename to src/segment_intersection.ts index 1bcc718..a04e3b1 100644 --- a/src/segment_intersection.js +++ b/src/segment_intersection.ts @@ -1,29 +1,24 @@ //const EPS = 1e-9; +import { Point } from './types'; + /** * Finds the magnitude of the cross product of two vectors (if we pretend * they're in three dimensions) - * - * @param {Object} a First vector - * @param {Object} b Second vector - * @private - * @returns {Number} The magnitude of the cross product */ -function crossProduct(a, b) { - return (a[0] * b[1]) - (a[1] * b[0]); -} +const crossProduct = (ax: number, ay: number, bx: number, by: number) => + ax * by - ay * bx; /** * Finds the dot product of two vectors. - * - * @param {Object} a First vector - * @param {Object} b Second vector - * @private - * @returns {Number} The dot product */ -function dotProduct(a, b) { - return (a[0] * b[0]) + (a[1] * b[1]); -} +const dotProduct = (ax: number, ay: number, bx: number, by: number) => + ax * bx + ay * by; + +const toPoint = (px: number, py: number, s: number, dx: number, dy: number) => [ + px + s * dx, + py + s * dy +]; /** * Finds the intersection (if any) between two line segments a and b, given the @@ -44,33 +39,32 @@ function dotProduct(a, b) { * intersection. If they overlap, the two end points of the overlapping segment. * Otherwise, null. */ -export default function (a1, a2, b1, b2, noEndpointTouch) { +export default function ( + a1: Point, + a2: Point, + b1: Point, + b2: Point, + noEndpointTouch: boolean +) { // The algorithm expects our lines in the form P + sd, where P is a point, // s is on the interval [0, 1], and d is a vector. // We are passed two points. P can be the first point of each pair. The // vector, then, could be thought of as the distance (in x and y components) // from the first point to the second point. // So first, let's make our vectors: - const va = [a2[0] - a1[0], a2[1] - a1[1]]; - const vb = [b2[0] - b1[0], b2[1] - b1[1]]; - // We also define a function to convert back to regular point form: + const vax = a2[0] - a1[0]; + const vay = a2[1] - a1[1]; + const vbx = b2[0] - b1[0]; + const vby = b2[1] - b1[1]; - /* eslint-disable arrow-body-style */ - - function toPoint(p, s, d) { - return [ - p[0] + s * d[0], - p[1] + s * d[1] - ]; - } - - /* eslint-enable arrow-body-style */ + // We also define a function to convert back to regular point form: // The rest is pretty much a straight port of the algorithm. - const e = [b1[0] - a1[0], b1[1] - a1[1]]; - let kross = crossProduct(va, vb); + const ex = b1[0] - a1[0]; + const ey = b1[1] - a1[1]; + let kross = crossProduct(vax, vay, vbx, vby); let sqrKross = kross * kross; - const sqrLenA = dotProduct(va, va); + const sqrLenA = dotProduct(vax, vay, vax, vay); //const sqrLenB = dotProduct(vb, vb); // Check for line intersection. This works because of the properties of the @@ -78,29 +72,29 @@ export default function (a1, a2, b1, b2, noEndpointTouch) { // cross product is the 0 vector. The full calculation involves relative error // to account for possible very small line segments. See Schneider & Eberly // for details. - if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) { + if (sqrKross > 0 /* EPS * sqrLenB * sqLenA */) { // If they're not parallel, then (because these are line segments) they // still might not actually intersect. This code checks that the // intersection point of the lines is actually on both line segments. - const s = crossProduct(e, vb) / kross; + const s = crossProduct(ex, ey, vbx, vby) / kross; if (s < 0 || s > 1) { // not on line segment a return null; } - const t = crossProduct(e, va) / kross; + const t = crossProduct(ex, ey, vax, vay) / kross; if (t < 0 || t > 1) { // not on line segment b return null; } if (s === 0 || s === 1) { // on an endpoint of line segment a - return noEndpointTouch ? null : [toPoint(a1, s, va)]; + return noEndpointTouch ? null : [toPoint(a1[0], a1[1], s, vax, vay)]; } if (t === 0 || t === 1) { // on an endpoint of line segment b - return noEndpointTouch ? null : [toPoint(b1, t, vb)]; + return noEndpointTouch ? null : [toPoint(b1[0], b1[1], t, vbx, vby)]; } - return [toPoint(a1, s, va)]; + return [toPoint(a1[0], a1[1], s, vax, vay)]; } // If we've reached this point, then the lines are either parallel or the @@ -110,38 +104,41 @@ export default function (a1, a2, b1, b2, noEndpointTouch) { // with the line itself, then the two lines are the same line, and there will // be overlap. //const sqrLenE = dotProduct(e, e); - kross = crossProduct(e, va); + kross = crossProduct(ex, ey, vax, vay); sqrKross = kross * kross; if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { - // Lines are just parallel, not the same. No overlap. + // Lines are just parallel, not the same. No overlap. return null; } - const sa = dotProduct(va, e) / sqrLenA; - const sb = sa + dotProduct(va, vb) / sqrLenA; + const sa = dotProduct(vax, vay, ex, ey) / sqrLenA; + const sb = sa + dotProduct(vax, vay, vbx, vby) / sqrLenA; const smin = Math.min(sa, sb); const smax = Math.max(sa, sb); // this is, essentially, the FindIntersection acting on floats from // Schneider & Eberly, just inlined into this function. if (smin <= 1 && smax >= 0) { - // overlap on an end point if (smin === 1) { - return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)]; + return noEndpointTouch + ? null + : [toPoint(a1[0], a1[1], smin > 0 ? smin : 0, vax, vay)]; } if (smax === 0) { - return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)]; + return noEndpointTouch + ? null + : [toPoint(a1[0], a1[1], smax < 1 ? smax : 1, vax, vay)]; } if (noEndpointTouch && smin === 0 && smax === 1) return null; // There's overlap on a segment -- two points of intersection. Return both. return [ - toPoint(a1, smin > 0 ? smin : 0, va), - toPoint(a1, smax < 1 ? smax : 1, va) + toPoint(a1[0], a1[1], smin > 0 ? smin : 0, vax, vay), + toPoint(a1[0], a1[1], smax < 1 ? smax : 1, vax, vay) ]; } diff --git a/src/signed_area.js b/src/signed_area.ts similarity index 66% rename from src/signed_area.js rename to src/signed_area.ts index b738c38..c86a517 100644 --- a/src/signed_area.js +++ b/src/signed_area.ts @@ -1,4 +1,5 @@ -import {orient2d} from 'robust-predicates'; +import { orient2d } from 'robust-predicates'; +import { Point } from './types'; /** * Signed area of the triangle (p0, p1, p2) @@ -7,7 +8,7 @@ import {orient2d} from 'robust-predicates'; * @param {Array.} p2 * @return {Number} */ -export default function signedArea(p0, p1, p2) { +export default function signedArea(p0: Point, p1: Point, p2: Point) { const res = orient2d(p0[0], p0[1], p1[0], p1[1], p2[0], p2[1]); if (res > 0) return -1; if (res < 0) return 1; diff --git a/src/subdivide_segments.js b/src/subdivide_segments.js deleted file mode 100644 index b4933cc..0000000 --- a/src/subdivide_segments.js +++ /dev/null @@ -1,78 +0,0 @@ -import Tree from 'splaytree'; -import computeFields from './compute_fields'; -import possibleIntersection from './possible_intersection'; -import compareSegments from './compare_segments'; -import { - INTERSECTION, - DIFFERENCE -} from './operation'; - - -export default function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) { - const sweepLine = new Tree(compareSegments); - const sortedEvents = []; - - const rightbound = Math.min(sbbox[2], cbbox[2]); - - let prev, next, begin; - - while (eventQueue.length !== 0) { - let event = eventQueue.pop(); - sortedEvents.push(event); - - // optimization by bboxes for intersection and difference goes here - if ((operation === INTERSECTION && event.point[0] > rightbound) || - (operation === DIFFERENCE && event.point[0] > sbbox[2])) { - break; - } - - if (event.left) { - next = prev = sweepLine.insert(event); - begin = sweepLine.minNode(); - - if (prev !== begin) prev = sweepLine.prev(prev); - else prev = null; - - next = sweepLine.next(next); - - const prevEvent = prev ? prev.key : null; - let prevprevEvent; - computeFields(event, prevEvent, operation); - if (next) { - if (possibleIntersection(event, next.key, eventQueue) === 2) { - computeFields(event, prevEvent, operation); - computeFields(next.key, event, operation); - } - } - - if (prev) { - if (possibleIntersection(prev.key, event, eventQueue) === 2) { - let prevprev = prev; - if (prevprev !== begin) prevprev = sweepLine.prev(prevprev); - else prevprev = null; - - prevprevEvent = prevprev ? prevprev.key : null; - computeFields(prevEvent, prevprevEvent, operation); - computeFields(event, prevEvent, operation); - } - } - } else { - event = event.otherEvent; - next = prev = sweepLine.find(event); - - if (prev && next) { - - if (prev !== begin) prev = sweepLine.prev(prev); - else prev = null; - - next = sweepLine.next(next); - sweepLine.remove(event); - - if (next && prev) { - possibleIntersection(prev.key, next.key, eventQueue); - } - } - } - } - return sortedEvents; -} diff --git a/src/subdivide_segments.ts b/src/subdivide_segments.ts new file mode 100644 index 0000000..0417cdd --- /dev/null +++ b/src/subdivide_segments.ts @@ -0,0 +1,94 @@ +import Tree, { Node } from 'splaytree'; +import computeFields from './compute_fields'; +import possibleIntersection from './possible_intersection'; +import compareSegments from './compare_segments'; +import { INTERSECTION, DIFFERENCE, OperationType } from './operation'; +import { BoundingBox, Queue } from './types'; +import SweepEvent from './sweep_event'; + +type TreeNode = Node; + +export default function subdivide( + eventQueue: Queue, + sbbox: BoundingBox, + cbbox: BoundingBox, + operation: OperationType +) { + const sweepLine = new Tree(compareSegments); + const sortedEvents: SweepEvent[] = []; + + const rightbound = Math.min(sbbox[2], cbbox[2]); + + let prev: TreeNode | null, + next: TreeNode, + begin: TreeNode = sweepLine.minNode(); + + while (eventQueue.length !== 0) { + let event = eventQueue.pop() as SweepEvent; + sortedEvents.push(event); + + // optimization by bboxes for intersection and difference goes here + if ( + (operation === INTERSECTION && event.point[0] > rightbound) || + (operation === DIFFERENCE && event.point[0] > sbbox[2]) + ) { + break; + } + + if (event.left) { + next = prev = sweepLine.insert(event); + begin = sweepLine.minNode(); + + if (prev !== begin) prev = sweepLine.prev(prev); + else prev = null; + + next = sweepLine.next(next); + + const prevEvent = prev ? (prev.key as SweepEvent) : null; + let prevprevEvent; + computeFields(event, prevEvent, operation); + if (next) { + if ( + possibleIntersection(event, next.key as SweepEvent, eventQueue) === 2 + ) { + computeFields(event, prevEvent, operation); + computeFields(event, next.key as SweepEvent, operation); + } + } + + if (prev) { + if ( + possibleIntersection(prev.key as SweepEvent, event, eventQueue) === 2 + ) { + let prevprev: TreeNode | null = prev; + if (prevprev !== begin) prevprev = sweepLine.prev(prevprev); + else prevprev = null; + + prevprevEvent = prevprev ? (prevprev.key as SweepEvent) : null; + computeFields(prevEvent as SweepEvent, prevprevEvent, operation); + computeFields(event, prevEvent, operation); + } + } + } else { + event = event.otherEvent; + next = prev = sweepLine.find(event); + + if (prev && next) { + if (prev !== begin) prev = sweepLine.prev(prev); + else prev = null; + + next = sweepLine.next(next); + sweepLine.remove(event); + + if (next && prev) { + possibleIntersection( + prev.key as SweepEvent, + next.key as SweepEvent, + eventQueue + ); + } + } + } + } + return sortedEvents; +} diff --git a/src/sweep_event.js b/src/sweep_event.js deleted file mode 100644 index 1c2e991..0000000 --- a/src/sweep_event.js +++ /dev/null @@ -1,142 +0,0 @@ -import { NORMAL } from './edge_type'; - - -export default class SweepEvent { - - - /** - * Sweepline event - * - * @class {SweepEvent} - * @param {Array.} point - * @param {Boolean} left - * @param {SweepEvent=} otherEvent - * @param {Boolean} isSubject - * @param {Number} edgeType - */ - constructor (point, left, otherEvent, isSubject, edgeType) { - - /** - * Is left endpoint? - * @type {Boolean} - */ - this.left = left; - - /** - * @type {Array.} - */ - this.point = point; - - /** - * Other edge reference - * @type {SweepEvent} - */ - this.otherEvent = otherEvent; - - /** - * Belongs to source or clipping polygon - * @type {Boolean} - */ - this.isSubject = isSubject; - - /** - * Edge contribution type - * @type {Number} - */ - this.type = edgeType || NORMAL; - - - /** - * In-out transition for the sweepline crossing polygon - * @type {Boolean} - */ - this.inOut = false; - - - /** - * @type {Boolean} - */ - this.otherInOut = false; - - /** - * Previous event in result? - * @type {SweepEvent} - */ - this.prevInResult = null; - - /** - * Type of result transition (0 = not in result, +1 = out-in, -1, in-out) - * @type {Number} - */ - this.resultTransition = 0; - - // connection step - - /** - * @type {Number} - */ - this.otherPos = -1; - - /** - * @type {Number} - */ - this.outputContourId = -1; - - this.isExteriorRing = true; // TODO: Looks unused, remove? - } - - - /** - * @param {Array.} p - * @return {Boolean} - */ - isBelow (p) { - const p0 = this.point, p1 = this.otherEvent.point; - return this.left - ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 - // signedArea(this.point, this.otherEvent.point, p) > 0 : - : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; - //signedArea(this.otherEvent.point, this.point, p) > 0; - } - - - /** - * @param {Array.} p - * @return {Boolean} - */ - isAbove (p) { - return !this.isBelow(p); - } - - - /** - * @return {Boolean} - */ - isVertical () { - return this.point[0] === this.otherEvent.point[0]; - } - - - /** - * Does event belong to result? - * @return {Boolean} - */ - get inResult() { - return this.resultTransition !== 0; - } - - - clone () { - const copy = new SweepEvent( - this.point, this.left, this.otherEvent, this.isSubject, this.type); - - copy.contourId = this.contourId; - copy.resultTransition = this.resultTransition; - copy.prevInResult = this.prevInResult; - copy.isExteriorRing = this.isExteriorRing; - copy.inOut = this.inOut; - copy.otherInOut = this.otherInOut; - - return copy; - } -} diff --git a/src/sweep_event.ts b/src/sweep_event.ts new file mode 100644 index 0000000..221f0d9 --- /dev/null +++ b/src/sweep_event.ts @@ -0,0 +1,132 @@ +import { NORMAL } from './edge_type'; +import { Point } from './types'; + +export default class SweepEvent { + public left: boolean; + public isSubject: boolean; + public point: Point; + public otherEvent: SweepEvent; + public type: number; + /** @internal */ + public pos?: number; + + // transition flags + // In-out transition for the sweepline crossing polygon + public inOut = false; + public otherInOut = false; + public prevInResult: SweepEvent | null = null; + // Does event belong to result? + //public inResult: boolean = false; + + // connection step + public resultInOut = false; + public isExteriorRing = true; + public contourId = -1; + public resultTransition = 0; + public outputContourId = 0; + public otherPos = 0; + + /** + * Sweepline event + * + * @class {SweepEvent} + * @param {Array.} point + * @param {Boolean} left + * @param {SweepEvent=} otherEvent + * @param {Boolean} isSubject + * @param {Number} edgeType + */ + constructor( + point: Point, + left: boolean, + otherEvent: SweepEvent | null, + isSubject: boolean + ) { + this.left = left; + this.point = point; + this.otherEvent = otherEvent as SweepEvent; + this.isSubject = isSubject; + this.type = NORMAL; + this.inOut = false; + this.otherInOut = false; + + /** + * Previous event in result? + * @type {SweepEvent} + */ + this.prevInResult = null; + + /** + * Type of result transition (0 = not in result, +1 = out-in, -1, in-out) + * @type {Number} + */ + this.resultTransition = 0; + + // connection step + + /** + * @type {Number} + */ + this.otherPos = -1; + + /** + * @type {Number} + */ + this.outputContourId = -1; + + this.isExteriorRing = true; // TODO: Looks unused, remove? + } + + isBelow(p: Point) { + return isBelow(this, p); + } + + isAbove(p: Point) { + return !isBelow(this, p); + } + + /** + * @return {Boolean} + */ + isVertical() { + return this.point[0] === this.otherEvent.point[0]; + } + + /** + * Does event belong to result? + * TODO: make it static + * @return {Boolean} + */ + get inResult() { + return this.resultTransition !== 0; + } + + clone(): SweepEvent { + const copy = new SweepEvent( + this.point, + this.left, + this.otherEvent, + this.isSubject + ); + + copy.type = this.type; + copy.resultTransition = this.resultTransition; + //copy.inResult = this.inResult; + copy.prevInResult = this.prevInResult; + copy.isExteriorRing = this.isExteriorRing; + copy.inOut = this.inOut; + copy.otherInOut = this.otherInOut; + + return copy; + } +} + +export function isBelow(e: SweepEvent, p: Point): boolean { + const p0 = e.point, + p1 = e.otherEvent.point; + return e.left + ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 + : // signedArea(this.point, this.otherEvent.point, p) > 0 : + (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; + //signedArea(this.otherEvent.point, this.point, p) > 0; +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..52593e9 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,19 @@ +import SweepEvent from './sweep_event'; +import BinaryQueue from 'tinyqueue'; + +export declare type Point = [number, number]; +export declare type MultiPolygon = Point[][][]; +export declare type Polygon = Point[][]; +export declare type Contour = Point[]; +export declare type BoundingBox = [number, number, number, number]; +export type Geometry = Polygon | MultiPolygon; + +export type Queue = BinaryQueue; + +export function isPolygon( + geometry: Polygon | MultiPolygon +): geometry is Polygon { + return typeof geometry[0][0][0] === 'number'; +} + +export type ContourId = number; diff --git a/test/compare_events.test.js b/test/compare_events.test.js index ef8066f..5552663 100644 --- a/test/compare_events.test.js +++ b/test/compare_events.test.js @@ -1,14 +1,13 @@ -import tap from 'tape'; -import Queue from 'tinyqueue'; -import sweepEventsComp from '../src/compare_events'; -import SweepEvent from '../src/sweep_event'; +import tap from 'tape'; +import Queue from 'tinyqueue'; +import sweepEventsComp from '../dist/compare_events'; +import SweepEvent from '../dist/sweep_event'; tap.test('queue', (main) => { - main.test('queue should process lest(by x) sweep event first', (t) => { const queue = new Queue(null, sweepEventsComp); - const e1 = {point: [0.0, 0.0]}; - const e2 = {point: [0.5, 0.5]}; + const e1 = { point: [0.0, 0.0] }; + const e2 = { point: [0.5, 0.5] }; queue.push(e1); queue.push(e2); @@ -21,8 +20,8 @@ tap.test('queue', (main) => { main.test('queue should process lest(by y) sweep event first', (t) => { const queue = new Queue(null, sweepEventsComp); - const e1 = {point: [0.0, 0.0]}; - const e2 = {point: [0.0, 0.5]}; + const e1 = { point: [0.0, 0.0] }; + const e2 = { point: [0.0, 0.5] }; queue.push(e1); queue.push(e2); @@ -33,11 +32,10 @@ tap.test('queue', (main) => { t.end(); }); - main.test('queue should pop least(by left prop) sweep event first', (t) => { const queue = new Queue(null, sweepEventsComp); - const e1 = {point: [0.0, 0.0], left: true}; - const e2 = {point: [0.0, 0.0], left: false}; + const e1 = { point: [0.0, 0.0], left: true }; + const e2 = { point: [0.0, 0.0], left: false }; queue.push(e1); queue.push(e2); @@ -52,8 +50,8 @@ tap.test('queue', (main) => { }); tap.test('sweep event comparison x coordinates', (t) => { - const e1 = {point: [0.0, 0.0]}; - const e2 = {point: [0.5, 0.5]}; + const e1 = { point: [0.0, 0.0] }; + const e2 = { point: [0.5, 0.5] }; t.equals(sweepEventsComp(e1, e2), -1); t.equals(sweepEventsComp(e2, e1), 1); @@ -62,8 +60,8 @@ tap.test('sweep event comparison x coordinates', (t) => { }); tap.test('sweep event comparison y coordinates', (t) => { - const e1 = {point: [0.0, 0.0]}; - const e2 = {point: [0.0, 0.5]}; + const e1 = { point: [0.0, 0.0] }; + const e2 = { point: [0.0, 0.5] }; t.equals(sweepEventsComp(e1, e2), -1); t.equals(sweepEventsComp(e2, e1), 1); @@ -72,8 +70,8 @@ tap.test('sweep event comparison y coordinates', (t) => { }); tap.test('sweep event comparison not left first', (t) => { - const e1 = {point: [0.0, 0.0], left: true}; - const e2 = {point: [0.0, 0.0], left: false}; + const e1 = { point: [0.0, 0.0], left: true }; + const e2 = { point: [0.0, 0.0], left: false }; t.equals(sweepEventsComp(e1, e2), 1); t.equals(sweepEventsComp(e2, e1), -1); @@ -81,22 +79,35 @@ tap.test('sweep event comparison not left first', (t) => { t.end(); }); -tap.test('sweep event comparison shared start point not collinear edges', (t) => { - const e1 = new SweepEvent([0.0, 0.0], true, new SweepEvent([1, 1], false)); - const e2 = new SweepEvent([0.0, 0.0], true, new SweepEvent([2, 3], false)); +tap.test( + 'sweep event comparison shared start point not collinear edges', + (t) => { + const e1 = new SweepEvent([0.0, 0.0], true, new SweepEvent([1, 1], false)); + const e2 = new SweepEvent([0.0, 0.0], true, new SweepEvent([2, 3], false)); - t.equals(sweepEventsComp(e1, e2), -1, 'lower is processed first'); - t.equals(sweepEventsComp(e2, e1), 1, 'higher is processed second'); + t.equals(sweepEventsComp(e1, e2), -1, 'lower is processed first'); + t.equals(sweepEventsComp(e2, e1), 1, 'higher is processed second'); - t.end(); -}); + t.end(); + } +); tap.test('sweep event comparison collinear edges', (t) => { - const e1 = new SweepEvent([0.0, 0.0], true, new SweepEvent([1, 1], false), true); - const e2 = new SweepEvent([0.0, 0.0], true, new SweepEvent([2, 2], false), false); + const e1 = new SweepEvent( + [0.0, 0.0], + true, + new SweepEvent([1, 1], false), + true + ); + const e2 = new SweepEvent( + [0.0, 0.0], + true, + new SweepEvent([2, 2], false), + false + ); t.equals(sweepEventsComp(e1, e2), -1, 'clipping is processed first'); - t.equals(sweepEventsComp(e2, e1), 1, 'subject is processed second'); + t.equals(sweepEventsComp(e2, e1), 1, 'subject is processed second'); t.end(); }); diff --git a/test/compare_segments.test.js b/test/compare_segments.test.js index 982be8c..8b4315a 100644 --- a/test/compare_segments.test.js +++ b/test/compare_segments.test.js @@ -1,15 +1,11 @@ -'use strict'; - -import tap from 'tape'; -import Tree from 'splaytree'; -import compareSegments from '../src/compare_segments'; -import compareEvents from '../src/compare_events'; -import SweepEvent from '../src/sweep_event'; +import tap from 'tape'; +import Tree from 'splaytree'; +import compareSegments from '../dist/compare_segments'; +import compareEvents from '../dist/compare_events'; +import SweepEvent from '../dist/sweep_event'; tap.test('compare segments', (main) => { - main.test('not collinear', (secondary) => { - secondary.test('shared left point - right point first', (t) => { const tree = new Tree(compareSegments); const pt = [0.0, 0.0]; @@ -25,22 +21,25 @@ tap.test('compare segments', (main) => { t.end(); }); - secondary.test('different left point - right point y coord to sort', (t) => { - const tree = new Tree(compareSegments); - const se1 = new SweepEvent([0, 1], true, new SweepEvent([1, 1], false)); - const se2 = new SweepEvent([0, 2], true, new SweepEvent([2, 3], false)); + secondary.test( + 'different left point - right point y coord to sort', + (t) => { + const tree = new Tree(compareSegments); + const se1 = new SweepEvent([0, 1], true, new SweepEvent([1, 1], false)); + const se2 = new SweepEvent([0, 2], true, new SweepEvent([2, 3], false)); - tree.insert(se1); - tree.insert(se2); + tree.insert(se1); + tree.insert(se2); - t.deepEqual(tree.minNode().key.otherEvent.point, [1, 1]); - t.deepEqual(tree.maxNode().key.otherEvent.point, [2, 3]); + t.deepEqual(tree.minNode().key.otherEvent.point, [1, 1]); + t.deepEqual(tree.maxNode().key.otherEvent.point, [2, 3]); - t.end(); - }); + t.end(); + } + ); secondary.test('events order in sweep line', (t) => { - const se1 = new SweepEvent([0, 1], true, new SweepEvent([2, 1], false)); + const se1 = new SweepEvent([0, 1], true, new SweepEvent([2, 1], false)); const se2 = new SweepEvent([-1, 0], true, new SweepEvent([2, 3], false)); const se3 = new SweepEvent([0, 1], true, new SweepEvent([3, 4], false)); @@ -51,7 +50,7 @@ tap.test('compare segments', (main) => { t.ok(se2.isAbove(se1.point)); t.equal(compareSegments(se1, se2), -1, 'compare segments'); - t.equal(compareSegments(se2, se1), 1, 'compare segments inverted'); + t.equal(compareSegments(se2, se1), 1, 'compare segments inverted'); t.equal(compareEvents(se3, se4), 1); t.notOk(se4.isAbove(se3.point)); @@ -60,7 +59,7 @@ tap.test('compare segments', (main) => { }); secondary.test('first point is below', (t) => { - const se2 = new SweepEvent([0, 1], true, new SweepEvent([2, 1], false)); + const se2 = new SweepEvent([0, 1], true, new SweepEvent([2, 1], false)); const se1 = new SweepEvent([-1, 0], true, new SweepEvent([2, 3], false)); t.notOk(se1.isBelow(se2.point)); @@ -73,8 +72,18 @@ tap.test('compare segments', (main) => { }); main.test('collinear segments', (t) => { - const se1 = new SweepEvent([1, 1], true, new SweepEvent([5, 1], false), true); - const se2 = new SweepEvent([2, 1], true, new SweepEvent([3, 1], false), false); + const se1 = new SweepEvent( + [1, 1], + true, + new SweepEvent([5, 1], false), + true + ); + const se2 = new SweepEvent( + [2, 1], + true, + new SweepEvent([3, 1], false), + false + ); t.notEqual(se1.isSubject, se2.isSubject); t.equal(compareSegments(se1, se2), -1); @@ -104,10 +113,19 @@ tap.test('compare segments', (main) => { t.end(); }); - main.test('collinear same polygon different left points', (t) => { - const se1 = new SweepEvent([1, 1], true, new SweepEvent([5, 1], false), true); - const se2 = new SweepEvent([2, 1], true, new SweepEvent([3, 1], false), true); + const se1 = new SweepEvent( + [1, 1], + true, + new SweepEvent([5, 1], false), + true + ); + const se2 = new SweepEvent( + [2, 1], + true, + new SweepEvent([3, 1], false), + true + ); t.equal(se1.isSubject, se2.isSubject); t.notEqual(se1.point, se2.point); diff --git a/test/divide_segment.test.js b/test/divide_segment.test.js index d7a75d1..c9f2784 100644 --- a/test/divide_segment.test.js +++ b/test/divide_segment.test.js @@ -1,43 +1,53 @@ -import tap from 'tape'; -import path from 'path'; -import Queue from 'tinyqueue'; -import load from 'load-json-file'; -import martinez from '../'; -import SweepEvent from '../src/sweep_event'; -import compareEvents from '../src/compare_events'; -import intersection from '../src/segment_intersection'; -import equals from '../src/equals'; -import fillQueue from '../src/fill_queue'; -import divideSegment from '../src/divide_segment'; +import tap from 'tape'; +import path from 'path'; +import Queue from 'tinyqueue'; +import load from 'load-json-file'; +import martinez from '../'; +import SweepEvent from '../src/sweep_event'; +import compareEvents from '../src/compare_events'; +import intersection from '../src/segment_intersection'; +import equals from '../src/equals'; +import fillQueue from '../src/fill_queue'; +import divideSegment from '../src/divide_segment'; import subdivideSegments from '../src/subdivide_segments'; import possibleIntersection from '../src/possible_intersection'; -import Tree from 'splaytree'; -import compareSegments from '../src/compare_segments'; +import Tree from 'splaytree'; +import compareSegments from '../src/compare_segments'; // GeoJSON Data -const shapes = load.sync(path.join(__dirname, 'fixtures', 'two_shapes.geojson')); - - +const shapes = load.sync( + path.join(__dirname, 'fixtures', 'two_shapes.geojson') +); const subject = shapes.features[0]; const clipping = shapes.features[1]; tap.test('divide segments', (main) => { - main.test('divide 2 segments', (t) => { - const se1 = new SweepEvent([0, 0], true, new SweepEvent([5, 5], false), true); - const se2 = new SweepEvent([0, 5], true, new SweepEvent([5, 0], false), false); + const se1 = new SweepEvent( + [0, 0], + true, + new SweepEvent([5, 5], false), + true + ); + const se2 = new SweepEvent( + [0, 5], + true, + new SweepEvent([5, 0], false), + false + ); const q = new Queue(null, compareEvents); q.push(se1); q.push(se2); const iter = intersection( - se1.point, se1.otherEvent.point, - se2.point, se2.otherEvent.point + se1.point, + se1.otherEvent.point, + se2.point, + se2.otherEvent.point ); - divideSegment(se1, iter[0], q); divideSegment(se2, iter[0], q); @@ -47,14 +57,23 @@ tap.test('divide segments', (main) => { }); main.test('possible intersections', (t) => { - const s = subject.geometry.coordinates; const c = clipping.geometry.coordinates; const q = new Queue(null, compareEvents); - const se1 = new SweepEvent(s[0][3], true, new SweepEvent(s[0][2], false), true); - const se2 = new SweepEvent(c[0][0], true, new SweepEvent(c[0][1], false), false); + const se1 = new SweepEvent( + s[0][3], + true, + new SweepEvent(s[0][2], false), + true + ); + const se2 = new SweepEvent( + c[0][0], + true, + new SweepEvent(c[0][1], false), + false + ); // console.log(se1.point, se1.left, se1.otherEvent.point, se1.otherEvent.left); // console.log(se2.point, se2.left, se2.otherEvent.point, se2.otherEvent.left); @@ -93,7 +112,7 @@ tap.test('divide segments', (main) => { const p1 = [298, 359]; const p2 = [156, 203.5]; - const te = new SweepEvent(p0, true, null, true); + const te = new SweepEvent(p0, true, null, true); const te2 = new SweepEvent(p1, false, te, false); te.otherEvent = te2; @@ -112,7 +131,7 @@ tap.test('divide segments', (main) => { t.equals(compareSegments(te, te3), 1); t.equals(compareSegments(te3, te), -1); - const segments = subdivideSegments(q, s, c, bbox, bbox, 0); + const segments = subdivideSegments(q, bbox, bbox, 0); const leftSegments = []; for (let i = 0; i < segments.length; i++) { if (segments[i].left) { @@ -133,85 +152,99 @@ tap.test('divide segments', (main) => { const B = [241.5, 229.5]; const intervals = { - 'EI': { - l: E, r: I, + EI: { + l: E, + r: I, inOut: false, otherInOut: true, inResult: false, prevInResult: null }, - 'IF': { - l: I, r: F, + IF: { + l: I, + r: F, inOut: false, otherInOut: false, inResult: true, prevInResult: null }, - 'FJ': { - l: F, r: J, + FJ: { + l: F, + r: J, inOut: false, otherInOut: false, inResult: true, prevInResult: null }, - 'JG': { - l: J, r: G, + JG: { + l: J, + r: G, inOut: false, otherInOut: true, inResult: false, prevInResult: null }, - 'EG': { - l: E, r: G, + EG: { + l: E, + r: G, inOut: true, otherInOut: true, inResult: false, prevInResult: null }, - 'DA': { - l: D, r: A, + DA: { + l: D, + r: A, inOut: false, otherInOut: true, inResult: false, prevInResult: null }, - 'AB': { - l: A, r: B, + AB: { + l: A, + r: B, inOut: false, otherInOut: true, inResult: false, prevInResult: null }, - 'JB': { - l: J, r: B, + JB: { + l: J, + r: B, inOut: true, otherInOut: true, inResult: false, prevInResult: null }, - 'CJ': { - l: C, r: J, + CJ: { + l: C, + r: J, inOut: true, otherInOut: false, inResult: true, prevInResult: { - l: F, r: J, + l: F, + r: J, prevInResult: null } }, - 'IC': { - l: I, r: C, + IC: { + l: I, + r: C, inOut: true, otherInOut: false, inResult: true, prevInResult: { - l: I, r: F, + l: I, + r: F, prevInResult: null - }}, + } + }, - 'DI': { - l: D, r: I, + DI: { + l: D, + r: I, inOut: true, otherInOut: true, inResult: false, @@ -223,14 +256,16 @@ tap.test('divide segments', (main) => { const data = intervals[interval]; for (let x = 0; x < leftSegments.length; x++) { const seg = leftSegments[x]; - if (equals(seg.point, data.l) && - equals(seg.otherEvent.point, data.r) && - seg.inOut === data.inOut && - seg.otherInOut === data.otherInOut && - seg.inResult === data.inResult && - ((seg.prevInResult === null && data.prevInResult === null) || + if ( + equals(seg.point, data.l) && + equals(seg.otherEvent.point, data.r) && + seg.inOut === data.inOut && + seg.otherInOut === data.otherInOut && + seg.inResult === data.inResult && + ((seg.prevInResult === null && data.prevInResult === null) || (equals(seg.prevInResult.point, data.prevInResult.l) && - equals(seg.prevInResult.otherEvent.point, data.prevInResult.r)))) { + equals(seg.prevInResult.otherEvent.point, data.prevInResult.r))) + ) { t.pass(interval); return; } diff --git a/test/featureTypes.test.js b/test/featureTypes.test.js index 0797f45..a222e74 100644 --- a/test/featureTypes.test.js +++ b/test/featureTypes.test.js @@ -1,56 +1,105 @@ -import tap from 'tape'; -import path from 'path'; -import load from 'load-json-file'; -import * as martinez from '../index'; +import tap from 'tape'; +import path from 'path'; +import load from 'load-json-file'; +import * as martinez from '../src'; -const clipping = load.sync(path.join(__dirname, 'featureTypes', 'clippingPoly.geojson')); +const clipping = load.sync( + path.join(__dirname, 'featureTypes', 'clippingPoly.geojson') +); const outDir = path.join(__dirname, 'featureTypes', 'out'); const testScenarios = [ { testName: 'polyToClipping', - subjectPoly: 'poly', + subjectPoly: 'poly' }, { testName: 'polyWithHoleToClipping', - subjectPoly: 'polyWithHole', + subjectPoly: 'polyWithHole' }, { testName: 'multiPolyToClipping', - subjectPoly: 'multiPoly', + subjectPoly: 'multiPoly' }, { testName: 'multiPolyWithHoleToClipping', - subjectPoly: 'multiPolyWithHole', + subjectPoly: 'multiPolyWithHole' } ]; testScenarios.forEach((ts) => { - const subject = load.sync(path.join(__dirname, 'featureTypes', ts.subjectPoly + '.geojson')); + const subject = load.sync( + path.join(__dirname, 'featureTypes', ts.subjectPoly + '.geojson') + ); tap.test(ts.testName, (t) => { + const expectedIntResult = load.sync( + path.join(outDir, 'intersection', t.name + '.geojson') + ); + if (expectedIntResult.geometry.type === 'Polygon') + expectedIntResult.geometry.coordinates = [ + expectedIntResult.geometry.coordinates + ]; + const intResult = martinez.intersection( + subject.geometry.coordinates, + clipping.geometry.coordinates + ); + t.same( + intResult, + expectedIntResult.geometry.coordinates, + ts.testName + ' - Intersect' + ); - const expectedIntResult = load.sync(path.join(outDir, 'intersection', t.name + '.geojson')) - if (expectedIntResult.geometry.type === 'Polygon') expectedIntResult.geometry.coordinates = [expectedIntResult.geometry.coordinates] - const intResult = martinez.intersection(subject.geometry.coordinates, clipping.geometry.coordinates); - t.same(intResult, expectedIntResult.geometry.coordinates, ts.testName + ' - Intersect'); + const expectedXorResult = load.sync( + path.join(outDir, 'xor', t.name + '.geojson') + ); + if (expectedXorResult.geometry.type === 'Polygon') + expectedXorResult.geometry.coordinates = [ + expectedXorResult.geometry.coordinates + ]; + const xorResult = martinez.xor( + subject.geometry.coordinates, + clipping.geometry.coordinates + ); + t.same( + xorResult, + expectedXorResult.geometry.coordinates, + ts.testName + ' - XOR' + ); - const expectedXorResult = load.sync(path.join(outDir, 'xor', t.name + '.geojson')) - if (expectedXorResult.geometry.type === 'Polygon') expectedXorResult.geometry.coordinates = [expectedXorResult.geometry.coordinates] - const xorResult = martinez.xor(subject.geometry.coordinates, clipping.geometry.coordinates); - t.same(xorResult, expectedXorResult.geometry.coordinates, ts.testName + ' - XOR'); + const expectedDiffResult = load.sync( + path.join(outDir, 'difference', t.name + '.geojson') + ); + if (expectedDiffResult.geometry.type === 'Polygon') + expectedDiffResult.geometry.coordinates = [ + expectedDiffResult.geometry.coordinates + ]; + const diffResult = martinez.diff( + subject.geometry.coordinates, + clipping.geometry.coordinates + ); + t.same( + diffResult, + expectedDiffResult.geometry.coordinates, + ts.testName + ' - Difference' + ); - const expectedDiffResult = load.sync(path.join(outDir, 'difference', t.name + '.geojson')) - if (expectedDiffResult.geometry.type === 'Polygon') expectedDiffResult.geometry.coordinates = [expectedDiffResult.geometry.coordinates] - const diffResult = martinez.diff(subject.geometry.coordinates, clipping.geometry.coordinates); - t.same(diffResult, expectedDiffResult.geometry.coordinates, ts.testName + ' - Difference'); - - const expectedUnionResult = load.sync(path.join(outDir, 'union', t.name + '.geojson')) - if (expectedUnionResult.geometry.type === 'Polygon') expectedUnionResult.geometry.coordinates = [expectedUnionResult.geometry.coordinates] - const unionResult = martinez.union(subject.geometry.coordinates, clipping.geometry.coordinates); - t.same(unionResult, expectedUnionResult.geometry.coordinates, ts.testName + ' - Union'); + const expectedUnionResult = load.sync( + path.join(outDir, 'union', t.name + '.geojson') + ); + if (expectedUnionResult.geometry.type === 'Polygon') + expectedUnionResult.geometry.coordinates = [ + expectedUnionResult.geometry.coordinates + ]; + const unionResult = martinez.union( + subject.geometry.coordinates, + clipping.geometry.coordinates + ); + t.same( + unionResult, + expectedUnionResult.geometry.coordinates, + ts.testName + ' - Union' + ); t.end(); }); - }); - diff --git a/test/genericTestCases.test.js b/test/genericTestCases.test.js index ceae7f8..7dca7b1 100644 --- a/test/genericTestCases.test.js +++ b/test/genericTestCases.test.js @@ -1,30 +1,29 @@ -import tap from 'tape'; -import path from 'path'; -import glob from 'glob'; -import load from 'load-json-file'; -import fs from 'fs'; +import tap from 'tape'; +import path from 'path'; +import glob from 'glob'; +import load from 'load-json-file'; +import fs from 'fs'; import stringify from 'json-stringify-pretty-compact'; -import * as martinez from '../index'; - +import * as martinez from '..'; function extractExpectedResults(features) { - return features.map(feature => { + return features.map((feature) => { let mode = feature.properties.operation; var op; switch (mode) { - case "union": + case 'union': op = martinez.union; break; - case "intersection": + case 'intersection': op = martinez.intersection; break; - case "xor": + case 'xor': op = martinez.xor; break; - case "diff": + case 'diff': op = martinez.diff; break; - case "diff_ba": + case 'diff_ba': op = (a, b) => martinez.diff(b, a); break; } @@ -33,12 +32,11 @@ function extractExpectedResults(features) { } return { op: op, - coordinates: feature.geometry.coordinates, + coordinates: feature.geometry.coordinates }; }); } - const caseDir = path.join(__dirname, 'genericTestCases'); const testCases = glob.sync(path.join(caseDir, '*.geojson')); if (testCases.length === 0) { @@ -48,7 +46,6 @@ if (testCases.length === 0) { testCases.forEach((testCaseFile) => { let testName = 'Generic test case: ' + path.basename(testCaseFile); tap.test(testName, (t) => { - const data = load.sync(testCaseFile); if (data.features.length < 2) { throw `Test case file must contain at least two features, but ${testCaseFile} doesn't.`; @@ -57,8 +54,14 @@ testCases.forEach((testCaseFile) => { let p1Geometry = data.features[0].geometry; let p2Geometry = data.features[1].geometry; - let p1 = p1Geometry.type === 'Polygon' ? [p1Geometry.coordinates] : p1Geometry.coordinates; - let p2 = p2Geometry.type === 'Polygon' ? [p2Geometry.coordinates] : p2Geometry.coordinates; + let p1 = + p1Geometry.type === 'Polygon' + ? [p1Geometry.coordinates] + : p1Geometry.coordinates; + let p2 = + p2Geometry.type === 'Polygon' + ? [p2Geometry.coordinates] + : p2Geometry.coordinates; let expectedResults = extractExpectedResults(data.features.slice(2)); @@ -79,6 +82,4 @@ testCases.forEach((testCaseFile) => { t.end(); }); - }); - diff --git a/test/index.test.js b/test/index.test.js index 92c4c14..1d5e11f 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -1,13 +1,14 @@ -import tap from 'tape'; -import path from 'path'; -import load from 'load-json-file'; -import martinez from '../'; -import fillQueue from '../src/fill_queue'; +import tap from 'tape'; +import path from 'path'; +import load from 'load-json-file'; +import fillQueue from '../dist/fill_queue'; // GeoJSON Data -const data = load.sync(path.join(__dirname, 'fixtures', 'two_triangles.geojson')); +const data = load.sync( + path.join(__dirname, 'fixtures', 'two_triangles.geojson') +); -const subject = data.features[0]; +const subject = data.features[0]; const clipping = data.features[1]; tap.test('fill event queue', (main) => { @@ -29,128 +30,165 @@ tap.test('fill event queue', (main) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [20, -23.5]); /* s[0][0] */ t.ok(currentPoint.left, 'is left'); - t.deepEqual(currentPoint.otherEvent.point, [226.5, -113.5], 'other event'); /* s[0][2] */ + t.deepEqual( + currentPoint.otherEvent.point, + [226.5, -113.5], + 'other event' + ); /* s[0][2] */ t.notOk(currentPoint.otherEvent.left, 'other event is right'); t.end(); }); - main.test('point 1', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [20, -23.5]); /* s[0][0] */ t.ok(currentPoint.left, 'is left'); - t.deepEqual(currentPoint.otherEvent.point, [170, 74], 'other event'); /* s[0][1] */ + t.deepEqual( + currentPoint.otherEvent.point, + [170, 74], + 'other event' + ); /* s[0][1] */ t.notOk(currentPoint.otherEvent.left, 'other event is right'); t.end(); }); - main.test('point 2', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [54.5, -170.5]); /* c[0][0] */ t.ok(currentPoint.left, 'is left'); - t.deepEqual(currentPoint.otherEvent.point, [239.5, -198], 'other event'); /* c[0][2] */ + t.deepEqual( + currentPoint.otherEvent.point, + [239.5, -198], + 'other event' + ); /* c[0][2] */ t.notOk(currentPoint.otherEvent.left, 'other event is right'); t.end(); }); - main.test('point 3', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [54.5, -170.5]); /* c[0][0] */ t.ok(currentPoint.left, 'is left'); - t.deepEqual(currentPoint.otherEvent.point, [140.5, 33.5], 'other event'); /* c[0][1] */ + t.deepEqual( + currentPoint.otherEvent.point, + [140.5, 33.5], + 'other event' + ); /* c[0][1] */ t.notOk(currentPoint.otherEvent.left, 'other event is right'); t.end(); }); - main.test('point 4', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [140.5, 33.5]); /* c[0][0] */ t.notOk(currentPoint.left, 'is right'); - t.deepEqual(currentPoint.otherEvent.point, [54.5, -170.5], 'other event'); /* c[0][1] */ + t.deepEqual( + currentPoint.otherEvent.point, + [54.5, -170.5], + 'other event' + ); /* c[0][1] */ t.ok(currentPoint.otherEvent.left, 'other event is left'); t.end(); }); - main.test('point 5', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [140.5, 33.5]); /* c[0][0] */ t.ok(currentPoint.left, 'is left'); - t.deepEqual(currentPoint.otherEvent.point, [239.5, -198], 'other event'); /* c[0][1] */ + t.deepEqual( + currentPoint.otherEvent.point, + [239.5, -198], + 'other event' + ); /* c[0][1] */ t.notOk(currentPoint.otherEvent.left, 'other event is right'); t.end(); }); - main.test('point 6', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [170, 74]); /* s[0][1] */ t.notOk(currentPoint.left, 'is right'); - t.deepEqual(currentPoint.otherEvent.point, [20, -23.5], 'other event'); /* s[0][0] */ + t.deepEqual( + currentPoint.otherEvent.point, + [20, -23.5], + 'other event' + ); /* s[0][0] */ t.ok(currentPoint.otherEvent.left, 'other event is left'); t.end(); }); - main.test('point 7', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [170, 74]); /* s[0][1] */ t.ok(currentPoint.left, 'is left'); - t.deepEqual(currentPoint.otherEvent.point, [226.5, -113.5], 'other event'); /* s[0][3] */ + t.deepEqual( + currentPoint.otherEvent.point, + [226.5, -113.5], + 'other event' + ); /* s[0][3] */ t.notOk(currentPoint.otherEvent.left, 'other event is right'); t.end(); }); - main.test('point 8', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [226.5, -113.5]); /* s[0][1] */ t.notOk(currentPoint.left, 'is right'); - t.deepEqual(currentPoint.otherEvent.point, [20, -23.5], 'other event'); /* s[0][0] */ + t.deepEqual( + currentPoint.otherEvent.point, + [20, -23.5], + 'other event' + ); /* s[0][0] */ t.ok(currentPoint.otherEvent.left, 'other event is left'); t.end(); }); - main.test('point 9', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [226.5, -113.5]); /* s[0][1] */ t.notOk(currentPoint.left, 'is right'); - t.deepEqual(currentPoint.otherEvent.point, [170, 74], 'other event'); /* s[0][0] */ + t.deepEqual( + currentPoint.otherEvent.point, + [170, 74], + 'other event' + ); /* s[0][0] */ t.ok(currentPoint.otherEvent.left, 'other event is left'); t.end(); }); - main.test('point 10', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [239.5, -198]); /* c[0][2] */ t.notOk(currentPoint.left, 'is right'); - t.deepEqual(currentPoint.otherEvent.point, [54.5, -170.5], 'other event'); /* c[0][0] */ + t.deepEqual( + currentPoint.otherEvent.point, + [54.5, -170.5], + 'other event' + ); /* c[0][0] */ t.ok(currentPoint.otherEvent.left, 'other event is left'); t.end(); }); - main.test('point 11', (t) => { currentPoint = q.pop(); t.deepEqual(currentPoint.point, [239.5, -198]); /* c[0][2] */ t.notOk(currentPoint.left, 'is right'); - t.deepEqual(currentPoint.otherEvent.point, [140.5, 33.5], 'other event'); /* s[0][1] */ + t.deepEqual( + currentPoint.otherEvent.point, + [140.5, 33.5], + 'other event' + ); /* s[0][1] */ t.ok(currentPoint.otherEvent.left, 'other event is left'); t.end(); @@ -158,4 +196,3 @@ tap.test('fill event queue', (main) => { main.end(); }); - diff --git a/test/segment_intersection.test.js b/test/segment_intersection.test.js index 8b3a56f..0ed9697 100644 --- a/test/segment_intersection.test.js +++ b/test/segment_intersection.test.js @@ -1,41 +1,151 @@ -import tap from 'tape'; -import intersection from '../src/segment_intersection'; +import tap from 'tape'; +import intersection from '../dist/segment_intersection'; tap.test('intersection', (t) => { + t.deepEqual( + intersection([0, 0], [1, 1], [1, 0], [2, 2]), + null, + 'null if no intersections' + ); + t.deepEqual( + intersection([0, 0], [1, 1], [1, 0], [10, 2]), + null, + 'null if no intersections' + ); + t.deepEqual( + intersection([2, 2], [3, 3], [0, 6], [2, 4]), + null, + 'null if no intersections' + ); - t.deepEqual(intersection([0, 0], [1, 1], [1, 0], [2, 2]), null, 'null if no intersections'); - t.deepEqual(intersection([0, 0], [1, 1], [1, 0], [10, 2]), null, 'null if no intersections'); - t.deepEqual(intersection([2, 2], [3, 3], [0, 6], [2, 4]), null, 'null if no intersections'); + t.deepEqual( + intersection([0, 0], [1, 1], [1, 0], [0, 1]), + [[0.5, 0.5]], + '1 intersection' + ); + t.deepEqual( + intersection([0, 0], [1, 1], [0, 1], [0, 0]), + [[0, 0]], + 'shared point 1' + ); + t.deepEqual( + intersection([0, 0], [1, 1], [0, 1], [1, 1]), + [[1, 1]], + 'shared point 2' + ); - t.deepEqual(intersection([0, 0], [1, 1], [1, 0], [0, 1]), [[0.5, 0.5]], '1 intersection'); - t.deepEqual(intersection([0, 0], [1, 1], [0, 1], [0, 0]), [[0, 0]], 'shared point 1'); - t.deepEqual(intersection([0, 0], [1, 1], [0, 1], [1, 1]), [[1, 1]], 'shared point 2'); + t.deepEqual( + intersection([0, 0], [1, 1], [0.5, 0.5], [1, 0]), + [[0.5, 0.5]], + 'T-crossing' + ); - t.deepEqual(intersection([0, 0], [1, 1], [0.5, 0.5], [1, 0]), [[0.5, 0.5]], 'T-crossing'); + t.deepEqual( + intersection([0, 0], [10, 10], [1, 1], [5, 5]), + [ + [1, 1], + [5, 5] + ], + 'full overlap' + ); + t.deepEqual( + intersection([1, 1], [10, 10], [1, 1], [5, 5]), + [ + [1, 1], + [5, 5] + ], + 'shared point + overlap' + ); + t.deepEqual( + intersection([3, 3], [10, 10], [0, 0], [5, 5]), + [ + [3, 3], + [5, 5] + ], + 'mutual overlap' + ); + t.deepEqual( + intersection([0, 0], [1, 1], [0, 0], [1, 1]), + [ + [0, 0], + [1, 1] + ], + 'full overlap' + ); + t.deepEqual( + intersection([1, 1], [0, 0], [0, 0], [1, 1]), + [ + [1, 1], + [0, 0] + ], + 'full overlap, orientation' + ); - t.deepEqual(intersection([0, 0], [10, 10], [1, 1], [5, 5]), [[1, 1], [5, 5]], 'full overlap'); - t.deepEqual(intersection([1, 1], [10, 10], [1, 1], [5, 5]), [[1, 1], [5, 5]], 'shared point + overlap'); - t.deepEqual(intersection([3, 3], [10, 10], [0, 0], [5, 5]), [[3, 3], [5, 5]], 'mutual overlap'); - t.deepEqual(intersection([0, 0], [1, 1], [0, 0], [1, 1]), [[0, 0], [1, 1]], 'full overlap'); - t.deepEqual(intersection([1, 1], [0, 0], [0, 0], [1, 1]), [[1, 1], [0, 0]], 'full overlap, orientation'); - - t.deepEqual(intersection([0, 0], [1, 1], [1, 1], [2, 2]), [[1, 1]], 'collinear, shared point'); - t.deepEqual(intersection([1, 1], [0, 0], [1, 1], [2, 2]), [[1, 1]], 'collinear, shared other point'); - t.deepEqual(intersection([0, 0], [1, 1], [2, 2], [4, 4]), null, 'collinear, no overlap'); + t.deepEqual( + intersection([0, 0], [1, 1], [1, 1], [2, 2]), + [[1, 1]], + 'collinear, shared point' + ); + t.deepEqual( + intersection([1, 1], [0, 0], [1, 1], [2, 2]), + [[1, 1]], + 'collinear, shared other point' + ); + t.deepEqual( + intersection([0, 0], [1, 1], [2, 2], [4, 4]), + null, + 'collinear, no overlap' + ); t.deepEqual(intersection([0, 0], [1, 1], [0, -1], [1, 0]), null, 'parallel'); - t.deepEqual(intersection([1, 1], [0, 0], [0, -1], [1, 0]), null, 'parallel, orientation'); - t.deepEqual(intersection([0, -1], [1, 0], [0, 0], [1, 1]), null, 'parallel, position'); + t.deepEqual( + intersection([1, 1], [0, 0], [0, -1], [1, 0]), + null, + 'parallel, orientation' + ); + t.deepEqual( + intersection([0, -1], [1, 0], [0, 0], [1, 1]), + null, + 'parallel, position' + ); - t.deepEqual(intersection([0, 0], [1, 1], [0, 1], [0, 0], true), null, 'shared point 1, skip touches'); - t.deepEqual(intersection([0, 0], [1, 1], [0, 1], [1, 1], true), null, 'shared point 2, skip touches'); + t.deepEqual( + intersection([0, 0], [1, 1], [0, 1], [0, 0], true), + null, + 'shared point 1, skip touches' + ); + t.deepEqual( + intersection([0, 0], [1, 1], [0, 1], [1, 1], true), + null, + 'shared point 2, skip touches' + ); - t.deepEqual(intersection([0, 0], [1, 1], [1, 1], [2, 2], true), null, 'collinear, shared point, skip touches'); - t.deepEqual(intersection([1, 1], [0, 0], [1, 1], [2, 2], true), null, 'collinear, shared other point, skip touches'); + t.deepEqual( + intersection([0, 0], [1, 1], [1, 1], [2, 2], true), + null, + 'collinear, shared point, skip touches' + ); + t.deepEqual( + intersection([1, 1], [0, 0], [1, 1], [2, 2], true), + null, + 'collinear, shared other point, skip touches' + ); - t.deepEqual(intersection([0, 0], [1, 1], [0, 0], [1, 1], true), null, 'full overlap, skip touches'); - t.deepEqual(intersection([1, 1], [0, 0], [0, 0], [1, 1], true), null, 'full overlap, orientation, skip touches'); + t.deepEqual( + intersection([0, 0], [1, 1], [0, 0], [1, 1], true), + null, + 'full overlap, skip touches' + ); + t.deepEqual( + intersection([1, 1], [0, 0], [0, 0], [1, 1], true), + null, + 'full overlap, orientation, skip touches' + ); - t.deepEqual(intersection([0, 0], [1, 1], [1, 0], [0, 1], true), [[0.5, 0.5]], '1 intersection, skip touches'); + t.deepEqual( + intersection([0, 0], [1, 1], [1, 0], [0, 1], true), + [[0.5, 0.5]], + '1 intersection, skip touches' + ); t.end(); }); diff --git a/test/signed_area.test.js b/test/signed_area.test.js index 548865a..11ca45d 100644 --- a/test/signed_area.test.js +++ b/test/signed_area.test.js @@ -1,11 +1,10 @@ -import tap from 'tape'; +import tap from 'tape'; import signedArea from '../src/signed_area'; -tap.test('analytical signed area', (t) => { - +tap('analytical signed area', (t) => { t.equals(signedArea([0, 0], [0, 1], [1, 1]), -1, 'negative area'); - t.equals(signedArea([0, 1], [0, 0], [1, 0]), 1, 'positive area'); - t.equals(signedArea([0, 0], [1, 1], [2, 2]), 0, 'collinear, 0 area'); + t.equals(signedArea([0, 1], [0, 0], [1, 0]), 1, 'positive area'); + t.equals(signedArea([0, 0], [1, 1], [2, 2]), 0, 'collinear, 0 area'); t.equals(signedArea([-1, 0], [2, 3], [0, 1]), 0, 'point on segment'); t.equals(signedArea([2, 3], [-1, 0], [0, 1]), 0, 'point on segment'); diff --git a/test/sweep_event.test.js b/test/sweep_event.test.js index da738fa..b68a521 100644 --- a/test/sweep_event.test.js +++ b/test/sweep_event.test.js @@ -1,8 +1,7 @@ -import tap from 'tape'; -import SweepEvent from '../src/sweep_event'; +import tap from 'tape'; +import SweepEvent from '../dist/sweep_event'; tap.test('sweep event', (main) => { - main.test('isBelow', (t) => { const s1 = new SweepEvent([0, 0], true, new SweepEvent([1, 1], false)); const s2 = new SweepEvent([0, 1], false, new SweepEvent([0, 0], false)); @@ -20,9 +19,7 @@ tap.test('sweep event', (main) => { t.end(); }); - main.test('isAbove', (t) => { - const s1 = new SweepEvent([0, 0], true, new SweepEvent([1, 1], false)); const s2 = new SweepEvent([0, 1], false, new SweepEvent([0, 0], false)); @@ -39,14 +36,20 @@ tap.test('sweep event', (main) => { t.end(); }); - main.test('isVertical', (t) => { - t.ok(new SweepEvent([0, 0], true, new SweepEvent([0, 1], false)).isVertical()); - t.notOk(new SweepEvent([0, 0], true, new SweepEvent([0.0001, 1], false)).isVertical()); + t.ok( + new SweepEvent([0, 0], true, new SweepEvent([0, 1], false)).isVertical() + ); + t.notOk( + new SweepEvent( + [0, 0], + true, + new SweepEvent([0.0001, 1], false) + ).isVertical() + ); t.end(); }); - main.end(); }); diff --git a/test/sweep_line.test.js b/test/sweep_line.test.js index dab5f94..c9faa4e 100644 --- a/test/sweep_line.test.js +++ b/test/sweep_line.test.js @@ -1,31 +1,41 @@ -import tap from 'tape'; -import path from 'path'; -import Tree from 'splaytree'; -import load from 'load-json-file'; -import compareSegments from '../src/compare_segments'; -import SweepEvent from '../src/sweep_event'; +import tap from 'tape'; +import path from 'path'; +import Tree from 'splaytree'; +import load from 'load-json-file'; +import compareSegments from '../dist/compare_segments'; +import SweepEvent from '../dist/sweep_event'; // GeoJSON Data -const data = load.sync(path.join(__dirname, 'fixtures', 'two_triangles.geojson')); +const data = load.sync( + path.join(__dirname, 'fixtures', 'two_triangles.geojson') +); -const subject = data.features[0]; +const subject = data.features[0]; const clipping = data.features[1]; tap.test('sweep line', (t) => { - const s = subject.geometry.coordinates; const c = clipping.geometry.coordinates; - const EF = new SweepEvent(s[0][0], true, new SweepEvent(s[0][2], false), true); + const EF = new SweepEvent( + s[0][0], + true, + new SweepEvent(s[0][2], false), + true + ); EF.name = 'EF'; - const EG = new SweepEvent(s[0][0], true, new SweepEvent(s[0][1], false), true); + const EG = new SweepEvent( + s[0][0], + true, + new SweepEvent(s[0][1], false), + true + ); EG.name = 'EG'; const tree = new Tree(compareSegments); tree.insert(EF); tree.insert(EG); - t.equals(tree.find(EF).key, EF, 'able to retrieve node'); t.equals(tree.minNode().key, EF, 'EF is at the begin'); t.equals(tree.maxNode().key, EG, 'EG is at the end'); @@ -38,8 +48,18 @@ tap.test('sweep line', (t) => { t.equals(tree.prev(it).key, EF); - const DA = new SweepEvent(c[0][0], true, new SweepEvent(c[0][2], false), true); - const DC = new SweepEvent(c[0][0], true, new SweepEvent(c[0][1], false), true); + const DA = new SweepEvent( + c[0][0], + true, + new SweepEvent(c[0][2], false), + true + ); + const DC = new SweepEvent( + c[0][0], + true, + new SweepEvent(c[0][1], false), + true + ); tree.insert(DA); tree.insert(DC); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7541745 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "es2016", + "moduleResolution": "node", + "allowJs": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + + "declaration": true, + "declarationDir": "dist/types", + "strict": true, + "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + "strictNullChecks": true /* Enable strict null checks. */, + "strictFunctionTypes": true /* Enable strict checking of function types. */, + "noUnusedLocals": false /* Report errors on unused locals. */, + "noUnusedParameters": true /* Report errors on unused parameters. */, + "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, + "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, + "importHelpers": true, + "skipLibCheck": true, + + "outDir": "./dist/", + "types": ["node"], + "lib": ["ES6", "DOM"] + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/web/data b/web/data new file mode 120000 index 0000000..6201ead --- /dev/null +++ b/web/data @@ -0,0 +1 @@ +../test/fixtures \ No newline at end of file diff --git a/web/index-bundle.js b/web/index-bundle.js new file mode 100644 index 0000000..90b6e2d --- /dev/null +++ b/web/index-bundle.js @@ -0,0 +1,2189 @@ +(function (L, jsts) { + 'use strict'; + + L = L && L.hasOwnProperty('default') ? L['default'] : L; + jsts = jsts && jsts.hasOwnProperty('default') ? jsts['default'] : jsts; + + const CoordinatesControl = L.Control.extend({ + options: { + position: 'bottomright' + }, + + onAdd: function (map) { + this._container = L.DomUtil.create('div', 'leaflet-bar'); + this._container.style.background = '#ffffff'; + map.on('mousemove', this._onMouseMove, this); + return this._container; + }, + + _onMouseMove: function (e) { + this._container.innerHTML = + '' + + e.latlng.lng.toFixed(3) + + ', ' + + e.latlng.lat.toFixed(3) + + ''; + } + }); + + const EditControl = L.Control.extend({ + options: { + position: 'topleft', + callback: null, + kind: '', + html: '' + }, + onAdd: function (map) { + const container = L.DomUtil.create('div', 'leaflet-control leaflet-bar'); + const link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = 'Create a new ' + this.options.kind; + link.innerHTML = this.options.html; + L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', function () { + // @ts-ignore + globalThis.LAYER = this.options.callback.call(map.editTools); + }, this); + return container; + } + }); + const NewPolygonControl = EditControl.extend({ + options: { + position: 'topleft', + kind: 'polygon', + html: '▰', + callback: () => undefined + } + }); + + const BooleanControl = L.Control.extend({ + options: { + position: 'topright', + callback: () => undefined + }, + + onAdd: function () { + var container = (this._container = L.DomUtil.create('div', 'leaflet-bar')); + this._container.style.background = '#ffffff'; + this._container.style.padding = '10px'; + container.innerHTML = ` +
+
    +
  • +
  • +
  • +
  • +
  • +
+ + +
`; + var form = container.querySelector('form'); + L.DomEvent.on( + form, + 'submit', + function (evt) { + L.DomEvent.stop(evt); + var radios = Array.prototype.slice.call( + form.querySelectorAll('input[type=radio]') + ); + for (var i = 0, len = radios.length; i < len; i++) { + if (radios[i].checked) { + this.options.callback(parseInt(radios[i].value)); + break; + } + } + }, + this + ).on( + form.clear, + 'click', + function (evt) { + L.DomEvent.stop(evt); + this.options.clear(); + }, + this + ); + + L.DomEvent.disableClickPropagation( + this._container + ).disableScrollPropagation(this._container); + return this._container; + } + }); + + function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; } + + class SplayTree { + + constructor(compare = DEFAULT_COMPARE, noDuplicates = false) { + this._compare = compare; + this._root = null; + this._size = 0; + this._noDuplicates = !!noDuplicates; + } + + + rotateLeft(x) { + var y = x.right; + if (y) { + x.right = y.left; + if (y.left) y.left.parent = x; + y.parent = x.parent; + } + + if (!x.parent) this._root = y; + else if (x === x.parent.left) x.parent.left = y; + else x.parent.right = y; + if (y) y.left = x; + x.parent = y; + } + + + rotateRight(x) { + var y = x.left; + if (y) { + x.left = y.right; + if (y.right) y.right.parent = x; + y.parent = x.parent; + } + + if (!x.parent) this._root = y; + else if(x === x.parent.left) x.parent.left = y; + else x.parent.right = y; + if (y) y.right = x; + x.parent = y; + } + + + _splay(x) { + while (x.parent) { + var p = x.parent; + if (!p.parent) { + if (p.left === x) this.rotateRight(p); + else this.rotateLeft(p); + } else if (p.left === x && p.parent.left === p) { + this.rotateRight(p.parent); + this.rotateRight(p); + } else if (p.right === x && p.parent.right === p) { + this.rotateLeft(p.parent); + this.rotateLeft(p); + } else if (p.left === x && p.parent.right === p) { + this.rotateRight(p); + this.rotateLeft(p); + } else { + this.rotateLeft(p); + this.rotateRight(p); + } + } + } + + + splay(x) { + var p, gp, ggp, l, r; + + while (x.parent) { + p = x.parent; + gp = p.parent; + + if (gp && gp.parent) { + ggp = gp.parent; + if (ggp.left === gp) ggp.left = x; + else ggp.right = x; + x.parent = ggp; + } else { + x.parent = null; + this._root = x; + } + + l = x.left; r = x.right; + + if (x === p.left) { // left + if (gp) { + if (gp.left === p) { + /* zig-zig */ + if (p.right) { + gp.left = p.right; + gp.left.parent = gp; + } else gp.left = null; + + p.right = gp; + gp.parent = p; + } else { + /* zig-zag */ + if (l) { + gp.right = l; + l.parent = gp; + } else gp.right = null; + + x.left = gp; + gp.parent = x; + } + } + if (r) { + p.left = r; + r.parent = p; + } else p.left = null; + + x.right = p; + p.parent = x; + } else { // right + if (gp) { + if (gp.right === p) { + /* zig-zig */ + if (p.left) { + gp.right = p.left; + gp.right.parent = gp; + } else gp.right = null; + + p.left = gp; + gp.parent = p; + } else { + /* zig-zag */ + if (r) { + gp.left = r; + r.parent = gp; + } else gp.left = null; + + x.right = gp; + gp.parent = x; + } + } + if (l) { + p.right = l; + l.parent = p; + } else p.right = null; + + x.left = p; + p.parent = x; + } + } + } + + + replace(u, v) { + if (!u.parent) this._root = v; + else if (u === u.parent.left) u.parent.left = v; + else u.parent.right = v; + if (v) v.parent = u.parent; + } + + + minNode(u = this._root) { + if (u) while (u.left) u = u.left; + return u; + } + + + maxNode(u = this._root) { + if (u) while (u.right) u = u.right; + return u; + } + + + insert(key, data) { + var z = this._root; + var p = null; + var comp = this._compare; + var cmp; + + if (this._noDuplicates) { + while (z) { + p = z; + cmp = comp(z.key, key); + if (cmp === 0) return; + else if (comp(z.key, key) < 0) z = z.right; + else z = z.left; + } + } else { + while (z) { + p = z; + if (comp(z.key, key) < 0) z = z.right; + else z = z.left; + } + } + + z = { key, data, left: null, right: null, parent: p }; + + if (!p) this._root = z; + else if (comp(p.key, z.key) < 0) p.right = z; + else p.left = z; + + this.splay(z); + this._size++; + return z; + } + + + find (key) { + var z = this._root; + var comp = this._compare; + while (z) { + var cmp = comp(z.key, key); + if (cmp < 0) z = z.right; + else if (cmp > 0) z = z.left; + else return z; + } + return null; + } + + /** + * Whether the tree contains a node with the given key + * @param {Key} key + * @return {boolean} true/false + */ + contains (key) { + var node = this._root; + var comparator = this._compare; + while (node) { + var cmp = comparator(key, node.key); + if (cmp === 0) return true; + else if (cmp < 0) node = node.left; + else node = node.right; + } + + return false; + } + + + remove (key) { + var z = this.find(key); + + if (!z) return false; + + this.splay(z); + + if (!z.left) this.replace(z, z.right); + else if (!z.right) this.replace(z, z.left); + else { + var y = this.minNode(z.right); + if (y.parent !== z) { + this.replace(y, y.right); + y.right = z.right; + y.right.parent = y; + } + this.replace(z, y); + y.left = z.left; + y.left.parent = y; + } + + this._size--; + return true; + } + + + removeNode(z) { + if (!z) return false; + + this.splay(z); + + if (!z.left) this.replace(z, z.right); + else if (!z.right) this.replace(z, z.left); + else { + var y = this.minNode(z.right); + if (y.parent !== z) { + this.replace(y, y.right); + y.right = z.right; + y.right.parent = y; + } + this.replace(z, y); + y.left = z.left; + y.left.parent = y; + } + + this._size--; + return true; + } + + + erase (key) { + var z = this.find(key); + if (!z) return; + + this.splay(z); + + var s = z.left; + var t = z.right; + + var sMax = null; + if (s) { + s.parent = null; + sMax = this.maxNode(s); + this.splay(sMax); + this._root = sMax; + } + if (t) { + if (s) sMax.right = t; + else this._root = t; + t.parent = sMax; + } + + this._size--; + } + + /** + * Removes and returns the node with smallest key + * @return {?Node} + */ + pop () { + var node = this._root, returnValue = null; + if (node) { + while (node.left) node = node.left; + returnValue = { key: node.key, data: node.data }; + this.remove(node.key); + } + return returnValue; + } + + + /* eslint-disable class-methods-use-this */ + + /** + * Successor node + * @param {Node} node + * @return {?Node} + */ + next (node) { + var successor = node; + if (successor) { + if (successor.right) { + successor = successor.right; + while (successor && successor.left) successor = successor.left; + } else { + successor = node.parent; + while (successor && successor.right === node) { + node = successor; successor = successor.parent; + } + } + } + return successor; + } + + + /** + * Predecessor node + * @param {Node} node + * @return {?Node} + */ + prev (node) { + var predecessor = node; + if (predecessor) { + if (predecessor.left) { + predecessor = predecessor.left; + while (predecessor && predecessor.right) predecessor = predecessor.right; + } else { + predecessor = node.parent; + while (predecessor && predecessor.left === node) { + node = predecessor; + predecessor = predecessor.parent; + } + } + } + return predecessor; + } + /* eslint-enable class-methods-use-this */ + + + /** + * @param {forEachCallback} callback + * @return {SplayTree} + */ + forEach(callback) { + var current = this._root; + var s = [], done = false, i = 0; + + while (!done) { + // Reach the left most Node of the current Node + if (current) { + // Place pointer to a tree node on the stack + // before traversing the node's left subtree + s.push(current); + current = current.left; + } else { + // BackTrack from the empty subtree and visit the Node + // at the top of the stack; however, if the stack is + // empty you are done + if (s.length > 0) { + current = s.pop(); + callback(current, i++); + + // We have visited the node and its left + // subtree. Now, it's right subtree's turn + current = current.right; + } else done = true; + } + } + return this; + } + + + /** + * Walk key range from `low` to `high`. Stops if `fn` returns a value. + * @param {Key} low + * @param {Key} high + * @param {Function} fn + * @param {*?} ctx + * @return {SplayTree} + */ + range(low, high, fn, ctx) { + const Q = []; + const compare = this._compare; + let node = this._root, cmp; + + while (Q.length !== 0 || node) { + if (node) { + Q.push(node); + node = node.left; + } else { + node = Q.pop(); + cmp = compare(node.key, high); + if (cmp > 0) { + break; + } else if (compare(node.key, low) >= 0) { + if (fn.call(ctx, node)) return this; // stop if smth is returned + } + node = node.right; + } + } + return this; + } + + /** + * Returns all keys in order + * @return {Array} + */ + keys () { + var current = this._root; + var s = [], r = [], done = false; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + r.push(current.key); + current = current.right; + } else done = true; + } + } + return r; + } + + + /** + * Returns `data` fields of all nodes in order. + * @return {Array} + */ + values () { + var current = this._root; + var s = [], r = [], done = false; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + r.push(current.data); + current = current.right; + } else done = true; + } + } + return r; + } + + + /** + * Returns node at given index + * @param {number} index + * @return {?Node} + */ + at (index) { + // removed after a consideration, more misleading than useful + // index = index % this.size; + // if (index < 0) index = this.size - index; + + var current = this._root; + var s = [], done = false, i = 0; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + if (i === index) return current; + i++; + current = current.right; + } else done = true; + } + } + return null; + } + + /** + * Bulk-load items. Both array have to be same size + * @param {Array} keys + * @param {Array} [values] + * @param {Boolean} [presort=false] Pre-sort keys and values, using + * tree's comparator. Sorting is done + * in-place + * @return {AVLTree} + */ + load(keys = [], values = [], presort = false) { + if (this._size !== 0) throw new Error('bulk-load: tree is not empty'); + const size = keys.length; + if (presort) sort(keys, values, 0, size - 1, this._compare); + this._root = loadRecursive(null, keys, values, 0, size); + this._size = size; + return this; + } + + + min() { + var node = this.minNode(this._root); + if (node) return node.key; + else return null; + } + + + max() { + var node = this.maxNode(this._root); + if (node) return node.key; + else return null; + } + + isEmpty() { return this._root === null; } + get size() { return this._size; } + + + /** + * Create a tree and load it with items + * @param {Array} keys + * @param {Array?} [values] + + * @param {Function?} [comparator] + * @param {Boolean?} [presort=false] Pre-sort keys and values, using + * tree's comparator. Sorting is done + * in-place + * @param {Boolean?} [noDuplicates=false] Allow duplicates + * @return {SplayTree} + */ + static createTree(keys, values, comparator, presort, noDuplicates) { + return new SplayTree(comparator, noDuplicates).load(keys, values, presort); + } + } + + + function loadRecursive (parent, keys, values, start, end) { + const size = end - start; + if (size > 0) { + const middle = start + Math.floor(size / 2); + const key = keys[middle]; + const data = values[middle]; + const node = { key, data, parent }; + node.left = loadRecursive(node, keys, values, start, middle); + node.right = loadRecursive(node, keys, values, middle + 1, end); + return node; + } + return null; + } + + + function sort(keys, values, left, right, compare) { + if (left >= right) return; + + const pivot = keys[(left + right) >> 1]; + let i = left - 1; + let j = right + 1; + + while (true) { + do i++; while (compare(keys[i], pivot) < 0); + do j--; while (compare(keys[j], pivot) > 0); + if (i >= j) break; + + let tmp = keys[i]; + keys[i] = keys[j]; + keys[j] = tmp; + + tmp = values[i]; + values[i] = values[j]; + values[j] = tmp; + } + + sort(keys, values, left, j, compare); + sort(keys, values, j + 1, right, compare); + } + + const NORMAL = 0; + const NON_CONTRIBUTING = 1; + const SAME_TRANSITION = 2; + const DIFFERENT_TRANSITION = 3; + + const INTERSECTION = 0; + const UNION = 1; + const DIFFERENCE = 2; + const XOR = 3; + + function computeFields(event, prev, operation) { + // compute inOut and otherInOut fields + if (prev === null) { + event.inOut = false; + event.otherInOut = true; + // previous line segment in sweepline belongs to the same polygon + } + else { + if (event.isSubject === prev.isSubject) { + event.inOut = !prev.inOut; + event.otherInOut = prev.otherInOut; + // previous line segment in sweepline belongs to the clipping polygon + } + else { + event.inOut = !prev.otherInOut; + event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; + } + // compute prevInResult field + if (prev) { + event.prevInResult = + !inResult(prev, operation) || prev.isVertical() + ? prev.prevInResult + : prev; + } + } + // check if the line segment belongs to the Boolean operation + let isInResult = inResult(event, operation); + if (isInResult) { + event.resultTransition = determineResultTransition(event, operation); + } + else { + event.resultTransition = 0; + } + } + function inResult(event, operation) { + switch (event.type) { + case NORMAL: + switch (operation) { + case INTERSECTION: + return !event.otherInOut; + case UNION: + return event.otherInOut; + case DIFFERENCE: + // return (event.isSubject && !event.otherInOut) || + // (!event.isSubject && event.otherInOut); + return ((event.isSubject && event.otherInOut) || + (!event.isSubject && !event.otherInOut)); + case XOR: + return true; + } + break; + case SAME_TRANSITION: + return operation === INTERSECTION || operation === UNION; + case DIFFERENT_TRANSITION: + return operation === DIFFERENCE; + case NON_CONTRIBUTING: + return false; + } + return false; + } + /* eslint-enable indent */ + function determineResultTransition(event, operation) { + let thisIn = !event.inOut; + let thatIn = !event.otherInOut; + let isIn; + switch (operation) { + case INTERSECTION: + isIn = thisIn && thatIn; + break; + case UNION: + isIn = thisIn || thatIn; + break; + case XOR: + isIn = thisIn !== thatIn; + break; + case DIFFERENCE: + if (event.isSubject) + isIn = thisIn && !thatIn; + else + isIn = thatIn && !thisIn; + break; + } + return isIn ? +1 : -1; + } + + class SweepEvent { + /** + * Sweepline event + * + * @class {SweepEvent} + * @param {Array.} point + * @param {Boolean} left + * @param {SweepEvent=} otherEvent + * @param {Boolean} isSubject + * @param {Number} edgeType + */ + constructor(point, left, otherEvent, isSubject) { + // transition flags + // In-out transition for the sweepline crossing polygon + this.inOut = false; + this.otherInOut = false; + this.prevInResult = null; + // Does event belong to result? + //public inResult: boolean = false; + // connection step + this.resultInOut = false; + this.isExteriorRing = true; + this.contourId = -1; + this.resultTransition = 0; + this.outputContourId = 0; + this.otherPos = 0; + this.left = left; + this.point = point; + this.otherEvent = otherEvent; + this.isSubject = isSubject; + this.type = NORMAL; + this.inOut = false; + this.otherInOut = false; + /** + * Previous event in result? + * @type {SweepEvent} + */ + this.prevInResult = null; + /** + * Type of result transition (0 = not in result, +1 = out-in, -1, in-out) + * @type {Number} + */ + this.resultTransition = 0; + // connection step + /** + * @type {Number} + */ + this.otherPos = -1; + /** + * @type {Number} + */ + this.outputContourId = -1; + this.isExteriorRing = true; // TODO: Looks unused, remove? + } + isBelow(p) { + return isBelow(this, p); + } + isAbove(p) { + return !isBelow(this, p); + } + /** + * @return {Boolean} + */ + isVertical() { + return this.point[0] === this.otherEvent.point[0]; + } + /** + * Does event belong to result? + * TODO: make it static + * @return {Boolean} + */ + get inResult() { + return this.resultTransition !== 0; + } + clone() { + const copy = new SweepEvent(this.point, this.left, this.otherEvent, this.isSubject); + copy.type = this.type; + copy.resultTransition = this.resultTransition; + //copy.inResult = this.inResult; + copy.prevInResult = this.prevInResult; + copy.isExteriorRing = this.isExteriorRing; + copy.inOut = this.inOut; + copy.otherInOut = this.otherInOut; + return copy; + } + } + function isBelow(e, p) { + const p0 = e.point, p1 = e.otherEvent.point; + return e.left + ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 + : // signedArea(this.point, this.otherEvent.point, p) > 0 : + (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; + //signedArea(this.otherEvent.point, this.point, p) > 0; + } + + function equals(p1, p2) { + if (p1[0] === p2[0]) { + if (p1[1] === p2[1]) + return true; + return false; + } + return false; + } + // const EPSILON = 1e-9; + // const abs = Math.abs; + // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164 + // Precision problem. + // + // module.exports = function equals(p1, p2) { + // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON; + // }; + + const epsilon = 1.1102230246251565e-16; + const splitter = 134217729; + const resulterrbound = (3 + 8 * epsilon) * epsilon; + + // fast_expansion_sum_zeroelim routine from oritinal code + function sum(elen, e, flen, f, h) { + let Q, Qnew, hh, bvirt; + let enow = e[0]; + let fnow = f[0]; + let eindex = 0; + let findex = 0; + if ((fnow > enow) === (fnow > -enow)) { + Q = enow; + enow = e[++eindex]; + } else { + Q = fnow; + fnow = f[++findex]; + } + let hindex = 0; + if (eindex < elen && findex < flen) { + if ((fnow > enow) === (fnow > -enow)) { + Qnew = enow + Q; + hh = Q - (Qnew - enow); + enow = e[++eindex]; + } else { + Qnew = fnow + Q; + hh = Q - (Qnew - fnow); + fnow = f[++findex]; + } + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + while (eindex < elen && findex < flen) { + if ((fnow > enow) === (fnow > -enow)) { + Qnew = Q + enow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (enow - bvirt); + enow = e[++eindex]; + } else { + Qnew = Q + fnow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (fnow - bvirt); + fnow = f[++findex]; + } + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + } + while (eindex < elen) { + Qnew = Q + enow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (enow - bvirt); + enow = e[++eindex]; + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + while (findex < flen) { + Qnew = Q + fnow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (fnow - bvirt); + fnow = f[++findex]; + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + if (Q !== 0 || hindex === 0) { + h[hindex++] = Q; + } + return hindex; + } + + function estimate(elen, e) { + let Q = e[0]; + for (let i = 1; i < elen; i++) Q += e[i]; + return Q; + } + + function vec(n) { + return new Float64Array(n); + } + + const ccwerrboundA = (3 + 16 * epsilon) * epsilon; + const ccwerrboundB = (2 + 12 * epsilon) * epsilon; + const ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon; + + const B = vec(4); + const C1 = vec(8); + const C2 = vec(12); + const D = vec(16); + const u = vec(4); + + function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) { + let acxtail, acytail, bcxtail, bcytail; + let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3; + + const acx = ax - cx; + const bcx = bx - cx; + const acy = ay - cy; + const bcy = by - cy; + + s1 = acx * bcy; + c = splitter * acx; + ahi = c - (c - acx); + alo = acx - ahi; + c = splitter * bcy; + bhi = c - (c - bcy); + blo = bcy - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acy * bcx; + c = splitter * acy; + ahi = c - (c - acy); + alo = acy - ahi; + c = splitter * bcx; + bhi = c - (c - bcx); + blo = bcx - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + B[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + B[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + B[2] = _j - (u3 - bvirt) + (_i - bvirt); + B[3] = u3; + + let det = estimate(4, B); + let errbound = ccwerrboundB * detsum; + if (det >= errbound || -det >= errbound) { + return det; + } + + bvirt = ax - acx; + acxtail = ax - (acx + bvirt) + (bvirt - cx); + bvirt = bx - bcx; + bcxtail = bx - (bcx + bvirt) + (bvirt - cx); + bvirt = ay - acy; + acytail = ay - (acy + bvirt) + (bvirt - cy); + bvirt = by - bcy; + bcytail = by - (bcy + bvirt) + (bvirt - cy); + + if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) { + return det; + } + + errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det); + det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail); + if (det >= errbound || -det >= errbound) return det; + + s1 = acxtail * bcy; + c = splitter * acxtail; + ahi = c - (c - acxtail); + alo = acxtail - ahi; + c = splitter * bcy; + bhi = c - (c - bcy); + blo = bcy - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acytail * bcx; + c = splitter * acytail; + ahi = c - (c - acytail); + alo = acytail - ahi; + c = splitter * bcx; + bhi = c - (c - bcx); + blo = bcx - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + const C1len = sum(4, B, 4, u, C1); + + s1 = acx * bcytail; + c = splitter * acx; + ahi = c - (c - acx); + alo = acx - ahi; + c = splitter * bcytail; + bhi = c - (c - bcytail); + blo = bcytail - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acy * bcxtail; + c = splitter * acy; + ahi = c - (c - acy); + alo = acy - ahi; + c = splitter * bcxtail; + bhi = c - (c - bcxtail); + blo = bcxtail - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + const C2len = sum(C1len, C1, 4, u, C2); + + s1 = acxtail * bcytail; + c = splitter * acxtail; + ahi = c - (c - acxtail); + alo = acxtail - ahi; + c = splitter * bcytail; + bhi = c - (c - bcytail); + blo = bcytail - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acytail * bcxtail; + c = splitter * acytail; + ahi = c - (c - acytail); + alo = acytail - ahi; + c = splitter * bcxtail; + bhi = c - (c - bcxtail); + blo = bcxtail - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + const Dlen = sum(C2len, C2, 4, u, D); + + return D[Dlen - 1]; + } + + function orient2d(ax, ay, bx, by, cx, cy) { + const detleft = (ay - cy) * (bx - cx); + const detright = (ax - cx) * (by - cy); + const det = detleft - detright; + + if (detleft === 0 || detright === 0 || (detleft > 0) !== (detright > 0)) return det; + + const detsum = Math.abs(detleft + detright); + if (Math.abs(det) >= ccwerrboundA * detsum) return det; + + return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum); + } + + /** + * Signed area of the triangle (p0, p1, p2) + * @param {Array.} p0 + * @param {Array.} p1 + * @param {Array.} p2 + * @return {Number} + */ + function signedArea(p0, p1, p2) { + const res = orient2d(p0[0], p0[1], p1[0], p1[1], p2[0], p2[1]); + if (res > 0) + return -1; + if (res < 0) + return 1; + return 0; + } + + /** + * @param {SweepEvent} e1 + * @param {SweepEvent} e2 + * @return {Number} + */ + function compareEvents(e1, e2) { + const p1 = e1.point; + const p2 = e2.point; + // Different x-coordinate + if (p1[0] > p2[0]) + return 1; + if (p1[0] < p2[0]) + return -1; + // Different points, but same x-coordinate + // Event with lower y-coordinate is processed first + if (p1[1] !== p2[1]) + return p1[1] > p2[1] ? 1 : -1; + return specialCases(e1, e2, p1 /*, p2 */); + } + /* eslint-disable no-unused-vars */ + function specialCases(e1, e2, p1 /*, p2: Point */) { + // Same coordinates, but one is a left endpoint and the other is + // a right endpoint. The right endpoint is processed first + if (e1.left !== e2.left) + return e1.left ? 1 : -1; + // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; + // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) + // Same coordinates, both events + // are left endpoints or right endpoints. + // not collinear + if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { + // the event associate to the bottom segment is processed first + return !isBelow(e1, e2.otherEvent.point) ? 1 : -1; + } + return !e1.isSubject && e2.isSubject ? 1 : -1; + } + /* eslint-enable no-unused-vars */ + + function divideSegment(se, p, queue) { + const r = new SweepEvent(p, false, se, se.isSubject); + const l = new SweepEvent(p, true, se.otherEvent, se.isSubject); + /* eslint-disable no-console */ + if (equals(se.point, se.otherEvent.point)) { + console.warn('what is that, a collapsed segment?', se); + } + /* eslint-enable no-console */ + r.contourId = l.contourId = se.contourId; + // avoid a rounding error. The left event would be processed after the right event + if (compareEvents(l, se.otherEvent) > 0) { + se.otherEvent.left = true; + l.left = false; + } + // avoid a rounding error. The left event would be processed after the right event + // if (compareEvents(se, r) > 0) {} + se.otherEvent.otherEvent = l; + se.otherEvent = r; + queue.push(l); + queue.push(r); + return queue; + } + + //const EPS = 1e-9; + /** + * Finds the magnitude of the cross product of two vectors (if we pretend + * they're in three dimensions) + */ + const crossProduct = (ax, ay, bx, by) => ax * by - ay * bx; + /** + * Finds the dot product of two vectors. + */ + const dotProduct = (ax, ay, bx, by) => ax * bx + ay * by; + const toPoint = (px, py, s, dx, dy) => [ + px + s * dx, + py + s * dy + ]; + /** + * Finds the intersection (if any) between two line segments a and b, given the + * line segments' end points a1, a2 and b1, b2. + * + * This algorithm is based on Schneider and Eberly. + * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf + * Page 244. + * + * @param {Array.} a1 point of first line + * @param {Array.} a2 point of first line + * @param {Array.} b1 point of second line + * @param {Array.} b2 point of second line + * @param {Boolean=} noEndpointTouch whether to skip single touchpoints + * (meaning connected segments) as + * intersections + * @returns {Array.>|Null} If the lines intersect, the point of + * intersection. If they overlap, the two end points of the overlapping segment. + * Otherwise, null. + */ + function intersection (a1, a2, b1, b2, noEndpointTouch) { + // The algorithm expects our lines in the form P + sd, where P is a point, + // s is on the interval [0, 1], and d is a vector. + // We are passed two points. P can be the first point of each pair. The + // vector, then, could be thought of as the distance (in x and y components) + // from the first point to the second point. + // So first, let's make our vectors: + const vax = a2[0] - a1[0]; + const vay = a2[1] - a1[1]; + const vbx = b2[0] - b1[0]; + const vby = b2[1] - b1[1]; + // We also define a function to convert back to regular point form: + // The rest is pretty much a straight port of the algorithm. + const ex = b1[0] - a1[0]; + const ey = b1[1] - a1[1]; + let kross = crossProduct(vax, vay, vbx, vby); + let sqrKross = kross * kross; + const sqrLenA = dotProduct(vax, vay, vax, vay); + //const sqrLenB = dotProduct(vb, vb); + // Check for line intersection. This works because of the properties of the + // cross product -- specifically, two vectors are parallel if and only if the + // cross product is the 0 vector. The full calculation involves relative error + // to account for possible very small line segments. See Schneider & Eberly + // for details. + if (sqrKross > 0 /* EPS * sqrLenB * sqLenA */) { + // If they're not parallel, then (because these are line segments) they + // still might not actually intersect. This code checks that the + // intersection point of the lines is actually on both line segments. + const s = crossProduct(ex, ey, vbx, vby) / kross; + if (s < 0 || s > 1) { + // not on line segment a + return null; + } + const t = crossProduct(ex, ey, vax, vay) / kross; + if (t < 0 || t > 1) { + // not on line segment b + return null; + } + if (s === 0 || s === 1) { + // on an endpoint of line segment a + return noEndpointTouch ? null : [toPoint(a1[0], a1[1], s, vax, vay)]; + } + if (t === 0 || t === 1) { + // on an endpoint of line segment b + return noEndpointTouch ? null : [toPoint(b1[0], b1[1], t, vbx, vby)]; + } + return [toPoint(a1[0], a1[1], s, vax, vay)]; + } + // If we've reached this point, then the lines are either parallel or the + // same, but the segments could overlap partially or fully, or not at all. + // So we need to find the overlap, if any. To do that, we can use e, which is + // the (vector) difference between the two initial points. If this is parallel + // with the line itself, then the two lines are the same line, and there will + // be overlap. + //const sqrLenE = dotProduct(e, e); + kross = crossProduct(ex, ey, vax, vay); + sqrKross = kross * kross; + if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { + // Lines are just parallel, not the same. No overlap. + return null; + } + const sa = dotProduct(vax, vay, ex, ey) / sqrLenA; + const sb = sa + dotProduct(vax, vay, vbx, vby) / sqrLenA; + const smin = Math.min(sa, sb); + const smax = Math.max(sa, sb); + // this is, essentially, the FindIntersection acting on floats from + // Schneider & Eberly, just inlined into this function. + if (smin <= 1 && smax >= 0) { + // overlap on an end point + if (smin === 1) { + return noEndpointTouch + ? null + : [toPoint(a1[0], a1[1], smin > 0 ? smin : 0, vax, vay)]; + } + if (smax === 0) { + return noEndpointTouch + ? null + : [toPoint(a1[0], a1[1], smax < 1 ? smax : 1, vax, vay)]; + } + if (noEndpointTouch && smin === 0 && smax === 1) + return null; + // There's overlap on a segment -- two points of intersection. Return both. + return [ + toPoint(a1[0], a1[1], smin > 0 ? smin : 0, vax, vay), + toPoint(a1[0], a1[1], smax < 1 ? smax : 1, vax, vay) + ]; + } + return null; + } + + /** + * @param {SweepEvent} se1 + * @param {SweepEvent} se2 + * @param {Queue} queue + * @return {Number} + */ + function possibleIntersection(se1, se2, queue) { + // that disallows self-intersecting polygons, + // did cost us half a day, so I'll leave it + // out of respect + // if (se1.isSubject === se2.isSubject) return; + const inter = intersection(se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point, false); + // simplify intersection result type + const nintersections = inter ? inter.length : 0; + if (nintersections === 0) + return 0; // no intersection + // the line segments intersect at an endpoint of both line segments + if (nintersections === 1 && + (equals(se1.point, se2.point) || + equals(se1.otherEvent.point, se2.otherEvent.point))) + return 0; + if (nintersections === 2 && se1.isSubject === se2.isSubject) { + // if(se1.contourId === se2.contourId){ + // console.warn('Edges of the same polygon overlap', + // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point); + // } + //throw new Error('Edges of the same polygon overlap'); + return 0; + } + // The line segments associated to se1 and se2 intersect + if (nintersections === 1) { + // @ts-ignore; + const i0 = inter[0]; + // if the intersection point is not an endpoint of se1 + if (!equals(se1.point, i0) && !equals(se1.otherEvent.point, i0)) { + divideSegment(se1, i0, queue); + } + // if the intersection point is not an endpoint of se2 + if (!equals(se2.point, i0) && !equals(se2.otherEvent.point, i0)) { + divideSegment(se2, i0, queue); + } + return 1; + } + // The line segments associated to se1 and se2 overlap + const events = []; + let leftCoincide = false; + let rightCoincide = false; + // linked + if (equals(se1.point, se2.point)) + leftCoincide = true; + else if (compareEvents(se1, se2) === 1) + events.push(se2, se1); + else + events.push(se1, se2); + if (equals(se1.otherEvent.point, se2.otherEvent.point)) + rightCoincide = true; + else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { + events.push(se2.otherEvent, se1.otherEvent); + } + else { + events.push(se1.otherEvent, se2.otherEvent); + } + if ((leftCoincide && rightCoincide) || leftCoincide) { + // both line segments are equal or share the left endpoint + se2.type = NON_CONTRIBUTING; + se1.type = se2.inOut === se1.inOut ? SAME_TRANSITION : DIFFERENT_TRANSITION; + if (leftCoincide && !rightCoincide) { + // honestly no idea, but changing events selection from [2, 1] + // to [0, 1] fixes the overlapping self-intersecting polygons issue + divideSegment(events[1].otherEvent, events[0].point, queue); + } + return 2; + } + // the line segments share the right endpoint + if (rightCoincide) { + divideSegment(events[0], events[1].point, queue); + return 3; + } + // no line segment includes totally the other one + if (events[0] !== events[3].otherEvent) { + divideSegment(events[0], events[1].point, queue); + divideSegment(events[1], events[2].point, queue); + return 3; + } + // one line segment includes the other one + divideSegment(events[0], events[1].point, queue); + divideSegment(events[3].otherEvent, events[2].point, queue); + return 3; + } + + /** + * @param {SweepEvent} le1 + * @param {SweepEvent} le2 + * @return {Number} + */ + function compareSegments(le1, le2) { + if (le1 === le2) + return 0; + // Segments are not collinear + if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || + signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { + // If they share their left endpoint use the right endpoint to sort + if (equals(le1.point, le2.point)) + return isBelow(le1, le2.otherEvent.point) ? -1 : 1; + // Different left endpoint: use the left endpoint to sort + if (le1.point[0] === le2.point[0]) + return le1.point[1] < le2.point[1] ? -1 : 1; + // has the line segment associated to e1 been inserted + // into S after the line segment associated to e2 ? + if (compareEvents(le1, le2) === 1) + return le2.isAbove(le1.point) ? -1 : 1; + // The line segment associated to e2 has been inserted + // into S after the line segment associated to e1 + return isBelow(le1, le2.point) ? -1 : 1; + } + if (le1.isSubject === le2.isSubject) { + // same polygon + let p1 = le1.point, p2 = le2.point; + if (p1[0] === p2[0] && p1[1] === p2[1] /*equals(le1.point, le2.point)*/) { + p1 = le1.otherEvent.point; + p2 = le2.otherEvent.point; + if (p1[0] === p2[0] && p1[1] === p2[1]) + return 0; + else + return le1.contourId > le2.contourId ? 1 : -1; + } + } + else { + // Segments are collinear, but belong to separate polygons + return le1.isSubject ? -1 : 1; + } + return compareEvents(le1, le2) === 1 ? 1 : -1; + } + + function subdivide(eventQueue, sbbox, cbbox, operation) { + const sweepLine = new SplayTree(compareSegments); + const sortedEvents = []; + const rightbound = Math.min(sbbox[2], cbbox[2]); + let prev, next, begin = sweepLine.minNode(); + while (eventQueue.length !== 0) { + let event = eventQueue.pop(); + sortedEvents.push(event); + // optimization by bboxes for intersection and difference goes here + if ((operation === INTERSECTION && event.point[0] > rightbound) || + (operation === DIFFERENCE && event.point[0] > sbbox[2])) { + break; + } + if (event.left) { + next = prev = sweepLine.insert(event); + begin = sweepLine.minNode(); + if (prev !== begin) + prev = sweepLine.prev(prev); + else + prev = null; + next = sweepLine.next(next); + const prevEvent = prev ? prev.key : null; + let prevprevEvent; + computeFields(event, prevEvent, operation); + if (next) { + if (possibleIntersection(event, next.key, eventQueue) === 2) { + computeFields(event, prevEvent, operation); + computeFields(event, next.key, operation); + } + } + if (prev) { + if (possibleIntersection(prev.key, event, eventQueue) === 2) { + let prevprev = prev; + if (prevprev !== begin) + prevprev = sweepLine.prev(prevprev); + else + prevprev = null; + prevprevEvent = prevprev ? prevprev.key : null; + computeFields(prevEvent, prevprevEvent, operation); + computeFields(event, prevEvent, operation); + } + } + } + else { + event = event.otherEvent; + next = prev = sweepLine.find(event); + if (prev && next) { + if (prev !== begin) + prev = sweepLine.prev(prev); + else + prev = null; + next = sweepLine.next(next); + sweepLine.remove(event); + if (next && prev) { + possibleIntersection(prev.key, next.key, eventQueue); + } + } + } + } + return sortedEvents; + } + + class Contour { + constructor() { + this.points = []; + this.holeIds = []; + this.holeOf = null; + this.depth = 0; + } + isExterior() { + return this.holeOf === null; + } + } + + const EmptyPoint = [0, 0]; + function orderEvents(sortedEvents) { + const resultEvents = []; + for (let i = 0, len = sortedEvents.length; i < len; i++) { + const event = sortedEvents[i]; + if ((event.left && event.inResult) || + (!event.left && event.otherEvent.inResult)) { + resultEvents.push(event); + } + } + // Due to overlapping edges the resultEvents array can be not wholly sorted + let sorted = false; + while (!sorted) { + sorted = true; + for (let i = 0, len = resultEvents.length; i < len; i++) { + if (i + 1 < len && + compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { + const tmp = resultEvents[i]; + resultEvents[i] = resultEvents[i + 1]; + resultEvents[i + 1] = tmp; + sorted = false; + } + } + } + for (let i = 0, len = resultEvents.length; i < len; i++) { + resultEvents[i].otherPos = i; + } + // imagine, the right event is found in the beginning of the queue, + // when his left counterpart is not marked yet + for (let i = 0, len = resultEvents.length; i < len; i++) { + const event = resultEvents[i]; + if (!event.left) { + const tmp = event.otherPos; + event.otherPos = event.otherEvent.otherPos; + event.otherEvent.otherPos = tmp; + } + } + return resultEvents; + } + function nextPos(pos, resultEvents, processed, origPos) { + let newPos = pos + 1; + const p = resultEvents[pos].point; + let p1 = EmptyPoint; + const length = resultEvents.length; + if (newPos < length) + p1 = resultEvents[newPos].point; + while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { + if (!processed.has(newPos)) + return newPos; + else + newPos++; + p1 = resultEvents[newPos].point; + } + newPos = pos - 1; + while (processed.has(newPos) && newPos > origPos) + newPos--; + return newPos; + } + function initializeContourFromContext(event, contours, contourId) { + const contour = new Contour(); + if (event.prevInResult != null) { + const prevInResult = event.prevInResult; + // Note that it is valid to query the "previous in result" for its output contour id, + // because we must have already processed it (i.e., assigned an output contour id) + // in an earlier iteration, otherwise it wouldn't be possible that it is "previous in + // result". + const lowerContourId = prevInResult.outputContourId; + const lowerResultTransition = prevInResult.resultTransition; + if (lowerResultTransition > 0) { + // We are inside. Now we have to check if the thing below us is another hole or + // an exterior contour. + const lowerContour = contours[lowerContourId]; + if (lowerContour.holeOf != null) { + // The lower contour is a hole => Connect the new contour as a hole to its parent, + // and use same depth. + const parentContourId = lowerContour.holeOf; + contours[parentContourId].holeIds.push(contourId); + contour.holeOf = parentContourId; + contour.depth = contours[lowerContourId].depth; + } + else { + // The lower contour is an exterior contour => Connect the new contour as a hole, + // and increment depth. + contours[lowerContourId].holeIds.push(contourId); + contour.holeOf = lowerContourId; + contour.depth = contours[lowerContourId].depth + 1; + } + } + else { + // We are outside => this contour is an exterior contour of same depth. + contour.holeOf = null; + contour.depth = contours[lowerContourId].depth; + } + } + else { + // There is no lower/previous contour => this contour is an exterior contour of depth 0. + contour.holeOf = null; + contour.depth = 0; + } + return contour; + } + /** + * @return {Array.<*>} polygons + */ + function connectEdges(sortedEvents) { + const resultEvents = orderEvents(sortedEvents); + // "false"-filled array + const processed = new Set(); + const contours = []; + for (let i = 0, len = resultEvents.length; i < len; i++) { + if (processed.has(i)) + continue; + const contourId = contours.length; + const contour = initializeContourFromContext(resultEvents[i], contours, contourId); + // Helper function that combines marking an event as processed with assigning its output contour ID + const markAsProcessed = (pos) => { + processed.add(pos); + resultEvents[pos].outputContourId = contourId; + }; + let pos = i; + let origPos = i; + const initial = resultEvents[i].point; + contour.points.push(initial); + /* eslint no-constant-condition: "off" */ + while (true) { + markAsProcessed(pos); + pos = resultEvents[pos].otherPos; + markAsProcessed(pos); + contour.points.push(resultEvents[pos].point); + pos = nextPos(pos, resultEvents, processed, origPos); + if (pos === origPos) + break; + } + contours.push(contour); + } + return contours; + } + + class TinyQueue { + constructor(data = [], compare = defaultCompare) { + this.data = data; + this.length = this.data.length; + this.compare = compare; + + if (this.length > 0) { + for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i); + } + } + + push(item) { + this.data.push(item); + this.length++; + this._up(this.length - 1); + } + + pop() { + if (this.length === 0) return undefined; + + const top = this.data[0]; + const bottom = this.data.pop(); + this.length--; + + if (this.length > 0) { + this.data[0] = bottom; + this._down(0); + } + + return top; + } + + peek() { + return this.data[0]; + } + + _up(pos) { + const {data, compare} = this; + const item = data[pos]; + + while (pos > 0) { + const parent = (pos - 1) >> 1; + const current = data[parent]; + if (compare(item, current) >= 0) break; + data[pos] = current; + pos = parent; + } + + data[pos] = item; + } + + _down(pos) { + const {data, compare} = this; + const halfLength = this.length >> 1; + const item = data[pos]; + + while (pos < halfLength) { + let left = (pos << 1) + 1; + let best = data[left]; + const right = left + 1; + + if (right < this.length && compare(data[right], best) < 0) { + left = right; + best = data[right]; + } + if (compare(best, item) >= 0) break; + + data[pos] = best; + pos = left; + } + + data[pos] = item; + } + } + + function defaultCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; + } + + const max = Math.max; + const min = Math.min; + let contourId = 0; + function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { + for (let i = 0, len = contourOrHole.length - 1; i < len; i++) { + const s1 = contourOrHole[i]; + const s2 = contourOrHole[i + 1]; + const e1 = new SweepEvent(s1, false, null, isSubject); + const e2 = new SweepEvent(s2, false, e1, isSubject); + e1.otherEvent = e2; + // skip collapsed edges, or it breaks + if (s1[0] === s2[0] && s1[1] === s2[1]) + continue; + e1.contourId = e2.contourId = depth; + if (!isExteriorRing) { + e1.isExteriorRing = false; + e2.isExteriorRing = false; + } + if (compareEvents(e1, e2) > 0) + e2.left = true; + else + e1.left = true; + const [x, y] = s1; + bbox[0] = min(bbox[0], x); + bbox[1] = min(bbox[1], y); + bbox[2] = max(bbox[2], x); + bbox[3] = max(bbox[3], y); + // Pushing it so the queue is sorted from left to right, + // with object on the left having the highest priority. + Q.push(e1); + Q.push(e2); + } + } + function fillQueue(subject, clipping, sbbox, cbbox, operation) { + const eventQueue = new TinyQueue(undefined, compareEvents); + let polygonSet, isExteriorRing; //, k, kk; + for (let i = 0, ii = subject.length; i < ii; i++) { + polygonSet = subject[i]; + for (let j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (isExteriorRing) + contourId++; + processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); + } + } + for (let i = 0, ii = clipping.length; i < ii; i++) { + polygonSet = clipping[i]; + for (let j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (operation === DIFFERENCE) + isExteriorRing = false; + if (isExteriorRing) + contourId++; + processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); + } + } + return eventQueue; + } + + const EMPTY = []; + + function trivialOperation(subject, clipping, operation) { + if (subject.length * clipping.length === 0) { + if (operation === INTERSECTION) + return EMPTY; + if (operation === DIFFERENCE) + return subject; + if (operation === UNION || operation === XOR) { + return subject.length === 0 ? clipping : subject; + } + } + return null; + } + function checkOverlap(subject, clipping, sbbox, cbbox, operation) { + if (sbbox[0] > cbbox[2] || + cbbox[0] > sbbox[2] || + sbbox[1] > cbbox[3] || + cbbox[1] > sbbox[3]) { + if (operation === INTERSECTION) + return EMPTY; + if (operation === DIFFERENCE) + return subject; + if (operation === UNION || operation === XOR) + return subject.concat(clipping); + } + return null; + } + function boolean(subject, clipping, operation) { + const s = typeof subject[0][0][0] === 'number' + ? [subject] + : subject; + const c = typeof clipping[0][0][0] === 'number' + ? [clipping] + : clipping; + let trivial = trivialOperation(s, c, operation); + if (trivial) + return trivial === EMPTY ? null : trivial; + const sbbox = [Infinity, Infinity, -Infinity, -Infinity]; + const cbbox = [Infinity, Infinity, -Infinity, -Infinity]; + // console.time('fill queue'); + const eventQueue = fillQueue(s, c, sbbox, cbbox, operation); + //console.timeEnd('fill queue'); + trivial = checkOverlap(s, c, sbbox, cbbox, operation); + if (trivial) + return trivial === EMPTY ? null : trivial; + // console.time('subdivide edges'); + const sortedEvents = subdivide(eventQueue, sbbox, cbbox, operation); + //console.timeEnd('subdivide edges'); + // console.time('connect vertices'); + const contours = connectEdges(sortedEvents); + //console.timeEnd('connect vertices'); + // Convert contours to polygons + const polygons = []; + for (let i = 0; i < contours.length; i++) { + const contour = contours[i]; + if (contour.isExterior()) { + // The exterior ring goes first + const rings = [contour.points]; + // Followed by holes if any + for (let j = 0; j < contour.holeIds.length; j++) { + const holeId = contour.holeIds[j]; + rings.push(contours[holeId].points); + } + polygons.push(rings); + } + } + return polygons; + } + + const union = (subject, clipping) => boolean(subject, clipping, UNION); + const diff = (subject, clipping) => boolean(subject, clipping, DIFFERENCE); + const xor = (subject, clipping) => boolean(subject, clipping, XOR); + const intersection$1 = (subject, clipping) => boolean(subject, clipping, INTERSECTION); + + // import * as martinez from '../../dist/martinez.min'; + let mode = globalThis.location.hash.substring(1); + let path = 'data/'; + let file; + switch (mode) { + case 'geo': + file = 'asia.geojson'; + break; + case 'states': + file = 'states_source.geojson'; + break; + case 'trapezoid': + file = 'trapezoid-box.geojson'; + break; + case 'canada': + file = 'canada.geojson'; + break; + case 'horseshoe': + file = 'horseshoe.geojson'; + break; + case 'hourglasses': + file = 'hourglasses.geojson'; + break; + case 'edge_overlap': + file = 'polygon_trapezoid_edge_overlap.geojson'; + break; + case 'touching_boxes': + file = 'touching_boxes.geojson'; + break; + case 'triangles': + file = 'two_pointed_triangles.geojson'; + break; + case 'holecut': + file = 'hole_cut.geojson'; + break; + case 'overlapping_segments': + file = 'overlapping_segments.geojson'; + break; + case 'overlap_loop': + file = 'overlap_loop.geojson'; + break; + case 'overlap_y': + file = 'overlap_y.geojson'; + break; + case 'overlap_two': + file = 'overlap_two.geojson'; + break; + case 'disjoint_boxes': + file = 'disjoint_boxes.geojson'; + break; + case 'polygons_edge_overlap': + file = 'polygons_edge_overlap.geojson'; + break; + case 'vertical_boxes': + file = 'vertical_boxes.geojson'; + break; + case 'collapsed': + file = 'collapsed.geojson'; + break; + case 'fatal1': + file = 'fatal1.geojson'; + break; + case 'fatal2': + file = 'fatal2.geojson'; + break; + case 'fatal3': + file = 'fatal3.geojson'; + break; + case 'fatal4': + file = 'fatal4.geojson'; + break; + case 'rectangles': + file = 'rectangles.geojson'; + break; + default: + file = 'hole_hole.geojson'; + break; + } + console.log(mode); + var OPERATIONS = { + INTERSECTION: 0, + UNION: 1, + DIFFERENCE: 2, + XOR: 3 + }; + var div = document.createElement('div'); + div.id = 'image-map'; + div.style.width = div.style.height = '100%'; + document.body.appendChild(div); + // create the slippy map + // @ts-ignore + var map = (globalThis.map = L.map('image-map', { + minZoom: 1, + maxZoom: 20, + center: [0, 0], + zoom: 2, + crs: mode === 'geo' + ? L.CRS.EPSG4326 + : L.extend({}, L.CRS.Simple, { + transformation: new L.Transformation(1 / 8, 0, -1 / 8, 0) + }), + editable: true + })); + map.addControl(new NewPolygonControl({ + // @ts-ignore + callback: map.editTools.startPolygon + })); + // @ts-ignore + map.addControl(new CoordinatesControl()); + map.addControl(new BooleanControl({ + // @ts-ignore + callback: run, + clear + })); + // @ts-ignore + var drawnItems = (globalThis.drawnItems = L.geoJSON().addTo(map)); + var rawData = null; + function loadData(path) { + console.log(path); + fetch(path) + .then((r) => r.json()) + .then((json) => { + drawnItems.addData(json); + rawData = json; + map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); + }); + } + function clear() { + drawnItems.clearLayers(); + results.clearLayers(); + rawData = null; + } + var reader = new jsts.io.GeoJSONReader(); + var writer = new jsts.io.GeoJSONWriter(); + function getClippingPoly(layers) { + // @ts-ignore + if (rawData && rawData.features && rawData.features.length > 1) + return rawData.features[1]; + return layers[1].toGeoJSON(); + } + function run(op) { + var layers = drawnItems.getLayers(); + if (layers.length < 2) + return; + // @ts-ignore + var subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); + var clipping = getClippingPoly(layers); + //console.log('input', subject, clipping, op); + // subject = JSON.parse(JSON.stringify(subject)); + // clipping = JSON.parse(JSON.stringify(clipping)); + var operation; + if (op === OPERATIONS.INTERSECTION) { + operation = intersection$1; + } + else if (op === OPERATIONS.UNION) { + operation = union; + } + else if (op === OPERATIONS.DIFFERENCE) { + operation = diff; + } + else if (op === 5) { + // B - A + operation = diff; + var temp = subject; + subject = clipping; + clipping = temp; + } + else { + operation = xor; + } + console.time('martinez'); + var result = operation(subject.geometry.coordinates, clipping.geometry.coordinates); + console.timeEnd('martinez'); + console.log('result', result); + // console.log(JSON.stringify(result)); + results.clearLayers(); + if (result !== null) { + results.addData({ + type: 'Feature', + geometry: { + type: 'MultiPolygon', + coordinates: result + } + }); + setTimeout(function () { + console.time('jsts'); + var s = reader.read(subject); + var c = reader.read(clipping); + var res; + if (op === OPERATIONS.INTERSECTION) { + // @ts-ignore + res = s.geometry.intersection(c.geometry); + } + else if (op === OPERATIONS.UNION) { + // @ts-ignore + res = s.geometry.union(c.geometry); + } + else if (op === OPERATIONS.DIFFERENCE) { + // @ts-ignore + res = s.geometry.difference(c.geometry); + } + else { + // @ts-ignore + res = s.geometry.symDifference(c.geometry); + } + res = writer.write(res); + console.timeEnd('jsts'); + // console.log('JSTS result', res); + }, 500); + } + } + map.on('editable:created', function (evt) { + drawnItems.addLayer(evt.layer); + evt.layer.on('click', function (e) { + if ( + // @ts-ignore + (e.originalEvent.ctrlKey || e.originalEvent.metaKey) && + this.editEnabled()) { + // @ts-ignore + this.editor.newHole(e.latlng); + } + }); + }); + // @ts-ignore + var results = (globalThis.results = L.geoJson(null, { + style: function () { + return { + color: 'red', + weight: 1 + }; + } + }).addTo(map)); + loadData(path + file); + +}(L, jsts)); diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..7ff3b5b --- /dev/null +++ b/web/index.html @@ -0,0 +1,28 @@ + + + + + + Martinez Clipping + + + + + + + + + + + + + + + + diff --git a/web/index.ts b/web/index.ts new file mode 100644 index 0000000..b20487a --- /dev/null +++ b/web/index.ts @@ -0,0 +1,282 @@ +import L from 'leaflet'; +import jsts from 'jsts'; +import 'leaflet-editable'; +import { CoordinatesControl } from './js/coordinates'; +import { NewPolygonControl } from './js/polygoncontrol'; +import { BooleanControl } from './js/booleanopcontrol'; +import * as martinez from '../src/'; +import { FeatureCollection, GeometryObject } from 'geojson'; +// import * as martinez from '../../dist/martinez.min'; + +let mode = globalThis.location.hash.substring(1); +let path = 'data/'; +const ext = '.geojson'; +let file; + +let files = [ + 'asia', + 'trapezoid-box', + 'canada', + 'horseshoe', + 'hourglasses', + 'overlap_y', + 'polygon_trapezoid_edge_overlap', + 'touching_boxes', + 'two_pointed_triangles', + 'hole_cut', + 'overlapping_segments', + 'overlap_loop', + 'disjoint_boxes' +]; + +switch (mode) { + case 'geo': + file = 'asia.geojson'; + break; + case 'states': + file = 'states_source.geojson'; + break; + case 'trapezoid': + file = 'trapezoid-box.geojson'; + break; + case 'canada': + file = 'canada.geojson'; + break; + case 'horseshoe': + file = 'horseshoe.geojson'; + break; + case 'hourglasses': + file = 'hourglasses.geojson'; + break; + case 'edge_overlap': + file = 'polygon_trapezoid_edge_overlap.geojson'; + break; + case 'touching_boxes': + file = 'touching_boxes.geojson'; + break; + case 'triangles': + file = 'two_pointed_triangles.geojson'; + break; + case 'holecut': + file = 'hole_cut.geojson'; + break; + case 'overlapping_segments': + file = 'overlapping_segments.geojson'; + break; + case 'overlap_loop': + file = 'overlap_loop.geojson'; + break; + case 'overlap_y': + file = 'overlap_y.geojson'; + break; + case 'overlap_two': + file = 'overlap_two.geojson'; + break; + case 'disjoint_boxes': + file = 'disjoint_boxes.geojson'; + break; + case 'polygons_edge_overlap': + file = 'polygons_edge_overlap.geojson'; + break; + case 'vertical_boxes': + file = 'vertical_boxes.geojson'; + break; + case 'collapsed': + file = 'collapsed.geojson'; + break; + case 'fatal1': + file = 'fatal1.geojson'; + break; + case 'fatal2': + file = 'fatal2.geojson'; + break; + case 'fatal3': + file = 'fatal3.geojson'; + break; + case 'fatal4': + file = 'fatal4.geojson'; + break; + case 'rectangles': + file = 'rectangles.geojson'; + break; + default: + file = 'hole_hole.geojson'; + break; +} + +console.log(mode); + +var OPERATIONS = { + INTERSECTION: 0, + UNION: 1, + DIFFERENCE: 2, + XOR: 3 +}; + +var div = document.createElement('div'); +div.id = 'image-map'; +div.style.width = div.style.height = '100%'; +document.body.appendChild(div); + +// create the slippy map +// @ts-ignore +var map = (globalThis.map = L.map('image-map', { + minZoom: 1, + maxZoom: 20, + center: [0, 0], + zoom: 2, + crs: + mode === 'geo' + ? L.CRS.EPSG4326 + : L.extend({}, L.CRS.Simple, { + transformation: new L.Transformation(1 / 8, 0, -1 / 8, 0) + }), + editable: true +})); + +map.addControl( + new NewPolygonControl({ + // @ts-ignore + callback: map.editTools.startPolygon + }) +); +// @ts-ignore +map.addControl(new CoordinatesControl()); +map.addControl( + new BooleanControl({ + // @ts-ignore + callback: run, + clear + }) +); + +// @ts-ignore +var drawnItems = (globalThis.drawnItems = L.geoJSON().addTo(map)); +var rawData: GeometryObject | FeatureCollection | null = null; +function loadData(path) { + console.log(path); + fetch(path) + .then((r) => r.json()) + .then((json) => { + drawnItems.addData(json); + rawData = json; + map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); + }); +} + +function clear() { + drawnItems.clearLayers(); + results.clearLayers(); + rawData = null; +} + +var reader = new jsts.io.GeoJSONReader(); +var writer = new jsts.io.GeoJSONWriter(); + +function getClippingPoly(layers) { + // @ts-ignore + if (rawData && rawData.features && rawData.features.length > 1) + return (rawData as FeatureCollection).features[1]; + return layers[1].toGeoJSON(); +} + +function run(op) { + var layers = drawnItems.getLayers(); + if (layers.length < 2) return; + // @ts-ignore + var subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); + var clipping = getClippingPoly(layers); + + //console.log('input', subject, clipping, op); + + // subject = JSON.parse(JSON.stringify(subject)); + // clipping = JSON.parse(JSON.stringify(clipping)); + + var operation; + if (op === OPERATIONS.INTERSECTION) { + operation = martinez.intersection; + } else if (op === OPERATIONS.UNION) { + operation = martinez.union; + } else if (op === OPERATIONS.DIFFERENCE) { + operation = martinez.diff; + } else if (op === 5) { + // B - A + operation = martinez.diff; + + var temp = subject; + subject = clipping; + clipping = temp; + } else { + operation = martinez.xor; + } + + console.time('martinez'); + var result = operation( + subject.geometry.coordinates, + clipping.geometry.coordinates + ); + console.timeEnd('martinez'); + + console.log('result', result); + // console.log(JSON.stringify(result)); + results.clearLayers(); + + if (result !== null) { + results.addData({ + type: 'Feature', + geometry: { + type: 'MultiPolygon', + coordinates: result + } + }); + + setTimeout(function () { + console.time('jsts'); + var s = reader.read(subject); + var c = reader.read(clipping); + var res; + if (op === OPERATIONS.INTERSECTION) { + // @ts-ignore + res = s.geometry.intersection(c.geometry); + } else if (op === OPERATIONS.UNION) { + // @ts-ignore + res = s.geometry.union(c.geometry); + } else if (op === OPERATIONS.DIFFERENCE) { + // @ts-ignore + res = s.geometry.difference(c.geometry); + } else { + // @ts-ignore + res = s.geometry.symDifference(c.geometry); + } + res = writer.write(res); + console.timeEnd('jsts'); + // console.log('JSTS result', res); + }, 500); + } +} + +map.on('editable:created', function (evt) { + drawnItems.addLayer(evt.layer); + evt.layer.on('click', function (e) { + if ( + // @ts-ignore + (e.originalEvent.ctrlKey || e.originalEvent.metaKey) && + this.editEnabled() + ) { + // @ts-ignore + this.editor.newHole(e.latlng); + } + }); +}); + +// @ts-ignore +var results = (globalThis.results = L.geoJson(null, { + style: function () { + return { + color: 'red', + weight: 1 + }; + } +}).addTo(map)); + +loadData(path + file); diff --git a/web/js/booleanopcontrol.js b/web/js/booleanopcontrol.js new file mode 100644 index 0000000..18ef50b --- /dev/null +++ b/web/js/booleanopcontrol.js @@ -0,0 +1,57 @@ +import L from 'leaflet'; + +export const BooleanControl = L.Control.extend({ + options: { + position: 'topright', + callback: () => undefined + }, + + onAdd: function () { + var container = (this._container = L.DomUtil.create('div', 'leaflet-bar')); + this._container.style.background = '#ffffff'; + this._container.style.padding = '10px'; + container.innerHTML = ` +
+
    +
  • +
  • +
  • +
  • +
  • +
+ + +
`; + var form = container.querySelector('form'); + L.DomEvent.on( + form, + 'submit', + function (evt) { + L.DomEvent.stop(evt); + var radios = Array.prototype.slice.call( + form.querySelectorAll('input[type=radio]') + ); + for (var i = 0, len = radios.length; i < len; i++) { + if (radios[i].checked) { + this.options.callback(parseInt(radios[i].value)); + break; + } + } + }, + this + ).on( + form.clear, + 'click', + function (evt) { + L.DomEvent.stop(evt); + this.options.clear(); + }, + this + ); + + L.DomEvent.disableClickPropagation( + this._container + ).disableScrollPropagation(this._container); + return this._container; + } +}); diff --git a/web/js/coordinates.js b/web/js/coordinates.js new file mode 100644 index 0000000..dc8b3ae --- /dev/null +++ b/web/js/coordinates.js @@ -0,0 +1,23 @@ +import L from 'leaflet'; + +export const CoordinatesControl = L.Control.extend({ + options: { + position: 'bottomright' + }, + + onAdd: function (map) { + this._container = L.DomUtil.create('div', 'leaflet-bar'); + this._container.style.background = '#ffffff'; + map.on('mousemove', this._onMouseMove, this); + return this._container; + }, + + _onMouseMove: function (e) { + this._container.innerHTML = + '' + + e.latlng.lng.toFixed(3) + + ', ' + + e.latlng.lat.toFixed(3) + + ''; + } +}); diff --git a/web/js/polygoncontrol.ts b/web/js/polygoncontrol.ts new file mode 100644 index 0000000..d493595 --- /dev/null +++ b/web/js/polygoncontrol.ts @@ -0,0 +1,39 @@ +import L from 'leaflet'; + +const EditControl = L.Control.extend({ + options: { + position: 'topleft', + callback: null, + kind: '', + html: '' + }, + + onAdd: function (map) { + const container = L.DomUtil.create('div', 'leaflet-control leaflet-bar'); + const link = L.DomUtil.create('a', '', container); + + link.href = '#'; + link.title = 'Create a new ' + this.options.kind; + link.innerHTML = this.options.html; + L.DomEvent.on(link, 'click', L.DomEvent.stop).on( + link, + 'click', + function () { + // @ts-ignore + globalThis.LAYER = this.options.callback.call(map.editTools); + }, + this + ); + + return container; + } +}); + +export const NewPolygonControl = EditControl.extend({ + options: { + position: 'topleft', + kind: 'polygon', + html: '▰', + callback: () => undefined + } +}); diff --git a/web/orthogonal.html b/web/orthogonal.html new file mode 100644 index 0000000..14206be --- /dev/null +++ b/web/orthogonal.html @@ -0,0 +1,15 @@ + + + + + + Martinez Clipping + + + + + + + + + diff --git a/web/styles.css b/web/styles.css new file mode 100644 index 0000000..8f01df1 --- /dev/null +++ b/web/styles.css @@ -0,0 +1,19 @@ +html, body, +#image-map { + width: 100%; + height: 100%; + margin: 0; + padding: 0; +} + +#diff-map, +#union-map, +#intersection-map { + display: none; + width: 400px; + height: 400px; + margin-right: 10px; + float: left; +} + +@import url("../../node_modules/leaflet-draw/dist/leaflet.draw.css") screen; diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..eefaf28 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noImplicitAny": false, + "strict": false, + "declaration": false, + "declarationMap": false + } +} From 64d646d1a59a89755a3a5d8902e612e4add5bcba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 12 Feb 2022 13:24:36 +0100 Subject: [PATCH 02/38] Bump ajv from 6.10.2 to 6.12.6 (#142) Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.10.2 to 6.12.6. - [Release notes](https://github.com/ajv-validator/ajv/releases) - [Commits](https://github.com/ajv-validator/ajv/compare/v6.10.2...v6.12.6) --- updated-dependencies: - dependency-name: ajv dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 5317 +++++++-------------------------------------- package.json | 52 +- 2 files changed, 818 insertions(+), 4551 deletions(-) diff --git a/package-lock.json b/package-lock.json index c51e67c..80a6277 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,27 @@ { "name": "martinez-polygon-clipping", - "version": "0.7.3", + "version": "0.7.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "martinez-polygon-clipping", - "version": "0.7.3", + "version": "0.7.2", "license": "MIT", "dependencies": { - "robust-predicates": "^2.0.4", + "robust-predicates": "^3.0.1", "splaytree": "^0.1.4", - "tinyqueue": "^1.2.0" + "tinyqueue": "^2.0.3" }, "devDependencies": { "@turf/union": "^4.6.0", - "@types/geojson": "^1.0.2", + "@types/geojson": "^1.0.6", + "@types/jsts": "^0.17.9", + "@types/leaflet": "^1.7.8", + "@types/leaflet-editable": "^1.2.1", + "@types/node": "^17.0.8", + "@vitest/ui": "^0.18.1", "benchmark": "^2.1.4", - "buble": "^0.19.3", "eslint": "^6.8.0", "eslint-plugin-import-order": "^2.1.4", "eslint-plugin-jsdoc": "^20.0.2", @@ -26,51 +30,28 @@ "http-server": "^0.12.1", "json-stringify-pretty-compact": "^2.0.0", "leaflet": "^1.2.0", - "leaflet-editable": "^1.1.0", + "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", - "rollup": "^1.28.0", - "rollup-plugin-buble": "^0.19.8", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-node-resolve": "^5.2.0", - "tap-spec": "^5.0.0", - "tap-status": "^1.0.1", - "tape": "^4.12.1", - "typescript": "^3.7.4", - "uglify-js": "^3.3.21" - } - }, -<<<<<<< HEAD - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", -======= - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true + "typescript": "^4.6.4", + "vite": "^3.0.0", + "vitest": "^0.18.1" + } }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "node_modules/@babel/code-frame": { + "version": "7.18.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", "dev": true, "license": "MIT", "engines": { @@ -78,13 +59,11 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.18.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -92,51 +71,81 @@ "node": ">=6.9.0" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "dev": true, + "license": "MIT" + }, "node_modules/@turf/union": { "version": "4.7.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/@turf/union/-/union-4.7.3.tgz", - "integrity": "sha1-AS1Kx0ZdbK1n/klI1AG3+L4P5BI=", "dev": true, "license": "MIT", "dependencies": { "jsts": "1.3.0" } }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "node_modules/@types/chai": { + "version": "4.3.1", "dev": true, "license": "MIT" }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, "node_modules/@types/geojson": { "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/geojson/-/geojson-1.0.6.tgz", - "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", "dev": true, "license": "MIT" }, + "node_modules/@types/jsts": { + "version": "0.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/openlayers": "*" + } + }, + "node_modules/@types/leaflet": { + "version": "1.7.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/leaflet-editable": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/leaflet": "*" + } + }, "node_modules/@types/node": { - "version": "17.0.23", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/node/-/node-17.0.23.tgz", - "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "version": "17.0.45", "dev": true, "license": "MIT" }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "node_modules/@types/openlayers": { + "version": "4.6.18", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/ui": { + "version": "0.18.1", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "sirv": "^2.0.2" } }, "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "7.4.1", "dev": true, "license": "MIT", "bin": { @@ -146,20 +155,8 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -168,8 +165,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -185,8 +180,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -201,8 +194,6 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -214,8 +205,6 @@ }, "node_modules/ansi-regex": { "version": "4.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, "license": "MIT", "engines": { @@ -224,8 +213,6 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -237,18 +224,22 @@ }, "node_modules/argparse": { "version": "1.0.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/astral-regex": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true, "license": "MIT", "engines": { @@ -256,9 +247,7 @@ } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", "dev": true, "license": "MIT", "dependencies": { @@ -267,15 +256,11 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/basic-auth": { "version": "1.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", "dev": true, "license": "MIT", "engines": { @@ -284,8 +269,6 @@ }, "node_modules/benchmark": { "version": "2.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "license": "MIT", "dependencies": { @@ -295,8 +278,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -304,37 +285,8 @@ "concat-map": "0.0.1" } }, - "node_modules/buble": { - "version": "0.19.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/buble/-/buble-0.19.8.tgz", - "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^6.1.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.0.1", - "chalk": "^2.4.2", - "magic-string": "^0.25.3", - "minimist": "^1.2.0", - "os-homedir": "^2.0.0", - "regexpu-core": "^4.5.4" - }, - "bin": { - "buble": "bin/buble" - } - }, - "node_modules/buffer-shims": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true, - "license": "MIT" - }, "node_modules/builtin-modules": { "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true, "license": "MIT", "engines": { @@ -343,8 +295,6 @@ }, "node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "license": "MIT", "dependencies": { @@ -357,18 +307,31 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/chai": { + "version": "4.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -382,15 +345,19 @@ }, "node_modules/chardet": { "version": "0.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, "license": "MIT" }, + "node_modules/check-error": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -402,8 +369,6 @@ }, "node_modules/cli-width": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "license": "ISC", "engines": { @@ -412,8 +377,6 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -422,15 +385,11 @@ }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true, "license": "MIT" }, "node_modules/colors": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, "license": "MIT", "engines": { @@ -439,8 +398,6 @@ }, "node_modules/comment-parser": { "version": "0.7.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-0.7.6.tgz", - "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==", "dev": true, "license": "MIT", "engines": { @@ -449,22 +406,11 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, "node_modules/corser": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/corser/-/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", "dev": true, "license": "MIT", "engines": { @@ -473,8 +419,6 @@ }, "node_modules/cross-spawn": { "version": "6.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -490,8 +434,6 @@ }, "node_modules/cross-spawn/node_modules/semver": { "version": "5.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "license": "ISC", "bin": { @@ -500,8 +442,6 @@ }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -516,56 +456,39 @@ } } }, -<<<<<<< HEAD - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "node_modules/deep-eql": { + "version": "3.0.1", "dev": true, "license": "MIT", "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "type-detect": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.12" } }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", "dev": true, "license": "MIT", "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true, - "license": "MIT" - }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -575,31 +498,8 @@ "node": ">=6.0.0" } }, - "node_modules/dotignore": { - "version": "0.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.4" - }, - "bin": { - "ignored": "bin/ignored" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" - }, "node_modules/ecstatic": { "version": "3.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", - "deprecated": "This package is unmaintained and deprecated. See the GH Issue 259.", "dev": true, "license": "MIT", "dependencies": { @@ -614,15 +514,11 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "license": "MIT", "dependencies": { @@ -630,32 +526,33 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.20.1", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -666,8 +563,6 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "license": "MIT", "dependencies": { @@ -682,10 +577,57 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.14.49", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.49", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "license": "MIT", "engines": { @@ -694,8 +636,6 @@ }, "node_modules/eslint": { "version": "6.8.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "license": "MIT", "dependencies": { @@ -749,9 +689,6 @@ }, "node_modules/eslint-plugin-import-order": { "version": "2.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-import-order/-/eslint-plugin-import-order-2.1.4.tgz", - "integrity": "sha1-g1ejldLYw8PxCdiybE9hjLUsUkM=", - "deprecated": "Use eslint-plugin-import instead (order rule)", "dev": true, "license": "MIT", "dependencies": { @@ -768,8 +705,6 @@ }, "node_modules/eslint-plugin-jsdoc": { "version": "20.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-20.4.0.tgz", - "integrity": "sha512-c/fnEpwWLFeQn+A7pb1qLOdyhovpqGCWCeUv1wtzFNL5G+xedl9wHUnXtp3b1sGHolVimi9DxKVTuhK/snXoOw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -791,8 +726,6 @@ }, "node_modules/eslint-plugin-promise": { "version": "3.8.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true, "license": "ISC", "engines": { @@ -801,8 +734,6 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -815,8 +746,6 @@ }, "node_modules/eslint-utils": { "version": "1.4.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -828,8 +757,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -838,8 +765,6 @@ }, "node_modules/espree": { "version": "6.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -851,23 +776,8 @@ "node": ">=6.0.0" } }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -880,8 +790,6 @@ }, "node_modules/esquery": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -893,8 +801,6 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -903,8 +809,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -916,8 +820,6 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -926,25 +828,14 @@ }, "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true, - "license": "MIT" - }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -953,22 +844,11 @@ }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true, "license": "MIT" }, - "node_modules/events-to-array": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true, - "license": "ISC" - }, "node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "license": "MIT", "dependencies": { @@ -982,29 +862,21 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true, "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { @@ -1019,8 +891,6 @@ }, "node_modules/file-entry-cache": { "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "license": "MIT", "dependencies": { @@ -1032,8 +902,6 @@ }, "node_modules/flat-cache": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "license": "MIT", "dependencies": { @@ -1047,15 +915,11 @@ }, "node_modules/flatted": { "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.14.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "version": "1.15.1", "dev": true, "funding": [ { @@ -1073,54 +937,67 @@ } } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true, "license": "MIT" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true, "license": "MIT" }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/geojson-project": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/geojson-project/-/geojson-project-1.0.1.tgz", - "integrity": "sha1-qpNGWGVYo2XETWaY/80L/FffRAY=", "dev": true, "license": "MIT" }, + "node_modules/get-func-name": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1128,8 +1005,6 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "license": "MIT", "dependencies": { @@ -1144,16 +1019,14 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -1166,8 +1039,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -1179,8 +1050,6 @@ }, "node_modules/globals": { "version": "12.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "license": "MIT", "dependencies": { @@ -1194,16 +1063,12 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.10", "dev": true, "license": "ISC" }, "node_modules/has": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "license": "MIT", "dependencies": { @@ -1213,33 +1078,8 @@ "node": ">= 0.4.0" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", "dev": true, "license": "MIT", "funding": { @@ -1248,18 +1088,25 @@ }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "license": "MIT", "engines": { @@ -1271,8 +1118,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1287,8 +1132,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -1297,15 +1140,11 @@ }, "node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1319,8 +1158,6 @@ }, "node_modules/http-server": { "version": "0.12.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", "dev": true, "license": "MIT", "dependencies": { @@ -1345,8 +1182,6 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://nexus3.linkurious.net/repository/npm/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { @@ -1358,8 +1193,6 @@ }, "node_modules/ignore": { "version": "4.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "license": "MIT", "engines": { @@ -1368,8 +1201,6 @@ }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "license": "MIT", "dependencies": { @@ -1385,8 +1216,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "license": "MIT", "engines": { @@ -1395,8 +1224,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "license": "ISC", "dependencies": { @@ -1406,15 +1233,11 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/inquirer": { "version": "7.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "license": "MIT", "dependencies": { @@ -1438,8 +1261,6 @@ }, "node_modules/inquirer/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -1448,8 +1269,6 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -1464,8 +1283,6 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -1481,8 +1298,6 @@ }, "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1494,15 +1309,11 @@ }, "node_modules/inquirer/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -1511,8 +1322,6 @@ }, "node_modules/inquirer/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1524,8 +1333,6 @@ }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -1537,8 +1344,6 @@ }, "node_modules/internal-slot": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "license": "MIT", "dependencies": { @@ -1550,34 +1355,13 @@ "node": ">= 0.4" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true, "license": "MIT" }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "license": "MIT", "dependencies": { @@ -1589,8 +1373,6 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "license": "MIT", "dependencies": { @@ -1606,8 +1388,6 @@ }, "node_modules/is-callable": { "version": "1.2.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true, "license": "MIT", "engines": { @@ -1618,9 +1398,7 @@ } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", "dev": true, "license": "MIT", "dependencies": { @@ -1632,8 +1410,6 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1648,31 +1424,14 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -1681,8 +1440,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1692,17 +1449,8 @@ "node": ">=0.10.0" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true, - "license": "MIT" - }, "node_modules/is-negative-zero": { "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "license": "MIT", "engines": { @@ -1713,9 +1461,7 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { @@ -1728,20 +1474,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "license": "MIT", "dependencies": { @@ -1756,19 +1490,18 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "license": "MIT", "dependencies": { @@ -1783,8 +1516,6 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "license": "MIT", "dependencies": { @@ -1799,8 +1530,6 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1810,31 +1539,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "license": "MIT" - }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true, "license": "ISC" }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -1847,8 +1563,6 @@ }, "node_modules/jsdoctypeparser": { "version": "6.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz", - "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==", "dev": true, "license": "MIT", "bin": { @@ -1858,47 +1572,28 @@ "node": ">=6" } }, - "node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true, "license": "MIT" }, "node_modules/json-stringify-pretty-compact": { "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", - "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", "dev": true, "license": "MIT" }, "node_modules/jsts": { "version": "1.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsts/-/jsts-1.3.0.tgz", - "integrity": "sha1-6Tp2+XrJvafUYl2dZHDw1grIDkU=", "dev": true, "license": "(EDL-1.0 OR EPL-1.0)", "engines": { @@ -1906,23 +1601,17 @@ } }, "node_modules/leaflet": { - "version": "1.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/leaflet/-/leaflet-1.7.1.tgz", - "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==", + "version": "1.8.0", "dev": true, "license": "BSD-2-Clause" }, "node_modules/leaflet-editable": { "version": "1.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/leaflet-editable/-/leaflet-editable-1.2.0.tgz", - "integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==", "dev": true, "license": "WTFPL" }, "node_modules/levn": { "version": "0.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "license": "MIT", "dependencies": { @@ -1935,8 +1624,6 @@ }, "node_modules/load-json-file": { "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "license": "MIT", "dependencies": { @@ -1949,31 +1636,42 @@ "node": ">=4" } }, + "node_modules/local-pkg": { + "version": "0.4.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash.cond": { "version": "4.5.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", "dev": true, "license": "MIT" }, "node_modules/lodash.find": { "version": "4.6.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", "dev": true, "license": "MIT" }, + "node_modules/loupe": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/magic-string": { "version": "0.25.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1982,8 +1680,6 @@ }, "node_modules/memorystream": { "version": "0.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true, "engines": { "node": ">= 0.10.0" @@ -1991,8 +1687,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "license": "MIT", "bin": { @@ -2004,8 +1698,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -2014,8 +1706,6 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -2027,56 +1717,61 @@ }, "node_modules/minimist": { "version": "1.2.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true, "license": "MIT" }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, + "node_modules/mrmime": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, "license": "ISC" }, + "node_modules/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true, "license": "MIT" }, "node_modules/nice-try": { "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2088,8 +1783,6 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "license": "ISC", "bin": { @@ -2098,8 +1791,6 @@ }, "node_modules/npm-run-all": { "version": "4.1.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2122,47 +1813,16 @@ "node": ">= 4" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.2", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -2171,8 +1831,6 @@ }, "node_modules/object.assign": { "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2190,14 +1848,10 @@ }, "node_modules/object.entries-ponyfill": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object.entries-ponyfill/-/object.entries-ponyfill-1.0.1.tgz", - "integrity": "sha1-Kavfd8v70mVm3RqiTp2I9lQz0lY=", "dev": true }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "license": "ISC", "dependencies": { @@ -2206,8 +1860,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -2222,8 +1874,6 @@ }, "node_modules/opener": { "version": "1.5.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, "license": "(WTFPL OR MIT)", "bin": { @@ -2232,8 +1882,6 @@ }, "node_modules/optionator": { "version": "0.8.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "license": "MIT", "dependencies": { @@ -2248,21 +1896,8 @@ "node": ">= 0.8.0" } }, - "node_modules/os-homedir": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/os-homedir/-/os-homedir-2.0.0.tgz", - "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==", - "deprecated": "This is not needed anymore. Use `require('os').homedir()` instead.", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "license": "MIT", "engines": { @@ -2271,8 +1906,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -2284,8 +1917,6 @@ }, "node_modules/parse-json": { "version": "2.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "license": "MIT", "dependencies": { @@ -2295,20 +1926,8 @@ "node": ">=0.10.0" } }, - "node_modules/parse-ms": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/parse-ms/-/parse-ms-1.0.1.tgz", - "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "license": "MIT", "engines": { @@ -2317,8 +1936,6 @@ }, "node_modules/path-key": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "license": "MIT", "engines": { @@ -2327,15 +1944,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-type": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", "dependencies": { @@ -2347,18 +1960,27 @@ }, "node_modules/path-type/node_modules/pify": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, "node_modules/pidtree": { "version": "0.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, "license": "MIT", "bin": { @@ -2370,8 +1992,6 @@ }, "node_modules/pify": { "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, "license": "MIT", "engines": { @@ -2380,25 +2000,11 @@ }, "node_modules/platform": { "version": "1.3.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true, "license": "MIT" }, - "node_modules/plur": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/plur/-/plur-1.0.0.tgz", - "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/portfinder": { "version": "1.0.28", - "resolved": "https://nexus3.linkurious.net/repository/npm/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "license": "MIT", "dependencies": { @@ -2412,49 +2018,44 @@ }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-ms": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pretty-ms/-/pretty-ms-2.1.0.tgz", - "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", + "node_modules/postcss": { + "version": "8.4.14", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "license": "MIT", "dependencies": { - "is-finite": "^1.0.1", - "parse-ms": "^1.0.0", - "plur": "^1.0.0" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "node_modules/prelude-ls": { + "version": "1.1.2", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.8.0" + } }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "license": "MIT", "engines": { @@ -2463,8 +2064,6 @@ }, "node_modules/punycode": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "license": "MIT", "engines": { @@ -2472,9 +2071,7 @@ } }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -2487,17 +2084,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/re-emitter": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/re-emitter/-/re-emitter-1.1.3.tgz", - "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=", - "dev": true, - "license": "MIT" - }, "node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "license": "MIT", "dependencies": { @@ -2511,8 +2099,6 @@ }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "license": "MIT", "dependencies": { @@ -2527,8 +2113,6 @@ }, "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "license": "MIT", "dependencies": { @@ -2541,59 +2125,20 @@ }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "2.2.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-shims": "~1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, "engines": { "node": ">=4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "version": "1.4.3", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -2604,66 +2149,22 @@ }, "node_modules/regexpp": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.5.0" } }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/regextras": { "version": "0.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/regextras/-/regextras-0.7.1.tgz", - "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", "dev": true, "license": "MIT", "engines": { "node": ">=0.1.14" } }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, "node_modules/reify": { "version": "0.20.12", - "resolved": "https://nexus3.linkurious.net/repository/npm/reify/-/reify-0.20.12.tgz", - "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2676,41 +2177,44 @@ "node": ">=4" } }, - "node_modules/reify/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/reify/node_modules/acorn": { + "version": "6.4.2", "dev": true, - "license": "ISC", + "license": "MIT", "bin": { - "semver": "bin/semver" + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "node_modules/reify/node_modules/acorn-dynamic-import": { + "version": "4.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10" + "peerDependencies": { + "acorn": "^6.0.0" + } + }, + "node_modules/reify/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true, "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -2723,8 +2227,6 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -2733,8 +2235,6 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -2745,20 +2245,8 @@ "node": ">=8" } }, - "node_modules/resumer": { - "version": "0.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "~2.3.4" - } - }, "node_modules/rimraf": { "version": "2.6.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "license": "ISC", "dependencies": { @@ -2769,114 +2257,25 @@ } }, "node_modules/robust-predicates": { - "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/robust-predicates/-/robust-predicates-2.0.4.tgz", - "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==", + "version": "3.0.1", "license": "Unlicense" }, "node_modules/rollup": { - "version": "1.32.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "version": "2.77.0", "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, "bin": { "rollup": "dist/bin/rollup" - } - }, - "node_modules/rollup-plugin-buble": { - "version": "0.19.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz", - "integrity": "sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw==", - "deprecated": "This module has been deprecated and is no longer maintained. Please use @rollup/plugin-buble.", - "dev": true, - "license": "MIT", - "dependencies": { - "buble": "^0.19.8", - "rollup-pluginutils": "^2.3.3" - } - }, - "node_modules/rollup-plugin-commonjs": { - "version": "10.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", - "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "rollup": ">=1.12.0" - } - }, - "node_modules/rollup-plugin-node-resolve": { - "version": "5.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", - "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1", - "rollup-pluginutils": "^2.8.1" }, - "peerDependencies": { - "rollup": ">=1.11.0" - } - }, - "node_modules/rollup-plugin-node-resolve/node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "node": ">=10.0.0" }, - "engines": { - "node": ">=0.4.0" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/run-async": { "version": "2.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "license": "MIT", "engines": { @@ -2885,8 +2284,6 @@ }, "node_modules/rxjs": { "version": "6.6.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2896,31 +2293,18 @@ "npm": ">=2.0.0" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "license": "MIT" }, "node_modules/secure-compare": { "version": "3.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", "dev": true, "license": "MIT" }, "node_modules/semver": { "version": "6.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "license": "ISC", "bin": { @@ -2929,8 +2313,6 @@ }, "node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "license": "MIT", "dependencies": { @@ -2942,8 +2324,6 @@ }, "node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "license": "MIT", "engines": { @@ -2952,15 +2332,11 @@ }, "node_modules/shell-quote": { "version": "1.7.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true, "license": "MIT" }, "node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "license": "MIT", "dependencies": { @@ -2974,15 +2350,24 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, + "node_modules/sirv": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/slice-ansi": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2996,25 +2381,27 @@ }, "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true, "license": "MIT" }, "node_modules/spdx-correct": { "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3024,15 +2411,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3042,51 +2425,20 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.11", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true, "license": "CC0-1.0" }, "node_modules/splaytree": { "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/splaytree/-/splaytree-0.1.4.tgz", - "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==", "license": "MIT" }, - "node_modules/split": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/split/-/split-1.0.0.tgz", - "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true, "license": "BSD-3-Clause" }, - "node_modules/string_decoder": { - "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { @@ -3100,8 +2452,6 @@ }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -3110,8 +2460,6 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -3123,26 +2471,6 @@ }, "node_modules/string.prototype.padend": { "version": "3.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", - "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", "dev": true, "license": "MIT", "dependencies": { @@ -3158,28 +2486,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3187,8 +2513,6 @@ }, "node_modules/strip-ansi": { "version": "5.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "license": "MIT", "dependencies": { @@ -3200,8 +2524,6 @@ }, "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "license": "MIT", "engines": { @@ -3210,8 +2532,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -3223,8 +2543,6 @@ }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -3236,8 +2554,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -3249,8 +2565,6 @@ }, "node_modules/table": { "version": "5.4.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3265,15 +2579,11 @@ }, "node_modules/table/node_modules/emoji-regex": { "version": "7.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true, "license": "MIT" }, "node_modules/table/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "license": "MIT", "engines": { @@ -3282,8 +2592,6 @@ }, "node_modules/table/node_modules/string-width": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "license": "MIT", "dependencies": { @@ -3295,244 +2603,38 @@ "node": ">=6" } }, - "node_modules/tap-out": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-out/-/tap-out-2.1.0.tgz", - "integrity": "sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "re-emitter": "1.1.3", - "readable-stream": "2.2.9", - "split": "1.0.0", - "trim": "0.0.1" - }, - "bin": { - "tap-out": "bin/cmd.js" - } - }, - "node_modules/tap-parser": { - "version": "1.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-parser/-/tap-parser-1.3.2.tgz", - "integrity": "sha1-EgxQiciMPIp5PvKIhn3jIeGPjCI=", - "dev": true, - "license": "MIT", - "dependencies": { - "events-to-array": "^1.0.1", - "inherits": "~2.0.1", - "js-yaml": "^3.2.7" - }, - "bin": { - "tap-parser": "bin/cmd.js" - }, - "optionalDependencies": { - "readable-stream": "^2" - } - }, - "node_modules/tap-spec": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-spec/-/tap-spec-5.0.0.tgz", - "integrity": "sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^1.0.0", - "duplexer": "^0.1.1", - "figures": "^1.4.0", - "lodash": "^4.17.10", - "pretty-ms": "^2.1.0", - "repeat-string": "^1.5.2", - "tap-out": "^2.1.0", - "through2": "^2.0.0" - }, - "bin": { - "tap-spec": "bin/cmd.js", - "tspec": "bin/cmd.js" - } - }, - "node_modules/tap-spec/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap-spec/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap-spec/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap-spec/node_modules/figures": { - "version": "1.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap-spec/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap-spec/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tap-status": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-status/-/tap-status-1.0.1.tgz", - "integrity": "sha1-r7nUGYzD00BqW8OvuxxwcuiA5fk=", - "dev": true, - "license": "ISC", - "dependencies": { - "tap-parser": "^1.1.5", - "tape": "^4.0.0" - }, - "bin": { - "tap-status": "index.js" - } - }, - "node_modules/tape": { - "version": "4.15.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-4.15.0.tgz", - "integrity": "sha512-SfRmG2I8QGGgJE/MCiLH8c11L5XxyUXxwK9xLRD0uiK5fehRkkSZGmR6Y1pxOt8vJ19m3sY+POTQpiaVv45/LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "~1.0.2", - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "glob": "~7.2.0", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.1.4", - "minimist": "~1.2.5", - "object-inspect": "~1.12.0", - "resolve": "~1.22.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.5", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" - } - }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true, "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true, "license": "MIT" }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/tinypool": { + "version": "0.2.4", "dev": true, "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/through2/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "node_modules/tinyqueue": { + "version": "2.0.3", + "license": "ISC" }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/tinyspy": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/tinyqueue": { - "version": "1.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/tinyqueue/-/tinyqueue-1.2.3.tgz", - "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==", - "license": "ISC" - }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://nexus3.linkurious.net/repository/npm/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -3542,23 +2644,21 @@ "node": ">=0.6.0" } }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true + "node_modules/totalist": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/tslib": { "version": "1.14.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, "node_modules/type-check": { "version": "0.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "license": "MIT", "dependencies": { @@ -3568,10 +2668,16 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -3579,9 +2685,7 @@ } }, "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "version": "4.7.4", "dev": true, "license": "Apache-2.0", "bin": { @@ -3592,83 +2696,22 @@ "node": ">=4.2.0" } }, - "node_modules/uglify-js": { - "version": "3.15.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/union": { "version": "0.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dev": true, "dependencies": { "qs": "^6.4.0" @@ -3679,8 +2722,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3689,29 +2730,16 @@ }, "node_modules/url-join": { "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", - "dev": true, - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "license": "MIT" }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true, "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3719,10 +2747,97 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vite": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.14.47", + "postcss": "^8.4.14", + "resolve": "^1.22.1", + "rollup": "^2.75.6" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "0.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^4.3.1", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "tinypool": "^0.2.4", + "tinyspy": "^1.0.0", + "vite": "^2.9.12 || ^3.0.0-0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/ui": "*", + "c8": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "c8": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, "node_modules/which": { "version": "1.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3734,8 +2849,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "license": "MIT", "dependencies": { @@ -3751,8 +2864,6 @@ }, "node_modules/word-wrap": { "version": "1.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "license": "MIT", "engines": { @@ -3761,15 +2872,11 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "license": "ISC" }, "node_modules/write": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "license": "MIT", "dependencies": { @@ -3778,219 +2885,64 @@ "engines": { "node": ">=4" } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } } }, "dependencies": { "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", "dev": true }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.18.6", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, -======= - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "@polka/url": { + "version": "1.0.0-next.21", "dev": true }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "@turf/union": { + "version": "4.7.3", "dev": true, "requires": { - "@cspotcode/source-map-consumer": "0.8.0" + "jsts": "1.3.0" } }, - "@mapbox/typehead": { - "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/@mapbox/typehead/-/typehead-1.0.3.tgz", - "integrity": "sha512-gmJdnOE5w+qWS9wQC8lXQrApLWN5uXk9+M/f4Y7VU+r4tn8zw0Tabblf3ym0Vkb0x7jB5SAwmclyhmcwsajAjw==", + "@types/chai": { + "version": "4.3.1", + "dev": true + }, + "@types/chai-subset": { + "version": "1.3.3", "dev": true, "requires": { - "chalk": "^4.1.2", - "commander": "^8.1.0", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "esbuild": "^0.12.22", - "esbuild-plugin-lodash": "^1.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "8.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@rollup/pluginutils": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", - "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } - } - }, - "@ts-type/package-dts": { - "version": "1.0.56", - "resolved": "https://nexus3.linkurious.net/repository/npm/@ts-type/package-dts/-/package-dts-1.0.56.tgz", - "integrity": "sha512-nBjbCaVV+R81jk7q/6sRuNYOhDAbBOmaCkPI2quK0Rnye2f4FUHX+4JL+3rDPiRPHxgX3pNfVKKHBlPAHiRddw==", - "dev": true, - "requires": { - "@types/semver": "^7.3.9", - "ts-type": "^2.1.2" - } - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - "@turf/union": { - "version": "4.7.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/@turf/union/-/union-4.7.3.tgz", - "integrity": "sha1-AS1Kx0ZdbK1n/klI1AG3+L4P5BI=", - "dev": true, - "requires": { - "jsts": "1.3.0" + "@types/chai": "*" } }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, "@types/geojson": { "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/geojson/-/geojson-1.0.6.tgz", - "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", "dev": true }, "@types/jsts": { - "version": "0.17.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/jsts/-/jsts-0.17.9.tgz", - "integrity": "sha512-+NVh23rGOe4wjEGDWrcB9aWgsmLg5ZvGgiIvieLRETOSqa68rAQlQ0w3LiK83BCtBaHPyzpBCgfuGtWKqu3lbQ==", + "version": "0.17.12", "dev": true, "requires": { "@types/openlayers": "*" } }, "@types/leaflet": { - "version": "1.7.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/leaflet/-/leaflet-1.7.8.tgz", - "integrity": "sha512-prZwhmUznkwTYCTZVGTR4U1GzgPP3PAWYYQ3wDgVkIoiuQTheWoycsXx4Rz9ARYhlDTl0Ycd8lvhH2/rNSkqIg==", + "version": "1.7.11", "dev": true, "requires": { "@types/geojson": "*" @@ -3998,103 +2950,37 @@ }, "@types/leaflet-editable": { "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/leaflet-editable/-/leaflet-editable-1.2.1.tgz", - "integrity": "sha512-7Oms1HgulWiclkI0s1XLmr1yRylNoJX8sVUfAv9+28JzwWbKbLcQ6//vhFEOmoMlBQyL5veogKpUUb5qeF+Qyg==", "dev": true, "requires": { "@types/leaflet": "*" } }, "@types/node": { -<<<<<<< HEAD - "version": "17.0.23", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/node/-/node-17.0.23.tgz", - "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", -======= - "version": "17.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/node/-/node-17.0.8.tgz", - "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "version": "17.0.45", "dev": true }, "@types/openlayers": { "version": "4.6.18", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/openlayers/-/openlayers-4.6.18.tgz", - "integrity": "sha512-srqcI4chyzzs11ZhYpnZqT6Lh1v/O5EXh+pPENDtAwhE7CM31h+JsGomt+ioGhuNVJ96Jl4UkHR1Lllb/XrQAA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/semver": { - "version": "7.3.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/semver/-/semver-7.3.9.tgz", - "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", "dev": true }, - "@types/tape": { - "version": "4.13.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/tape/-/tape-4.13.2.tgz", - "integrity": "sha512-V1ez/RtYRGN9cNYApw5xf27DpMkTB0033X6a2i3KUmKhSojBfbWN0i3EgZxboUG96WJLHLdOyZ01aiZwVW5aSA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@yarn-tool/resolve-package": { - "version": "1.0.41", - "resolved": "https://nexus3.linkurious.net/repository/npm/@yarn-tool/resolve-package/-/resolve-package-1.0.41.tgz", - "integrity": "sha512-ybJqQztdSkTr9Z0BkPo5OlQBZoHlXHHXxssPJgFT8lFgyOxlhkjUg3WBFn7MSK6JMUoXU32wd2KKFBL/Fgsb8Q==", + "@vitest/ui": { + "version": "0.18.1", "dev": true, "requires": { - "@ts-type/package-dts": "^1.0.56", - "pkg-dir": "< 6 >= 5", - "tslib": "^2.3.1", - "upath2": "^3.1.12" + "sirv": "^2.0.2" } }, "acorn": { - "version": "6.4.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "7.4.1", "dev": true }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true, - "requires": {} - }, "acorn-jsx": { "version": "5.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, "ajv": { "version": "6.12.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -4105,8 +2991,6 @@ }, "ansi-escapes": { "version": "4.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { "type-fest": "^0.21.3" @@ -4114,187 +2998,73 @@ "dependencies": { "type-fest": { "version": "0.21.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } }, "ansi-regex": { "version": "4.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "ansi-styles": { "version": "3.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "argparse": { "version": "1.0.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, - "array.prototype.every": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/array.prototype.every/-/array.prototype.every-1.1.3.tgz", - "integrity": "sha512-vWnriJI//SOMOWtXbU/VXhJ/InfnNHPF6BLKn5WfY8xXy+NWql0fUy20GO3sdqBhCAO+qw8S/E5nJiZX+QFdCA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "is-string": "^1.0.7" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } + "assertion-error": { + "version": "1.1.0", + "dev": true }, "astral-regex": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", "dev": true, "requires": { "lodash": "^4.17.14" } }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, "balanced-match": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "basic-auth": { "version": "1.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", "dev": true }, "benchmark": { "version": "2.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "requires": { "lodash": "^4.17.4", "platform": "^1.3.3" } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buble": { - "version": "0.19.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/buble/-/buble-0.19.8.tgz", - "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==", - "dev": true, - "requires": { - "acorn": "^6.1.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.0.1", - "chalk": "^2.4.2", - "magic-string": "^0.25.3", - "minimist": "^1.2.0", - "os-homedir": "^2.0.0", - "regexpu-core": "^4.5.4" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, "builtin-modules": { "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "call-bind": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -4303,14 +3073,23 @@ }, "callsites": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "chai": { + "version": "4.3.6", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, "chalk": { "version": "2.4.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -4320,30 +3099,14 @@ }, "chardet": { "version": "0.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } + "check-error": { + "version": "1.0.2", + "dev": true }, "cli-cursor": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { "restore-cursor": "^3.1.0" @@ -4351,14 +3114,10 @@ }, "cli-width": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "color-convert": { "version": "1.9.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -4366,98 +3125,26 @@ }, "color-name": { "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, -<<<<<<< HEAD -======= - "commander": { - "version": "4.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "comment-parser": { "version": "0.7.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-0.7.6.tgz", - "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "concat-map": { "version": "0.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "corser": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/corser/-/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, "cross-spawn": { "version": "6.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", @@ -4469,159 +3156,45 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "debug": { "version": "4.3.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, - "deep-equal": { -<<<<<<< HEAD - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", -======= - "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "deep-eql": { + "version": "3.0.1", "dev": true, "requires": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", - "isarray": "^2.0.5", - "object-is": "^1.1.4", - "object-keys": "^1.1.1", -<<<<<<< HEAD - "regexp.prototype.flags": "^1.2.0" -======= - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "type-detect": "^4.0.0" } }, "deep-is": { "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, "doctrine": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, - "dotignore": { - "version": "0.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, "ecstatic": { "version": "3.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", "dev": true, "requires": { "he": "^1.1.1", @@ -4632,113 +3205,46 @@ }, "emoji-regex": { "version": "8.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "error-ex": { "version": "1.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.20.1", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" -<<<<<<< HEAD -======= - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, "es-to-primitive": { "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -4747,27 +3253,42 @@ } }, "esbuild": { - "version": "0.12.29", - "resolved": "https://nexus3.linkurious.net/repository/npm/esbuild/-/esbuild-0.12.29.tgz", - "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", - "dev": true - }, - "esbuild-plugin-lodash": { - "version": "1.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/esbuild-plugin-lodash/-/esbuild-plugin-lodash-1.1.0.tgz", - "integrity": "sha512-DtvAnHuALecQguNWeIf2Ea3bCp0Pe9t+knjJNxHJE9PHagorZR92B1Xmx2cLKJz5fzkBzXLFnegiTdWYUi1AyQ==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "0.14.49", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "esbuild-darwin-64": { + "version": "0.14.49", + "dev": true, + "optional": true + }, + "escape-string-regexp": { + "version": "1.0.5", "dev": true }, "eslint": { "version": "6.8.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -4811,8 +3332,6 @@ }, "eslint-plugin-import-order": { "version": "2.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-import-order/-/eslint-plugin-import-order-2.1.4.tgz", - "integrity": "sha1-g1ejldLYw8PxCdiybE9hjLUsUkM=", "dev": true, "requires": { "builtin-modules": "^1.1.1", @@ -4822,8 +3341,6 @@ }, "eslint-plugin-jsdoc": { "version": "20.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-20.4.0.tgz", - "integrity": "sha512-c/fnEpwWLFeQn+A7pb1qLOdyhovpqGCWCeUv1wtzFNL5G+xedl9wHUnXtp3b1sGHolVimi9DxKVTuhK/snXoOw==", "dev": true, "requires": { "comment-parser": "^0.7.2", @@ -4838,14 +3355,10 @@ }, "eslint-plugin-promise": { "version": "3.8.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true }, "eslint-scope": { "version": "5.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -4854,8 +3367,6 @@ }, "eslint-utils": { "version": "1.4.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -4863,45 +3374,23 @@ }, "eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://nexus3.linkurious.net/repository/npm/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true }, "espree": { "version": "6.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } } }, "esprima": { "version": "4.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -4909,16 +3398,12 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "esrecurse": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" @@ -4926,46 +3411,24 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "estraverse": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true }, "esutils": { "version": "2.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "eventemitter3": { "version": "4.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, "external-editor": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -4975,26 +3438,18 @@ }, "fast-deep-equal": { "version": "3.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "figures": { "version": "3.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -5002,95 +3457,13 @@ }, "file-entry-cache": { "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { "flat-cache": "^2.0.1" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, "flat-cache": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { "flatted": "^2.0.0", @@ -5100,108 +3473,57 @@ }, "flatted": { "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "follow-redirects": { - "version": "1.14.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, -<<<<<<< HEAD -======= - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "version": "1.15.1", "dev": true }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - } - } - }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "fs.realpath": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, "function-bind": { "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", "dev": true }, "geojson-project": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/geojson-project/-/geojson-project-1.0.1.tgz", - "integrity": "sha1-qpNGWGVYo2XETWaY/80L/FffRAY=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", "dev": true }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.2", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, -<<<<<<< HEAD -======= - "get-package-type": { - "version": "0.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "get-symbol-description": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -5209,23 +3531,19 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "5.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -5233,112 +3551,58 @@ }, "globals": { "version": "12.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "requires": { "type-fest": "^0.8.1" } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.10", "dev": true }, "has": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", "dev": true }, -<<<<<<< HEAD -======= - "has-dynamic-import": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", - "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", "dev": true, "requires": { - "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - "has-flag": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "has-symbols": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-tostringtag": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" -<<<<<<< HEAD -======= - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, "he": { "version": "1.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hosted-git-info": { "version": "2.8.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "http-proxy": { "version": "1.18.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", @@ -5348,8 +3612,6 @@ }, "http-server": { "version": "0.12.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", "dev": true, "requires": { "basic-auth": "^1.0.3", @@ -5366,8 +3628,6 @@ }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://nexus3.linkurious.net/repository/npm/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -5375,14 +3635,10 @@ }, "ignore": { "version": "4.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "import-fresh": { "version": "3.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -5391,14 +3647,10 @@ }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", @@ -5407,14 +3659,10 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "inquirer": { "version": "7.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -5434,14 +3682,10 @@ "dependencies": { "ansi-regex": { "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -5449,8 +3693,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -5459,8 +3701,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -5468,20 +3708,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" @@ -5489,8 +3723,6 @@ }, "supports-color": { "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -5500,8 +3732,6 @@ }, "internal-slot": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { "get-intrinsic": "^1.1.0", @@ -5509,57 +3739,12 @@ "side-channel": "^1.0.4" } }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-bigint": { "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", -<<<<<<< HEAD -======= - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -5567,8 +3752,6 @@ }, "is-boolean-object": { "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -5577,444 +3760,142 @@ }, "is-callable": { "version": "1.2.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", -<<<<<<< HEAD -======= + "version": "2.9.0", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-extglob": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { "version": "4.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-map": { - "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, "is-negative-zero": { "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-reference": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", - "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", - "dev": true, - "requires": { - "@types/estree": "0.0.39" - } - }, "is-regex": { "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, - "is-set": { - "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "is-string": { "version": "1.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, -<<<<<<< HEAD - "is-date-object": { - "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "is-symbol": { + "version": "1.0.4", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "isexe": { + "version": "2.0.0", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "js-tokens": { + "version": "4.0.0", "dev": true }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "js-yaml": { + "version": "3.14.1", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "is-module": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "jsdoctypeparser": { + "version": "6.1.0", "dev": true }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "json-parse-better-errors": { + "version": "1.0.2", "dev": true }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-pretty-compact": { + "version": "2.0.0", + "dev": true + }, + "jsts": { + "version": "1.3.0", + "dev": true + }, + "leaflet": { + "version": "1.8.0", + "dev": true + }, + "leaflet-editable": { + "version": "1.2.0", + "dev": true + }, + "levn": { + "version": "0.3.0", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, -======= - "is-symbol": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } - } - }, - "is-typed-array": { - "version": "1.1.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" - } - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - "is-weakref": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" -<<<<<<< HEAD -======= - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdoctypeparser": { - "version": "6.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz", - "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==", - "dev": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, -<<<<<<< HEAD - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", -======= - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-pretty-compact": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", - "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsts": { - "version": "1.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsts/-/jsts-1.3.0.tgz", - "integrity": "sha1-6Tp2+XrJvafUYl2dZHDw1grIDkU=", - "dev": true - }, - "leaflet": { - "version": "1.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/leaflet/-/leaflet-1.7.1.tgz", - "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==", - "dev": true - }, - "leaflet-editable": { - "version": "1.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/leaflet-editable/-/leaflet-editable-1.2.0.tgz", - "integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "load-json-file": { + "version": "2.0.0", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -6023,93 +3904,50 @@ "strip-bom": "^3.0.0" } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } + "local-pkg": { + "version": "0.4.2", + "dev": true }, "lodash": { "version": "4.17.21", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.cond": { "version": "4.5.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", "dev": true }, "lodash.find": { "version": "4.6.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", "dev": true }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "loupe": { + "version": "2.3.4", "dev": true, "requires": { - "sourcemap-codec": "^1.4.8" + "get-func-name": "^2.0.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "magic-string": { + "version": "0.25.9", "dev": true, "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "sourcemap-codec": "^1.4.8" } }, - "make-error": { - "version": "1.3.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, "memorystream": { "version": "0.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "mime": { "version": "1.6.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mimic-fn": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { "version": "3.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -6117,47 +3955,41 @@ }, "minimist": { "version": "1.2.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, + "mrmime": { + "version": "1.0.1", + "dev": true + }, "ms": { "version": "2.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "mute-stream": { "version": "0.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", "dev": true }, "natural-compare": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "nice-try": { "version": "1.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "normalize-package-data": { "version": "2.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -6168,22 +4000,12 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, "npm-run-all": { "version": "4.1.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6197,58 +4019,16 @@ "string.prototype.padend": "^3.0.0" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "object-inspect": { - "version": "1.12.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.2", "dev": true }, - "object-is": { - "version": "1.1.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" -<<<<<<< HEAD -======= - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - } - }, "object-keys": { "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -6259,14 +4039,10 @@ }, "object.entries-ponyfill": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object.entries-ponyfill/-/object.entries-ponyfill-1.0.1.tgz", - "integrity": "sha1-Kavfd8v70mVm3RqiTp2I9lQz0lY=", "dev": true }, "once": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" @@ -6274,8 +4050,6 @@ }, "onetime": { "version": "5.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" @@ -6283,14 +4057,10 @@ }, "opener": { "version": "1.5.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "optionator": { "version": "0.8.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", @@ -6301,46 +4071,12 @@ "word-wrap": "~1.2.3" } }, - "os-homedir": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/os-homedir/-/os-homedir-2.0.0.tgz", - "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==", - "dev": true - }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parent-module": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -6348,68 +4084,25 @@ }, "parse-json": { "version": "2.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { "error-ex": "^1.2.0" } }, - "parse-ms": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/parse-ms/-/parse-ms-1.0.1.tgz", - "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-network-drive": { - "version": "1.0.13", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-network-drive/-/path-is-network-drive-1.0.13.tgz", - "integrity": "sha512-Hg74mRN6mmXV+gTm3INjFK40ncAmC/Lo4qoQaSZ+GT3hZzlKdWQSqAjqyPeW0SvObP2W073WyYEBWY9d3wOm3A==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, "path-key": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { "version": "1.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, -<<<<<<< HEAD -======= - "path-strip-sep": { - "version": "1.0.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-strip-sep/-/path-strip-sep-1.0.10.tgz", - "integrity": "sha512-JpCy+8LAJQQTO1bQsb/84s1g+/Stm3h39aOpPRBQ/paMUGVPPZChLTOTKHoaCkc/6sKuF7yVsnq5Pe1S6xQGcA==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "path-type": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" @@ -6417,55 +4110,32 @@ "dependencies": { "pify": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "pathval": { + "version": "1.1.1", + "dev": true + }, + "picocolors": { + "version": "1.0.0", "dev": true }, "pidtree": { "version": "0.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true }, "pify": { "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, "platform": { "version": "1.3.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", - "dev": true - }, - "plur": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/plur/-/plur-1.0.0.tgz", - "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", "dev": true }, "portfinder": { "version": "1.0.28", - "resolved": "https://nexus3.linkurious.net/repository/npm/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { "async": "^2.6.2", @@ -6475,8 +4145,6 @@ "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -6484,70 +4152,36 @@ } } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-ms": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pretty-ms/-/pretty-ms-2.1.0.tgz", - "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", + "postcss": { + "version": "8.4.14", "dev": true, "requires": { - "is-finite": "^1.0.1", - "parse-ms": "^1.0.0", - "plur": "^1.0.0" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "prelude-ls": { + "version": "1.1.2", "dev": true }, "progress": { "version": "2.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "punycode": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, -<<<<<<< HEAD "qs": { - "version": "6.10.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", "dev": true, "requires": { "side-channel": "^1.0.4" -======= - "randombytes": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, - "re-emitter": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/re-emitter/-/re-emitter-1.1.3.tgz", - "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=", - "dev": true - }, "read-pkg": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -6557,8 +4191,6 @@ "dependencies": { "load-json-file": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -6569,8 +4201,6 @@ }, "parse-json": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -6579,132 +4209,29 @@ }, "pify": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://nexus3.linkurious.net/repository/npm/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, - "requires": { - "buffer-shims": "~1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regexp.prototype.flags": { -<<<<<<< HEAD - "version": "1.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", -======= - "version": "1.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "regexp.prototype.flags": { + "version": "1.4.3", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" -<<<<<<< HEAD -======= - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" } }, "regexpp": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "regexpu-core": { - "version": "4.8.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, "regextras": { "version": "0.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/regextras/-/regextras-0.7.1.tgz", - "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", - "dev": true - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, - "regjsparser": { - "version": "0.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - }, "reify": { "version": "0.20.12", - "resolved": "https://nexus3.linkurious.net/repository/npm/reify/-/reify-0.20.12.tgz", - "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==", "dev": true, "requires": { "acorn": "^6.1.1", @@ -6713,309 +4240,88 @@ "semver": "^5.4.1" }, "dependencies": { + "acorn": { + "version": "6.4.2", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "dev": true, + "requires": {} + }, "semver": { "version": "5.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "requires-port": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, "resolve": { - "version": "1.22.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "restore-cursor": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, - "resumer": { - "version": "0.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dev": true, - "requires": { - "through": "~2.3.4" - } - }, "rimraf": { "version": "2.6.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "robust-predicates": { -<<<<<<< HEAD - "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/robust-predicates/-/robust-predicates-2.0.4.tgz", - "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" -======= - "version": "3.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "version": "3.0.1" }, "rollup": { - "version": "1.32.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "rollup-plugin-buble": { - "version": "0.19.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz", - "integrity": "sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw==", - "dev": true, - "requires": { - "buble": "^0.19.8", - "rollup-pluginutils": "^2.3.3" - } - }, - "rollup-plugin-commonjs": { - "version": "10.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", - "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "version": "2.77.0", "dev": true, "requires": { - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0", - "rollup-pluginutils": "^2.8.1" - } - }, - "rollup-plugin-node-resolve": { - "version": "5.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", - "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", - "dev": true, - "requires": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1", - "rollup-pluginutils": "^2.8.1" - }, - "dependencies": { - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - } - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "rollup-plugin-typescript2": { - "version": "0.31.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.1.tgz", - "integrity": "sha512-sklqXuQwQX+stKi4kDfEkneVESPi3YM/2S899vfRdF9Yi40vcC50Oq4A4cSZJNXsAQE/UsBZl5fAOsBLziKmjw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.0", - "@yarn-tool/resolve-package": "^1.0.36", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.2.0" - }, - "dependencies": { - "resolve": { - "version": "1.20.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - } - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" + "fsevents": "~2.3.2" } }, "run-async": { "version": "2.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, "rxjs": { "version": "6.6.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "secure-compare": { "version": "3.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", "dev": true }, "semver": { "version": "6.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, "shebang-command": { "version": "1.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { "shebang-regex": "^1.0.0" @@ -7023,20 +4329,14 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "shell-quote": { "version": "1.7.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "side-channel": { "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -7046,14 +4346,19 @@ }, "signal-exit": { "version": "3.0.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "sirv": { + "version": "2.0.2", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, "slice-ansi": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { "ansi-styles": "^3.2.0", @@ -7063,46 +4368,20 @@ "dependencies": { "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true } } }, - "source-map": { - "version": "0.7.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "source-map-js": { + "version": "1.0.2", "dev": true }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://nexus3.linkurious.net/repository/npm/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "sourcemap-codec": { "version": "1.4.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "spdx-correct": { "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -7111,14 +4390,10 @@ }, "spdx-exceptions": { "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -7127,397 +4402,81 @@ }, "spdx-license-ids": { "version": "3.0.11", - "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "splaytree": { - "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/splaytree/-/splaytree-0.1.4.tgz", - "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" - }, - "split": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/split/-/split-1.0.0.tgz", - "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", - "dev": true, - "requires": { - "through": "2" - } + "version": "0.1.4" }, "sprintf-js": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, -<<<<<<< HEAD -======= "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } }, "string.prototype.padend": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", - "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "string.prototype.trim": { - "version": "1.2.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", - "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", + "version": "3.1.3", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - "string_decoder": { - "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "strip-ansi": { + "version": "5.2.0", "dev": true, "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "string.prototype.padend": { - "version": "3.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trim": { - "version": "1.2.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", - "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "strip-json-comments": { "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { "version": "5.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -7525,14 +4484,10 @@ }, "supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "table": { "version": "5.4.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { "ajv": "^6.10.2", @@ -7543,20 +4498,14 @@ "dependencies": { "emoji-regex": { "version": "7.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", @@ -7566,695 +4515,78 @@ } } }, - "tap-out": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-out/-/tap-out-2.1.0.tgz", - "integrity": "sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw==", - "dev": true, - "requires": { - "re-emitter": "1.1.3", - "readable-stream": "2.2.9", - "split": "1.0.0", - "trim": "0.0.1" - } - }, - "tap-parser": { - "version": "1.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-parser/-/tap-parser-1.3.2.tgz", - "integrity": "sha1-EgxQiciMPIp5PvKIhn3jIeGPjCI=", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "inherits": "~2.0.1", - "js-yaml": "^3.2.7", - "readable-stream": "^2" - } - }, - "tap-spec": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-spec/-/tap-spec-5.0.0.tgz", - "integrity": "sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw==", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "duplexer": "^0.1.1", - "figures": "^1.4.0", - "lodash": "^4.17.10", - "pretty-ms": "^2.1.0", - "repeat-string": "^1.5.2", - "tap-out": "^2.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "tap-status": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/tap-status/-/tap-status-1.0.1.tgz", - "integrity": "sha1-r7nUGYzD00BqW8OvuxxwcuiA5fk=", - "dev": true, - "requires": { - "tap-parser": "^1.1.5", - "tape": "^4.0.0" -<<<<<<< HEAD - } - }, - "tape": { - "version": "4.15.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-4.15.0.tgz", - "integrity": "sha512-SfRmG2I8QGGgJE/MCiLH8c11L5XxyUXxwK9xLRD0uiK5fehRkkSZGmR6Y1pxOt8vJ19m3sY+POTQpiaVv45/LQ==", - "dev": true, - "requires": { - "call-bind": "~1.0.2", - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "glob": "~7.2.0", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.1.4", - "minimist": "~1.2.5", - "object-inspect": "~1.12.0", - "resolve": "~1.22.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.5", - "through": "~2.3.8" -======= - }, - "dependencies": { - "deep-equal": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "object-inspect": { - "version": "1.11.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "tap-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-1.3.2.tgz", - "integrity": "sha1-EgxQiciMPIp5PvKIhn3jIeGPjCI=", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "inherits": "~2.0.1", - "js-yaml": "^3.2.7", - "readable-stream": "^2" - } - }, - "tape": { - "version": "4.14.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-4.14.0.tgz", - "integrity": "sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ==", - "dev": true, - "requires": { - "call-bind": "~1.0.2", - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "glob": "~7.1.7", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.1.3", - "minimist": "~1.2.5", - "object-inspect": "~1.11.0", - "resolve": "~1.20.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.4", - "through": "~2.3.8" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - } - } - } - } - }, - "tape": { - "version": "5.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-5.4.1.tgz", - "integrity": "sha512-7bGaJ3WnQ/CX3xOWzlR+9lNptEWoD+11gyREP8k+SYrDu2a20EifKpTmZndXn25ZRxesYHSuNtE7Fb+THcjfGA==", - "dev": true, - "requires": { - "array.prototype.every": "^1.1.3", - "call-bind": "^1.0.2", - "deep-equal": "^2.0.5", - "defined": "^1.0.0", - "dotignore": "^0.1.2", - "for-each": "^0.3.3", - "get-package-type": "^0.1.0", - "glob": "^7.2.0", - "has": "^1.0.3", - "has-dynamic-import": "^2.0.1", - "inherits": "^2.0.4", - "is-regex": "^1.1.4", - "minimist": "^1.2.5", - "object-inspect": "^1.12.0", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "resolve": "^2.0.0-next.3", - "resumer": "^0.0.0", - "string.prototype.trim": "^1.2.5", - "through": "^2.3.8" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "tape-es": { - "version": "1.2.17", - "resolved": "https://nexus3.linkurious.net/repository/npm/tape-es/-/tape-es-1.2.17.tgz", - "integrity": "sha512-rimlqa7S+4k03kLw4T7xLeYC0NZWQlwYPYbi5Cr+V9CYSmch0XhKA80uaXsVJxX0B1MQ1OQl6VxXNc7w4ZhMkQ==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "commander": "^4.1.1", - "glob": "^7.2.0", - "tape": "^4.14.0" - }, - "dependencies": { - "deep-equal": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "object-inspect": { - "version": "1.11.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "tape": { - "version": "4.14.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/tape/-/tape-4.14.0.tgz", - "integrity": "sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ==", - "dev": true, - "requires": { - "call-bind": "~1.0.2", - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "glob": "~7.1.7", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.1.3", - "minimist": "~1.2.5", - "object-inspect": "~1.11.0", - "resolve": "~1.20.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.4", - "through": "~2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - } - } - }, - "terser": { - "version": "5.10.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) - } - }, "text-table": { "version": "0.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "tinypool": { + "version": "0.2.4", + "dev": true }, "tinyqueue": { -<<<<<<< HEAD - "version": "1.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/tinyqueue/-/tinyqueue-1.2.3.tgz", - "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" -======= - "version": "2.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "version": "2.0.3" + }, + "tinyspy": { + "version": "1.0.0", + "dev": true }, "tmp": { "version": "0.0.33", - "resolved": "https://nexus3.linkurious.net/repository/npm/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "~1.0.2" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "totalist": { + "version": "3.0.0", "dev": true }, - "ts-node": { - "version": "10.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - }, - "dependencies": { - "acorn": { - "version": "8.7.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - } - } - }, - "ts-type": { - "version": "2.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/ts-type/-/ts-type-2.1.2.tgz", - "integrity": "sha512-64/2XoaipFXa/bidwXChQCSJ3VaCUVKrEaRPXiP5gLIlkPoAHfnwOMC0EWr42DsTm/+qYYuNwzxc0VQroeDs+g==", - "dev": true, - "requires": { - "tslib": "^2.3.1", - "typedarray-dts": "^1.0.0" - } - }, "tslib": { -<<<<<<< HEAD "version": "1.14.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -======= - "version": "2.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "dev": true }, "type-check": { "version": "0.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { "prelude-ls": "~1.1.2" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, -<<<<<<< HEAD - "typescript": { - "version": "3.9.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "type-detect": { + "version": "4.0.8", "dev": true }, - "uglify-js": { - "version": "3.15.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", -======= - "typedarray-dts": { - "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/typedarray-dts/-/typedarray-dts-1.0.0.tgz", - "integrity": "sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA==", + "type-fest": { + "version": "0.8.1", "dev": true }, "typescript": { - "version": "3.9.10", - "resolved": "https://nexus3.linkurious.net/repository/npm/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) + "version": "4.7.4", "dev": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" -<<<<<<< HEAD -======= - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) } }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, "union": { "version": "0.5.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dev": true, "requires": { "qs": "^6.4.0" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "upath2": { - "version": "3.1.12", - "resolved": "https://nexus3.linkurious.net/repository/npm/upath2/-/upath2-3.1.12.tgz", - "integrity": "sha512-yC3eZeCyCXFWjy7Nu4pgjLhXNYjuzuUmJiRgSSw6TJp8Emc+E4951HGPJf+bldFC5SL7oBLeNbtm1fGzXn2gxw==", - "dev": true, - "requires": { - "path-is-network-drive": "^1.0.13", - "path-strip-sep": "^1.0.10", - "tslib": "^2.3.1" - } - }, "uri-js": { "version": "4.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -8262,36 +4594,48 @@ }, "url-join": { "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "v8-compile-cache": { "version": "2.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, + "vite": { + "version": "3.0.2", + "dev": true, + "requires": { + "esbuild": "^0.14.47", + "fsevents": "~2.3.2", + "postcss": "^8.4.14", + "resolve": "^1.22.1", + "rollup": "^2.75.6" + } + }, + "vitest": { + "version": "0.18.1", + "dev": true, + "requires": { + "@types/chai": "^4.3.1", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "tinypool": "^0.2.4", + "tinyspy": "^1.0.0", + "vite": "^2.9.12 || ^3.0.0-0" + } + }, "which": { "version": "1.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -8299,8 +4643,6 @@ }, "which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -8310,79 +4652,20 @@ "is-symbol": "^1.0.3" } }, -<<<<<<< HEAD -======= - "which-collection": { - "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" - } - }, ->>>>>>> 9866718 (Rewrote to ts, tests are not running yet) "word-wrap": { "version": "1.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrappy": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write": { "version": "1.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } } } diff --git a/package.json b/package.json index 2ab98fb..ffd665a 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,28 @@ { "name": "martinez-polygon-clipping", - "version": "0.7.3", + "version": "0.7.2", "description": "Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor", - "main": "dist/index.js", - "browser": "dist/index.js", - "module": "dist/index.esm.js", - "jsnext:main": "dist/index.esm.js", - "types": "dist/types", + "main": "dist/martinex.esm.js", + "module": "dist/martinez.esm.js", + "types": "dist/types/index.d.ts", + "browser": "dist/matinez.umd.js", + "jsdelivr": "dist/martinex.umd.js", + "type": "module", "files": [ - "index.d.ts", - "index.js", "src/", "dist/" ], "scripts": { - "test2": "tape -r ts-node/register test/*.test.ts | tap-spec && npm run ts", - "test": "tape -r esm test/*.test.js | tap-spec && npm run ts", - "ts": "tsc index.d.ts", + "start": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "test": "vitest run", + "test:ui": "vitest --ui", + "test:watch": "vitest", + "types": "tsc --emitDeclarationOnly --noEmit false -d --declarationDir dist/types", "bench": "node --require reify bench.js", "lint": "eslint ./src/", - "watch": "rollup -c -w", "serve": "http-server -p 3000", - "start": "typehead serve", - "build": "npm run lint && rollup -c", "prepublishOnly": "npm run lint && npm run test && npm run build" }, "keywords": [ @@ -43,21 +43,17 @@ "author": "Alex Milevski ", "license": "MIT", "devDependencies": { - "@mapbox/typehead": "^1.0.3", "@turf/union": "^4.6.0", "@types/geojson": "^1.0.6", "@types/jsts": "^0.17.9", "@types/leaflet": "^1.7.8", "@types/leaflet-editable": "^1.2.1", "@types/node": "^17.0.8", - "@types/tape": "^4.13.2", "benchmark": "^2.1.4", - "buble": "^0.19.3", "eslint": "^6.8.0", "eslint-plugin-import-order": "^2.1.4", "eslint-plugin-jsdoc": "^20.0.2", "eslint-plugin-promise": "^3.8.0", - "esm": "^3.2.25", "geojson-project": "^1.0.0", "http-server": "^0.12.1", "json-stringify-pretty-compact": "^2.0.0", @@ -66,19 +62,10 @@ "load-json-file": "^2.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", - "rollup": "^1.28.0", - "rollup-plugin-buble": "^0.19.8", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.31.1", - "tap-spec": "^5.0.0", - "tap-status": "^1.0.1", - "tape": "^5.4.1", - "tape-es": "^1.2.17", - "ts-node": "^10.4.0", - "tslib": "^2.3.1", - "typescript": "^3.9.10" + "@vitest/ui": "^0.18.1", + "typescript": "^4.6.4", + "vite": "^3.0.0", + "vitest": "^0.18.1" }, "dependencies": { "robust-predicates": "^3.0.1", @@ -94,8 +81,5 @@ "endOfLine": "lf", "bracketSpacing": true, "printWidth": 80 - }, - "esm": { - "mode": "all" } } From a2eb903fcc5a9197b226c87c8aa449a04f4699b2 Mon Sep 17 00:00:00 2001 From: Fabian Keller Date: Wed, 2 Mar 2022 14:04:35 +0100 Subject: [PATCH 03/38] Fixed order of computeFields recomputations; fixes #124 (#125) Co-authored-by: Alexander Milevski --- src/subdivide_segments.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/subdivide_segments.ts b/src/subdivide_segments.ts index 0417cdd..6b97300 100644 --- a/src/subdivide_segments.ts +++ b/src/subdivide_segments.ts @@ -52,7 +52,7 @@ export default function subdivide( possibleIntersection(event, next.key as SweepEvent, eventQueue) === 2 ) { computeFields(event, prevEvent, operation); - computeFields(event, next.key as SweepEvent, operation); + computeFields(next.key as SweepEvent, event, operation); } } From 5cc736904d706df6cd584d81cb51cdd6a649a904 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 12 Jul 2022 22:40:07 +0200 Subject: [PATCH 04/38] Nasty esm module probem again --- package-lock.json | 1482 ++++++++++++++++++++++++++++- package.json | 3 + src/signed_area.ts | 2 +- test/segment_intersection.test.js | 44 +- test/signed_area.test.js | 13 - tsconfig.json | 11 +- 6 files changed, 1495 insertions(+), 60 deletions(-) delete mode 100644 test/signed_area.test.js diff --git a/package-lock.json b/package-lock.json index 80a6277..6383a06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,10 +15,12 @@ }, "devDependencies": { "@turf/union": "^4.6.0", + "@types/chai": "^4.3.1", "@types/geojson": "^1.0.6", "@types/jsts": "^0.17.9", "@types/leaflet": "^1.7.8", "@types/leaflet-editable": "^1.2.1", + "@types/mocha": "^9.1.1", "@types/node": "^17.0.8", "@vitest/ui": "^0.18.1", "benchmark": "^2.1.4", @@ -32,6 +34,7 @@ "leaflet": "^1.2.0", "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", + "mocha": "^10.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", "typescript": "^4.6.4", @@ -126,6 +129,13 @@ "@types/leaflet": "*" } }, + "node_modules/@types/mocha": { + "version": "9.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "17.0.45", "dev": true, @@ -136,6 +146,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true, + "license": "ISC" + }, "node_modules/@vitest/ui": { "version": "0.18.1", "dev": true, @@ -178,6 +195,16 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "dev": true, @@ -222,6 +249,20 @@ "node": ">=4" } }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/argparse": { "version": "1.0.10", "dev": true, @@ -276,6 +317,16 @@ "platform": "^1.3.3" } }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "dev": true, @@ -285,6 +336,26 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, "node_modules/builtin-modules": { "version": "1.1.1", "dev": true, @@ -313,6 +384,19 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/chai": { "version": "4.3.6", "dev": true, @@ -356,6 +440,34 @@ "node": "*" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "dev": true, @@ -375,6 +487,41 @@ "node": ">= 10" } }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/color-convert": { "version": "1.9.3", "dev": true, @@ -456,6 +603,19 @@ } } }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-eql": { "version": "3.0.1", "dev": true, @@ -487,6 +647,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/doctrine": { "version": "3.0.0", "dev": true, @@ -626,6 +796,16 @@ "node": ">=12" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "1.0.5", "dev": true, @@ -900,6 +1080,46 @@ "node": ">=4" } }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "2.0.1", "dev": true, @@ -942,6 +1162,21 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "dev": true, @@ -982,6 +1217,16 @@ "dev": true, "license": "MIT" }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-func-name": { "version": "2.0.0", "dev": true, @@ -1371,6 +1616,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "dev": true, @@ -1460,6 +1718,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-number-object": { "version": "1.0.7", "dev": true, @@ -1474,6 +1742,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-regex": { "version": "1.1.4", "dev": true, @@ -1528,6 +1806,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "dev": true, @@ -1647,6 +1938,22 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "dev": true, @@ -1662,57 +1969,150 @@ "dev": true, "license": "MIT" }, - "node_modules/loupe": { - "version": "2.3.4", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { - "get-func-name": "^2.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/magic-string": { - "version": "0.25.9", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "sourcemap-codec": "^1.4.8" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/memorystream": { - "version": "0.3.1", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/mime": { - "version": "1.6.0", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/minimatch": { - "version": "3.1.2", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "has-flag": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=8" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/minimist": { @@ -1731,6 +2131,184 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mocha": { + "version": "10.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/mrmime": { "version": "1.0.1", "dev": true, @@ -1789,6 +2367,16 @@ "semver": "bin/semver" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-run-all": { "version": "4.1.5", "dev": true, @@ -1904,6 +2492,38 @@ "node": ">=0.10.0" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parent-module": { "version": "1.0.1", "dev": true, @@ -1926,6 +2546,16 @@ "node": ">=0.10.0" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "dev": true, @@ -1979,6 +2609,19 @@ "dev": true, "license": "ISC" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/pidtree": { "version": "0.3.1", "dev": true, @@ -2084,6 +2727,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "dev": true, @@ -2131,6 +2784,19 @@ "node": ">=4" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", "dev": true, @@ -2204,6 +2870,16 @@ "semver": "bin/semver" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/requires-port": { "version": "1.0.0", "dev": true, @@ -2293,6 +2969,27 @@ "npm": ">=2.0.0" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safer-buffer": { "version": "2.1.2", "dev": true, @@ -2311,6 +3008,16 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shebang-command": { "version": "1.2.0", "dev": true, @@ -2644,6 +3351,19 @@ "node": ">=0.6.0" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/totalist": { "version": "3.0.0", "dev": true, @@ -2870,6 +3590,90 @@ "node": ">=0.10.0" } }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "dev": true, @@ -2885,6 +3689,74 @@ "engines": { "node": ">=4" } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://nexus3.linkurious.net/repository/npm/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -2955,6 +3827,12 @@ "@types/leaflet": "*" } }, + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true + }, "@types/node": { "version": "17.0.45", "dev": true @@ -2963,6 +3841,12 @@ "version": "4.6.18", "dev": true }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "@vitest/ui": { "version": "0.18.1", "dev": true, @@ -2989,6 +3873,12 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-escapes": { "version": "4.3.2", "dev": true, @@ -3010,7 +3900,17 @@ "version": "3.2.1", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "argparse": { @@ -3051,6 +3951,12 @@ "platform": "^1.3.3" } }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "dev": true, @@ -3059,6 +3965,21 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "builtin-modules": { "version": "1.1.1", "dev": true @@ -3075,6 +3996,12 @@ "version": "3.1.0", "dev": true }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, "chai": { "version": "4.3.6", "dev": true, @@ -3105,6 +4032,22 @@ "version": "1.0.2", "dev": true }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "cli-cursor": { "version": "3.1.0", "dev": true, @@ -3116,6 +4059,34 @@ "version": "3.0.0", "dev": true }, + "cliui": { + "version": "7.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "color-convert": { "version": "1.9.3", "dev": true, @@ -3167,6 +4138,12 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, "deep-eql": { "version": "3.0.1", "dev": true, @@ -3186,6 +4163,12 @@ "object-keys": "^1.1.1" } }, + "diff": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, "doctrine": { "version": "3.0.0", "dev": true, @@ -3283,6 +4266,12 @@ "dev": true, "optional": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "dev": true @@ -3462,6 +4451,31 @@ "flat-cache": "^2.0.1" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "2.0.1", "dev": true, @@ -3483,6 +4497,13 @@ "version": "1.0.0", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "dev": true @@ -3509,6 +4530,12 @@ "version": "1.0.1", "dev": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "get-func-name": { "version": "2.0.0", "dev": true @@ -3750,6 +4777,15 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "dev": true, @@ -3795,6 +4831,12 @@ "version": "2.0.2", "dev": true }, + "is-number": { + "version": "7.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-number-object": { "version": "1.0.7", "dev": true, @@ -3802,6 +4844,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "is-regex": { "version": "1.1.4", "dev": true, @@ -3831,6 +4879,12 @@ "has-symbols": "^1.0.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "dev": true, @@ -3908,6 +4962,15 @@ "version": "0.4.2", "dev": true }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "dev": true @@ -3920,6 +4983,67 @@ "version": "4.6.0", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "loupe": { "version": "2.3.4", "dev": true, @@ -3964,6 +5088,131 @@ "minimist": "^1.2.6" } }, + "mocha": { + "version": "10.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "mrmime": { "version": "1.0.1", "dev": true @@ -4004,6 +5253,12 @@ } } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "npm-run-all": { "version": "4.1.5", "dev": true, @@ -4075,6 +5330,24 @@ "version": "1.0.2", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "parent-module": { "version": "1.0.1", "dev": true, @@ -4089,6 +5362,12 @@ "error-ex": "^1.2.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "dev": true @@ -4122,6 +5401,12 @@ "version": "1.0.0", "dev": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "pidtree": { "version": "0.3.1", "dev": true @@ -4180,6 +5465,15 @@ "side-channel": "^1.0.4" } }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "read-pkg": { "version": "3.0.0", "dev": true, @@ -4213,6 +5507,15 @@ } } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "regexp.prototype.flags": { "version": "1.4.3", "dev": true, @@ -4255,6 +5558,12 @@ } } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, "requires-port": { "version": "1.0.0", "dev": true @@ -4308,6 +5617,12 @@ "tslib": "^1.9.0" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, "safer-buffer": { "version": "2.1.2", "dev": true @@ -4320,6 +5635,15 @@ "version": "6.3.0", "dev": true }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "shebang-command": { "version": "1.2.0", "dev": true, @@ -4541,6 +5865,15 @@ "os-tmpdir": "~1.0.2" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "totalist": { "version": "3.0.0", "dev": true @@ -4656,6 +5989,64 @@ "version": "1.2.3", "dev": true }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "wrappy": { "version": "1.0.2", "dev": true @@ -4666,6 +6057,51 @@ "requires": { "mkdirp": "^0.5.1" } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://nexus3.linkurious.net/repository/npm/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index ffd665a..d1f7a40 100644 --- a/package.json +++ b/package.json @@ -44,10 +44,12 @@ "license": "MIT", "devDependencies": { "@turf/union": "^4.6.0", + "@types/chai": "^4.3.1", "@types/geojson": "^1.0.6", "@types/jsts": "^0.17.9", "@types/leaflet": "^1.7.8", "@types/leaflet-editable": "^1.2.1", + "@types/mocha": "^9.1.1", "@types/node": "^17.0.8", "benchmark": "^2.1.4", "eslint": "^6.8.0", @@ -60,6 +62,7 @@ "leaflet": "^1.2.0", "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", + "mocha": "^10.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", "@vitest/ui": "^0.18.1", diff --git a/src/signed_area.ts b/src/signed_area.ts index c86a517..ed7c101 100644 --- a/src/signed_area.ts +++ b/src/signed_area.ts @@ -1,4 +1,4 @@ -import { orient2d } from 'robust-predicates'; +import orient2d from 'robust-predicates/umd/orient2d'; import { Point } from './types'; /** diff --git a/test/segment_intersection.test.js b/test/segment_intersection.test.js index 0ed9697..29dba52 100644 --- a/test/segment_intersection.test.js +++ b/test/segment_intersection.test.js @@ -1,47 +1,47 @@ import tap from 'tape'; -import intersection from '../dist/segment_intersection'; +import intersection from '../src/segment_intersection'; -tap.test('intersection', (t) => { +tap('intersection', (t) => { t.deepEqual( - intersection([0, 0], [1, 1], [1, 0], [2, 2]), + intersection([0, 0], [1, 1], [1, 0], [2, 2], false), null, 'null if no intersections' ); t.deepEqual( - intersection([0, 0], [1, 1], [1, 0], [10, 2]), + intersection([0, 0], [1, 1], [1, 0], [10, 2], false), null, 'null if no intersections' ); t.deepEqual( - intersection([2, 2], [3, 3], [0, 6], [2, 4]), + intersection([2, 2], [3, 3], [0, 6], [2, 4], false), null, 'null if no intersections' ); t.deepEqual( - intersection([0, 0], [1, 1], [1, 0], [0, 1]), + intersection([0, 0], [1, 1], [1, 0], [0, 1], false), [[0.5, 0.5]], '1 intersection' ); t.deepEqual( - intersection([0, 0], [1, 1], [0, 1], [0, 0]), + intersection([0, 0], [1, 1], [0, 1], [0, 0], false), [[0, 0]], 'shared point 1' ); t.deepEqual( - intersection([0, 0], [1, 1], [0, 1], [1, 1]), + intersection([0, 0], [1, 1], [0, 1], [1, 1], false), [[1, 1]], 'shared point 2' ); t.deepEqual( - intersection([0, 0], [1, 1], [0.5, 0.5], [1, 0]), + intersection([0, 0], [1, 1], [0.5, 0.5], [1, 0], false), [[0.5, 0.5]], 'T-crossing' ); t.deepEqual( - intersection([0, 0], [10, 10], [1, 1], [5, 5]), + intersection([0, 0], [10, 10], [1, 1], [5, 5], false), [ [1, 1], [5, 5] @@ -49,7 +49,7 @@ tap.test('intersection', (t) => { 'full overlap' ); t.deepEqual( - intersection([1, 1], [10, 10], [1, 1], [5, 5]), + intersection([1, 1], [10, 10], [1, 1], [5, 5], false), [ [1, 1], [5, 5] @@ -57,7 +57,7 @@ tap.test('intersection', (t) => { 'shared point + overlap' ); t.deepEqual( - intersection([3, 3], [10, 10], [0, 0], [5, 5]), + intersection([3, 3], [10, 10], [0, 0], [5, 5], false), [ [3, 3], [5, 5] @@ -65,7 +65,7 @@ tap.test('intersection', (t) => { 'mutual overlap' ); t.deepEqual( - intersection([0, 0], [1, 1], [0, 0], [1, 1]), + intersection([0, 0], [1, 1], [0, 0], [1, 1], false), [ [0, 0], [1, 1] @@ -73,7 +73,7 @@ tap.test('intersection', (t) => { 'full overlap' ); t.deepEqual( - intersection([1, 1], [0, 0], [0, 0], [1, 1]), + intersection([1, 1], [0, 0], [0, 0], [1, 1], false), [ [1, 1], [0, 0] @@ -82,28 +82,32 @@ tap.test('intersection', (t) => { ); t.deepEqual( - intersection([0, 0], [1, 1], [1, 1], [2, 2]), + intersection([0, 0], [1, 1], [1, 1], [2, 2], false), [[1, 1]], 'collinear, shared point' ); t.deepEqual( - intersection([1, 1], [0, 0], [1, 1], [2, 2]), + intersection([1, 1], [0, 0], [1, 1], [2, 2], false), [[1, 1]], 'collinear, shared other point' ); t.deepEqual( - intersection([0, 0], [1, 1], [2, 2], [4, 4]), + intersection([0, 0], [1, 1], [2, 2], [4, 4], false), null, 'collinear, no overlap' ); - t.deepEqual(intersection([0, 0], [1, 1], [0, -1], [1, 0]), null, 'parallel'); t.deepEqual( - intersection([1, 1], [0, 0], [0, -1], [1, 0]), + intersection([0, 0], [1, 1], [0, -1], [1, 0], false), + null, + 'parallel' + ); + t.deepEqual( + intersection([1, 1], [0, 0], [0, -1], [1, 0], false), null, 'parallel, orientation' ); t.deepEqual( - intersection([0, -1], [1, 0], [0, 0], [1, 1]), + intersection([0, -1], [1, 0], [0, 0], [1, 1], false), null, 'parallel, position' ); diff --git a/test/signed_area.test.js b/test/signed_area.test.js deleted file mode 100644 index 11ca45d..0000000 --- a/test/signed_area.test.js +++ /dev/null @@ -1,13 +0,0 @@ -import tap from 'tape'; -import signedArea from '../src/signed_area'; - -tap('analytical signed area', (t) => { - t.equals(signedArea([0, 0], [0, 1], [1, 1]), -1, 'negative area'); - t.equals(signedArea([0, 1], [0, 0], [1, 0]), 1, 'positive area'); - t.equals(signedArea([0, 0], [1, 1], [2, 2]), 0, 'collinear, 0 area'); - - t.equals(signedArea([-1, 0], [2, 3], [0, 1]), 0, 'point on segment'); - t.equals(signedArea([2, 3], [-1, 0], [0, 1]), 0, 'point on segment'); - - t.end(); -}); diff --git a/tsconfig.json b/tsconfig.json index 7541745..3f60584 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,9 @@ { "compilerOptions": { "target": "es2016", - "moduleResolution": "node", "allowJs": true, + "module": "commonjs", + "moduleResolution": "node", "esModuleInterop": true, "allowSyntheticDefaultImports": true, "sourceMap": true, @@ -21,9 +22,13 @@ "skipLibCheck": true, "outDir": "./dist/", - "types": ["node"], + "types": ["node", "mocha"], "lib": ["ES6", "DOM"] }, + "typeRoots": ["./src/types"], "include": ["src/**/*.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules"], + "ts-node": { + "esm": true + } } From fb5fc84a57e1c96faa718aeae29d16608e098d14 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 12 Jul 2022 22:40:23 +0200 Subject: [PATCH 05/38] typings --- src/types/robust-predicates/index.d.ts | 10 ++++++++++ test/signed_area.test.ts | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 src/types/robust-predicates/index.d.ts create mode 100644 test/signed_area.test.ts diff --git a/src/types/robust-predicates/index.d.ts b/src/types/robust-predicates/index.d.ts new file mode 100644 index 0000000..1a056c8 --- /dev/null +++ b/src/types/robust-predicates/index.d.ts @@ -0,0 +1,10 @@ +declare module 'robust-predicates/umd/orient2d' { + export default function orient2d( + x1: number, + y1: number, + x2: number, + y2: number, + x3: number, + y3: number + ): number; +} diff --git a/test/signed_area.test.ts b/test/signed_area.test.ts new file mode 100644 index 0000000..0944a83 --- /dev/null +++ b/test/signed_area.test.ts @@ -0,0 +1,23 @@ +// import tap from 'tape'; +import signedArea from '../src/signed_area'; +import { assert } from 'chai'; + +// tap('analytical signed area', (t) => { +// t.equals(signedArea([0, 0], [0, 1], [1, 1]), -1, 'negative area'); +// t.equals(signedArea([0, 1], [0, 0], [1, 0]), 1, 'positive area'); +// t.equals(signedArea([0, 0], [1, 1], [2, 2]), 0, 'collinear, 0 area'); + +// t.equals(signedArea([-1, 0], [2, 3], [0, 1]), 0, 'point on segment'); +// t.equals(signedArea([2, 3], [-1, 0], [0, 1]), 0, 'point on segment'); + +// t.end(); +// }); + +describe('signed area', () => { + console.log(signedArea); + //assert.equal(signedArea([0, 0], [0, 1], [1, 1]), -1, 'negative area'); + // t.equals(signedArea([0, 1], [0, 0], [1, 0]), 1, 'positive area'); + // t.equals(signedArea([0, 0], [1, 1], [2, 2]), 0, 'collinear, 0 area'); + // t.equals(signedArea([-1, 0], [2, 3], [0, 1]), 0, 'point on segment'); + // t.equals(signedArea([2, 3], [-1, 0], [0, 1]), 0, 'point on segment'); +}); From 0de8750d588902aa319fab53299f7144d145de4f Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 18 Jul 2022 23:13:11 +0200 Subject: [PATCH 06/38] Migrating to vite --- demo/css/styles.css | 15 +++--- demo/index.html | 41 +++++++++++---- demo/js/index.js | 108 ++++++++++++++++++++++++--------------- demo/orthogonal.html | 22 +++++--- package-lock.json | 31 +---------- package.json | 3 -- src/debug_utils.ts | 41 ++++++++------- src/signed_area.ts | 2 +- test/signed_area.test.ts | 28 ++++------ tsconfig.json | 44 ++++++---------- vite.config.js | 22 ++++++++ 11 files changed, 189 insertions(+), 168 deletions(-) create mode 100644 vite.config.js diff --git a/demo/css/styles.css b/demo/css/styles.css index 8f01df1..b38c48a 100644 --- a/demo/css/styles.css +++ b/demo/css/styles.css @@ -1,4 +1,5 @@ -html, body, +html, +body, #image-map { width: 100%; height: 100%; @@ -9,11 +10,9 @@ html, body, #diff-map, #union-map, #intersection-map { - display: none; - width: 400px; - height: 400px; - margin-right: 10px; - float: left; + display: none; + width: 400px; + height: 400px; + margin-right: 10px; + float: left; } - -@import url("../../node_modules/leaflet-draw/dist/leaflet.draw.css") screen; diff --git a/demo/index.html b/demo/index.html index 310208b..8d79447 100644 --- a/demo/index.html +++ b/demo/index.html @@ -1,23 +1,42 @@ - + - - + + Martinez Clipping - + - + - + + - + - - - + + - + diff --git a/demo/js/index.js b/demo/js/index.js index 4af1f22..721492f 100644 --- a/demo/js/index.js +++ b/demo/js/index.js @@ -1,18 +1,28 @@ import './coordinates'; import './polygoncontrol'; import './booleanopcontrol'; -import * as martinez from '../../index'; +import * as martinez from '../../src'; // import * as martinez from '../../dist/martinez.min'; let mode = window.location.hash.substring(1); let path = '../test/fixtures/'; -const ext = '.geojson'; +const ext = '.geojson'; let file; let files = [ - 'asia', 'trapezoid-box', 'canada', 'horseshoe', 'hourglasses', 'overlap_y', - 'polygon_trapezoid_edge_overlap', 'touching_boxes', 'two_pointed_triangles', - 'hole_cut', 'overlapping_segments', 'overlap_loop', 'disjoint_boxes' + 'asia', + 'trapezoid-box', + 'canada', + 'horseshoe', + 'hourglasses', + 'overlap_y', + 'polygon_trapezoid_edge_overlap', + 'touching_boxes', + 'two_pointed_triangles', + 'hole_cut', + 'overlapping_segments', + 'overlap_loop', + 'disjoint_boxes' ]; switch (mode) { @@ -92,12 +102,11 @@ switch (mode) { console.log(mode); - var OPERATIONS = { INTERSECTION: 0, - UNION: 1, - DIFFERENCE: 2, - XOR: 3 + UNION: 1, + DIFFERENCE: 2, + XOR: 3 }; var div = document.createElement('div'); @@ -106,36 +115,43 @@ div.style.width = div.style.height = '100%'; document.body.appendChild(div); // create the slippy map -var map = window.map = L.map('image-map', { +var map = (window.map = L.map('image-map', { minZoom: 1, maxZoom: 20, center: [0, 0], zoom: 2, - crs: mode === 'geo' ? L.CRS.EPSG4326 : L.extend({}, L.CRS.Simple, { - transformation: new L.Transformation(1/8, 0, -1/8, 0) - }), + crs: + mode === 'geo' + ? L.CRS.EPSG4326 + : L.extend({}, L.CRS.Simple, { + transformation: new L.Transformation(1 / 8, 0, -1 / 8, 0) + }), editable: true -}); - -map.addControl(new L.NewPolygonControl({ - callback: map.editTools.startPolygon })); + +map.addControl( + new L.NewPolygonControl({ + callback: map.editTools.startPolygon + }) +); map.addControl(new L.Coordinates()); -map.addControl(new L.BooleanControl({ - callback: run, - clear: clear -})); +map.addControl( + new L.BooleanControl({ + callback: run, + clear: clear + }) +); -var drawnItems = window.drawnItems = L.geoJson().addTo(map); +var drawnItems = (window.drawnItems = L.geoJson().addTo(map)); var rawData = null; function loadData(path) { console.log(path); fetch(path) .then((r) => r.json()) .then((json) => { - drawnItems.addData(json); - rawData = json; - map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); + drawnItems.addData(json); + rawData = json; + map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); }); } @@ -148,12 +164,13 @@ function clear() { var reader = new jsts.io.GeoJSONReader(); var writer = new jsts.io.GeoJSONWriter(); -function getClippingPoly (layers) { - if (rawData !== null && rawData.features.length > 1) return rawData.features[1]; +function getClippingPoly(layers) { + if (rawData !== null && rawData.features.length > 1) + return rawData.features[1]; return layers[1].toGeoJSON(); } -function run (op) { +function run(op) { var layers = drawnItems.getLayers(); if (layers.length < 2) return; var subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); @@ -171,18 +188,22 @@ function run (op) { operation = martinez.union; } else if (op === OPERATIONS.DIFFERENCE) { operation = martinez.diff; - } else if (op === 5) { // B - A + } else if (op === 5) { + // B - A operation = martinez.diff; var temp = subject; - subject = clipping; + subject = clipping; clipping = temp; } else { operation = martinez.xor; } console.time('martinez'); - var result = operation(subject.geometry.coordinates, clipping.geometry.coordinates); + var result = operation( + subject.geometry.coordinates, + clipping.geometry.coordinates + ); console.timeEnd('martinez'); console.log('result', result); @@ -191,14 +212,14 @@ function run (op) { if (result !== null) { results.addData({ - 'type': 'Feature', - 'geometry': { - 'type': 'MultiPolygon', - 'coordinates': result + type: 'Feature', + geometry: { + type: 'MultiPolygon', + coordinates: result } }); - setTimeout(function() { + setTimeout(() => { console.time('jsts'); var s = reader.read(subject); var c = reader.read(clipping); @@ -219,22 +240,25 @@ function run (op) { } } -map.on('editable:created', function(evt) { +map.on('editable:created', (evt) => { drawnItems.addLayer(evt.layer); - evt.layer.on('click', function(e) { - if ((e.originalEvent.ctrlKey || e.originalEvent.metaKey) && this.editEnabled()) { + evt.layer.on('click', function (e) { + if ( + (e.originalEvent.ctrlKey || e.originalEvent.metaKey) && + this.editEnabled() + ) { this.editor.newHole(e.latlng); } }); }); -var results = window.results = L.geoJson(null, { - style: function(feature) { +var results = (window.results = L.geoJson(null, { + style: function (feature) { return { color: 'red', weight: 1 }; } -}).addTo(map); +}).addTo(map)); loadData(path + file); diff --git a/demo/orthogonal.html b/demo/orthogonal.html index 14206be..5956622 100644 --- a/demo/orthogonal.html +++ b/demo/orthogonal.html @@ -1,15 +1,21 @@ - + - - + + Martinez Clipping - - - - + + + - + diff --git a/package-lock.json b/package-lock.json index 6383a06..d3074d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,12 +15,10 @@ }, "devDependencies": { "@turf/union": "^4.6.0", - "@types/chai": "^4.3.1", "@types/geojson": "^1.0.6", "@types/jsts": "^0.17.9", "@types/leaflet": "^1.7.8", "@types/leaflet-editable": "^1.2.1", - "@types/mocha": "^9.1.1", "@types/node": "^17.0.8", "@vitest/ui": "^0.18.1", "benchmark": "^2.1.4", @@ -34,7 +32,6 @@ "leaflet": "^1.2.0", "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", - "mocha": "^10.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", "typescript": "^4.6.4", @@ -1162,21 +1159,6 @@ "dev": true, "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "dev": true, @@ -3828,8 +3810,7 @@ } }, "@types/mocha": { - "version": "9.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/mocha/-/mocha-9.1.1.tgz", + "version": "https://nexus3.linkurious.net/repository/npm/@types/mocha/-/mocha-9.1.1.tgz", "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, @@ -4497,13 +4478,6 @@ "version": "1.0.0", "dev": true }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, "function-bind": { "version": "1.1.1", "dev": true @@ -5089,8 +5063,7 @@ } }, "mocha": { - "version": "10.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/mocha/-/mocha-10.0.0.tgz", + "version": "https://nexus3.linkurious.net/repository/npm/mocha/-/mocha-10.0.0.tgz", "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, "requires": { diff --git a/package.json b/package.json index d1f7a40..ffd665a 100644 --- a/package.json +++ b/package.json @@ -44,12 +44,10 @@ "license": "MIT", "devDependencies": { "@turf/union": "^4.6.0", - "@types/chai": "^4.3.1", "@types/geojson": "^1.0.6", "@types/jsts": "^0.17.9", "@types/leaflet": "^1.7.8", "@types/leaflet-editable": "^1.2.1", - "@types/mocha": "^9.1.1", "@types/node": "^17.0.8", "benchmark": "^2.1.4", "eslint": "^6.8.0", @@ -62,7 +60,6 @@ "leaflet": "^1.2.0", "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", - "mocha": "^10.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", "@vitest/ui": "^0.18.1", diff --git a/src/debug_utils.ts b/src/debug_utils.ts index 674a50c..f99b334 100644 --- a/src/debug_utils.ts +++ b/src/debug_utils.ts @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable */ export function renderPoints(possiblePoints, prop) { var map = window.map; @@ -9,42 +10,46 @@ export function renderPoints(possiblePoints, prop) { possiblePoints.forEach(function (e) { var point = L.circleMarker([e.point[1], e.point[0]], { radius: Math.floor(5 + Math.random() * 10), - color: e[prop] ? 'green' : 'gray', + color: e[prop] ? 'green' : 'gray', opacity: e[prop] ? 0.5 : 0.1, weight: 1 }).addTo(points); }); -}; +} export function renderSweepLine(sweepLine, pos, event) { var map = window.map; if (!map) return; - if (window.sws) window.sws.forEach(function (p) { - map.removeLayer(p); - }); + if (window.sws) + window.sws.forEach(function (p) { + map.removeLayer(p); + }); window.sws = []; sweepLine.forEach(function (e) { - var poly = L.polyline([ - e.key.point.slice().reverse(), - e.key.otherEvent.point.slice().reverse() - ], {color: 'green'}).addTo(map); + var poly = L.polyline( + [e.key.point.slice().reverse(), e.key.otherEvent.point.slice().reverse()], + { color: 'green' } + ).addTo(map); window.sws.push(poly); }); if (window.vt) map.removeLayer(window.vt); var v = pos.slice(); var b = map.getBounds(); - window.vt = L.polyline([ - [b.getNorth(), v[0]], - [b.getSouth(), v[0]] - ], {color: 'green', weight: 1}).addTo(map); + window.vt = L.polyline( + [ + [b.getNorth(), v[0]], + [b.getSouth(), v[0]] + ], + { color: 'green', weight: 1 } + ).addTo(map); if (window.ps) map.removeLayer(window.ps); - window.ps = L.polyline([ - event.point.slice().reverse(), - event.otherEvent.point.slice().reverse() - ], {color: 'black', weight: 9, opacity: 0.4}).addTo(map); + window.ps = L.polyline( + [event.point.slice().reverse(), event.otherEvent.point.slice().reverse()], + { color: 'black', weight: 9, opacity: 0.4 } + ).addTo(map); debugger; -}; +} /* eslint-enable */ diff --git a/src/signed_area.ts b/src/signed_area.ts index ed7c101..c86a517 100644 --- a/src/signed_area.ts +++ b/src/signed_area.ts @@ -1,4 +1,4 @@ -import orient2d from 'robust-predicates/umd/orient2d'; +import { orient2d } from 'robust-predicates'; import { Point } from './types'; /** diff --git a/test/signed_area.test.ts b/test/signed_area.test.ts index 0944a83..f07303a 100644 --- a/test/signed_area.test.ts +++ b/test/signed_area.test.ts @@ -1,23 +1,13 @@ -// import tap from 'tape'; +import { assert, describe, expect, it } from 'vitest'; import signedArea from '../src/signed_area'; -import { assert } from 'chai'; -// tap('analytical signed area', (t) => { -// t.equals(signedArea([0, 0], [0, 1], [1, 1]), -1, 'negative area'); -// t.equals(signedArea([0, 1], [0, 0], [1, 0]), 1, 'positive area'); -// t.equals(signedArea([0, 0], [1, 1], [2, 2]), 0, 'collinear, 0 area'); +describe('Signed area', () => { + it('analytical signed area', () => { + expect(signedArea([0, 0], [0, 1], [1, 1])).toEqual(-1); + expect(signedArea([0, 1], [0, 0], [1, 0]), 'positive area').toEqual(1); -// t.equals(signedArea([-1, 0], [2, 3], [0, 1]), 0, 'point on segment'); -// t.equals(signedArea([2, 3], [-1, 0], [0, 1]), 0, 'point on segment'); - -// t.end(); -// }); - -describe('signed area', () => { - console.log(signedArea); - //assert.equal(signedArea([0, 0], [0, 1], [1, 1]), -1, 'negative area'); - // t.equals(signedArea([0, 1], [0, 0], [1, 0]), 1, 'positive area'); - // t.equals(signedArea([0, 0], [1, 1], [2, 2]), 0, 'collinear, 0 area'); - // t.equals(signedArea([-1, 0], [2, 3], [0, 1]), 0, 'point on segment'); - // t.equals(signedArea([2, 3], [-1, 0], [0, 1]), 0, 'point on segment'); + expect(signedArea([0, 0], [1, 1], [2, 2]), 'collinear, 0 area').toEqual(0); + expect(signedArea([-1, 0], [2, 3], [0, 1]), 'point on segment').toEqual(0); + expect(signedArea([2, 3], [-1, 0], [0, 1]), 'point on segment').toEqual(0); + }); }); diff --git a/tsconfig.json b/tsconfig.json index 3f60584..eb1956f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,34 +1,20 @@ { "compilerOptions": { - "target": "es2016", - "allowJs": true, - "module": "commonjs", - "moduleResolution": "node", - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "sourceMap": true, - - "declaration": true, - "declarationDir": "dist/types", + "target": "ES2016", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "Node", "strict": true, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - "strictNullChecks": true /* Enable strict null checks. */, - "strictFunctionTypes": true /* Enable strict checking of function types. */, - "noUnusedLocals": false /* Report errors on unused locals. */, - "noUnusedParameters": true /* Report errors on unused parameters. */, - "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, - "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, - "importHelpers": true, - "skipLibCheck": true, - - "outDir": "./dist/", - "types": ["node", "mocha"], - "lib": ["ES6", "DOM"] + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "noEmit": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "skipLibCheck": true }, - "typeRoots": ["./src/types"], - "include": ["src/**/*.ts"], - "exclude": ["node_modules"], - "ts-node": { - "esm": true - } + "include": ["src"] } diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..38fdcb6 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,22 @@ +// vite.config.js +import { resolve } from 'path'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + build: { + lib: { + entry: resolve(__dirname, 'src/index.ts'), + name: 'martinez', + fileName: (format) => `martinez.${format}.js` + }, + rollupOptions: { + input: { + main: resolve(__dirname, 'demo/index.html') + //orthogonal: resolve(__dirname, 'demo/orthogonal.html') + } + } + }, + test: { + include: ['test/**/*.test.ts'] + } +}); From 4fc1f5c43feb5a0c3e1e2e077c3b8126e778ff31 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 18 Jul 2022 23:24:16 +0200 Subject: [PATCH 07/38] segment intersection test --- ...n.test.js => segment_intersection.test.ts} | 177 ++++++++---------- 1 file changed, 83 insertions(+), 94 deletions(-) rename test/{segment_intersection.test.js => segment_intersection.test.ts} (69%) diff --git a/test/segment_intersection.test.js b/test/segment_intersection.test.ts similarity index 69% rename from test/segment_intersection.test.js rename to test/segment_intersection.test.ts index 29dba52..d9cee5b 100644 --- a/test/segment_intersection.test.js +++ b/test/segment_intersection.test.ts @@ -1,155 +1,144 @@ -import tap from 'tape'; +import { expect, test } from 'vitest'; import intersection from '../src/segment_intersection'; -tap('intersection', (t) => { - t.deepEqual( +test('intersection', (t) => { + expect( intersection([0, 0], [1, 1], [1, 0], [2, 2], false), - null, 'null if no intersections' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([0, 0], [1, 1], [1, 0], [10, 2], false), - null, 'null if no intersections' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([2, 2], [3, 3], [0, 6], [2, 4], false), - null, 'null if no intersections' - ); + ).toBeNull(); - t.deepEqual( + expect( intersection([0, 0], [1, 1], [1, 0], [0, 1], false), - [[0.5, 0.5]], '1 intersection' - ); - t.deepEqual( + ).toStrictEqual([[0.5, 0.5]]); + + expect( intersection([0, 0], [1, 1], [0, 1], [0, 0], false), - [[0, 0]], 'shared point 1' - ); - t.deepEqual( + ).toStrictEqual([[0, 0]]); + + expect( intersection([0, 0], [1, 1], [0, 1], [1, 1], false), - [[1, 1]], 'shared point 2' - ); + ).toStrictEqual([[1, 1]]); - t.deepEqual( + expect( intersection([0, 0], [1, 1], [0.5, 0.5], [1, 0], false), - [[0.5, 0.5]], 'T-crossing' - ); + ).toStrictEqual([[0.5, 0.5]]); - t.deepEqual( + expect( intersection([0, 0], [10, 10], [1, 1], [5, 5], false), - [ - [1, 1], - [5, 5] - ], 'full overlap' - ); - t.deepEqual( + ).toStrictEqual([ + [1, 1], + [5, 5] + ]); + + expect( intersection([1, 1], [10, 10], [1, 1], [5, 5], false), - [ - [1, 1], - [5, 5] - ], 'shared point + overlap' - ); - t.deepEqual( + ).toStrictEqual([ + [1, 1], + [5, 5] + ]); + + expect( intersection([3, 3], [10, 10], [0, 0], [5, 5], false), - [ - [3, 3], - [5, 5] - ], 'mutual overlap' - ); - t.deepEqual( + ).toStrictEqual([ + [3, 3], + [5, 5] + ]); + + expect( intersection([0, 0], [1, 1], [0, 0], [1, 1], false), - [ - [0, 0], - [1, 1] - ], 'full overlap' - ); - t.deepEqual( + ).toStrictEqual([ + [0, 0], + [1, 1] + ]); + + expect( intersection([1, 1], [0, 0], [0, 0], [1, 1], false), - [ - [1, 1], - [0, 0] - ], 'full overlap, orientation' - ); + ).toStrictEqual([ + [1, 1], + [0, 0] + ]); - t.deepEqual( + expect( intersection([0, 0], [1, 1], [1, 1], [2, 2], false), - [[1, 1]], 'collinear, shared point' - ); - t.deepEqual( + ).toStrictEqual([[1, 1]]); + + expect( intersection([1, 1], [0, 0], [1, 1], [2, 2], false), - [[1, 1]], + 'collinear, shared other point' - ); - t.deepEqual( + ).toStrictEqual([[1, 1]]); + expect( intersection([0, 0], [1, 1], [2, 2], [4, 4], false), - null, 'collinear, no overlap' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([0, 0], [1, 1], [0, -1], [1, 0], false), - null, 'parallel' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([1, 1], [0, 0], [0, -1], [1, 0], false), - null, 'parallel, orientation' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([0, -1], [1, 0], [0, 0], [1, 1], false), - null, 'parallel, position' - ); + ).toBeNull(); - t.deepEqual( + expect( intersection([0, 0], [1, 1], [0, 1], [0, 0], true), - null, 'shared point 1, skip touches' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([0, 0], [1, 1], [0, 1], [1, 1], true), - null, 'shared point 2, skip touches' - ); + ).toBeNull(); - t.deepEqual( + expect( intersection([0, 0], [1, 1], [1, 1], [2, 2], true), - null, 'collinear, shared point, skip touches' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([1, 1], [0, 0], [1, 1], [2, 2], true), - null, 'collinear, shared other point, skip touches' - ); + ).toBeNull(); - t.deepEqual( + expect( intersection([0, 0], [1, 1], [0, 0], [1, 1], true), - null, 'full overlap, skip touches' - ); - t.deepEqual( + ).toBeNull(); + + expect( intersection([1, 1], [0, 0], [0, 0], [1, 1], true), - null, 'full overlap, orientation, skip touches' - ); + ).toBeNull(); - t.deepEqual( + expect( intersection([0, 0], [1, 1], [1, 0], [0, 1], true), - [[0.5, 0.5]], '1 intersection, skip touches' - ); - - t.end(); + ).toStrictEqual([[0.5, 0.5]]); }); From 2ac628ad5ffaf49db5b12eafb63378869349ef7a Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 18 Jul 2022 23:33:37 +0200 Subject: [PATCH 08/38] sweep event tests --- test/sweep_event.test.js | 55 ------------------------------ test/sweep_event.test.ts | 73 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 55 deletions(-) delete mode 100644 test/sweep_event.test.js create mode 100644 test/sweep_event.test.ts diff --git a/test/sweep_event.test.js b/test/sweep_event.test.js deleted file mode 100644 index b68a521..0000000 --- a/test/sweep_event.test.js +++ /dev/null @@ -1,55 +0,0 @@ -import tap from 'tape'; -import SweepEvent from '../dist/sweep_event'; - -tap.test('sweep event', (main) => { - main.test('isBelow', (t) => { - const s1 = new SweepEvent([0, 0], true, new SweepEvent([1, 1], false)); - const s2 = new SweepEvent([0, 1], false, new SweepEvent([0, 0], false)); - - t.ok(s1.isBelow([0, 1])); - t.ok(s1.isBelow([1, 2])); - t.notOk(s1.isBelow([0, 0])); - t.notOk(s1.isBelow([5, -1])); - - t.notOk(s2.isBelow([0, 1])); - t.notOk(s2.isBelow([1, 2])); - t.notOk(s2.isBelow([0, 0])); - t.notOk(s2.isBelow([5, -1])); - - t.end(); - }); - - main.test('isAbove', (t) => { - const s1 = new SweepEvent([0, 0], true, new SweepEvent([1, 1], false)); - const s2 = new SweepEvent([0, 1], false, new SweepEvent([0, 0], false)); - - t.notOk(s1.isAbove([0, 1])); - t.notOk(s1.isAbove([1, 2])); - t.ok(s1.isAbove([0, 0])); - t.ok(s1.isAbove([5, -1])); - - t.ok(s2.isAbove([0, 1])); - t.ok(s2.isAbove([1, 2])); - t.ok(s2.isAbove([0, 0])); - t.ok(s2.isAbove([5, -1])); - - t.end(); - }); - - main.test('isVertical', (t) => { - t.ok( - new SweepEvent([0, 0], true, new SweepEvent([0, 1], false)).isVertical() - ); - t.notOk( - new SweepEvent( - [0, 0], - true, - new SweepEvent([0.0001, 1], false) - ).isVertical() - ); - - t.end(); - }); - - main.end(); -}); diff --git a/test/sweep_event.test.ts b/test/sweep_event.test.ts new file mode 100644 index 0000000..1a0a05d --- /dev/null +++ b/test/sweep_event.test.ts @@ -0,0 +1,73 @@ +import { describe, it, assert } from 'vitest'; +import SweepEvent from '../src/sweep_event'; + +describe('sweep event', () => { + it('isBelow', () => { + const s1 = new SweepEvent( + [0, 0], + true, + new SweepEvent([1, 1], false, null, false), + false + ); + const s2 = new SweepEvent( + [0, 1], + false, + new SweepEvent([0, 0], false, null, false), + false + ); + + assert.ok(s1.isBelow([0, 1])); + assert.ok(s1.isBelow([1, 2])); + assert.notOk(s1.isBelow([0, 0])); + assert.notOk(s1.isBelow([5, -1])); + + assert.notOk(s2.isBelow([0, 1])); + assert.notOk(s2.isBelow([1, 2])); + assert.notOk(s2.isBelow([0, 0])); + assert.notOk(s2.isBelow([5, -1])); + }); + + it('isAbove', () => { + const s1 = new SweepEvent( + [0, 0], + true, + new SweepEvent([1, 1], false, null, false), + false + ); + const s2 = new SweepEvent( + [0, 1], + false, + new SweepEvent([0, 0], false, null, false), + false + ); + + assert.notOk(s1.isAbove([0, 1])); + assert.notOk(s1.isAbove([1, 2])); + assert.ok(s1.isAbove([0, 0])); + assert.ok(s1.isAbove([5, -1])); + + assert.ok(s2.isAbove([0, 1])); + assert.ok(s2.isAbove([1, 2])); + assert.ok(s2.isAbove([0, 0])); + assert.ok(s2.isAbove([5, -1])); + }); + + it('isVertical', () => { + assert.ok( + new SweepEvent( + [0, 0], + true, + new SweepEvent([0, 1], false, null, false), + false + ).isVertical() + ); + assert.notOk( + new SweepEvent( + [0, 0], + true, + new SweepEvent([0.0001, 1], false, null, false), + false + ).isVertical() + ); + }); +}); From 7409cdfab4284b842dbf2b64b69afbe4618b3832 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 18 Jul 2022 23:37:42 +0200 Subject: [PATCH 09/38] Sweepline test --- test/compute_fields.test.js | 7 ---- ...{sweep_line.test.js => sweep_line.test.ts} | 42 +++++++++---------- 2 files changed, 21 insertions(+), 28 deletions(-) delete mode 100644 test/compute_fields.test.js rename test/{sweep_line.test.js => sweep_line.test.ts} (50%) diff --git a/test/compute_fields.test.js b/test/compute_fields.test.js deleted file mode 100644 index 90cb119..0000000 --- a/test/compute_fields.test.js +++ /dev/null @@ -1,7 +0,0 @@ -import tap from 'tape'; -// var martinez = require('../src/'); -// var computeFields = martinez.computeFields; - -tap.test('compute fields', (t) => { - t.end(); -}); diff --git a/test/sweep_line.test.js b/test/sweep_line.test.ts similarity index 50% rename from test/sweep_line.test.js rename to test/sweep_line.test.ts index c9faa4e..f9e4aee 100644 --- a/test/sweep_line.test.js +++ b/test/sweep_line.test.ts @@ -1,9 +1,9 @@ -import tap from 'tape'; +import { test, assert } from 'vitest'; import path from 'path'; import Tree from 'splaytree'; import load from 'load-json-file'; -import compareSegments from '../dist/compare_segments'; -import SweepEvent from '../dist/sweep_event'; +import compareSegments from '../src/compare_segments'; +import SweepEvent from '../src/sweep_event'; // GeoJSON Data const data = load.sync( @@ -13,51 +13,53 @@ const data = load.sync( const subject = data.features[0]; const clipping = data.features[1]; -tap.test('sweep line', (t) => { +test('sweep line', () => { const s = subject.geometry.coordinates; const c = clipping.geometry.coordinates; const EF = new SweepEvent( s[0][0], true, - new SweepEvent(s[0][2], false), + new SweepEvent(s[0][2], false, null, false), true ); + // @ts-ignore EF.name = 'EF'; const EG = new SweepEvent( s[0][0], true, - new SweepEvent(s[0][1], false), + new SweepEvent(s[0][1], false, null, false), true ); + // @ts-ignore EG.name = 'EG'; const tree = new Tree(compareSegments); tree.insert(EF); tree.insert(EG); - t.equals(tree.find(EF).key, EF, 'able to retrieve node'); - t.equals(tree.minNode().key, EF, 'EF is at the begin'); - t.equals(tree.maxNode().key, EG, 'EG is at the end'); + assert.equal(tree.find(EF).key, EF, 'able to retrieve node'); + assert.equal(tree.minNode().key, EF, 'EF is at the begin'); + assert.equal(tree.maxNode().key, EG, 'EG is at the end'); - let it = tree.find(EF); + let iter = tree.find(EF); - t.equals(tree.next(it).key, EG); + assert.equal(tree.next(iter).key, EG); - it = tree.find(EG); + iter = tree.find(EG); - t.equals(tree.prev(it).key, EF); + assert.equal(tree.prev(iter).key, EF); const DA = new SweepEvent( c[0][0], true, - new SweepEvent(c[0][2], false), + new SweepEvent(c[0][2], false, null, false), true ); const DC = new SweepEvent( c[0][0], true, - new SweepEvent(c[0][1], false), + new SweepEvent(c[0][1], false, null, false), true ); @@ -66,13 +68,11 @@ tap.test('sweep line', (t) => { let begin = tree.minNode(); - t.equals(begin.key, DA, 'DA'); + assert.equal(begin.key, DA, 'DA'); begin = tree.next(begin); - t.equals(begin.key, DC, 'DC'); + assert.equal(begin.key, DC, 'DC'); begin = tree.next(begin); - t.equals(begin.key, EF, 'EF'); + assert.equal(begin.key, EF, 'EF'); begin = tree.next(begin); - t.equals(begin.key, EG, 'EG'); - - t.end(); + assert.equal(begin.key, EG, 'EG'); }); From ba5a0ca5093bf6e50ac848fe9274d9ce64d7b6f9 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 18 Jul 2022 23:52:30 +0200 Subject: [PATCH 10/38] Divide segment test --- ...segment.test.js => divide_segment.test.ts} | 101 +++++++++--------- 1 file changed, 48 insertions(+), 53 deletions(-) rename test/{divide_segment.test.js => divide_segment.test.ts} (67%) diff --git a/test/divide_segment.test.js b/test/divide_segment.test.ts similarity index 67% rename from test/divide_segment.test.js rename to test/divide_segment.test.ts index c9f2784..c295892 100644 --- a/test/divide_segment.test.js +++ b/test/divide_segment.test.ts @@ -1,8 +1,7 @@ -import tap from 'tape'; +import { describe, it, assert } from 'vitest'; import path from 'path'; import Queue from 'tinyqueue'; import load from 'load-json-file'; -import martinez from '../'; import SweepEvent from '../src/sweep_event'; import compareEvents from '../src/compare_events'; import intersection from '../src/segment_intersection'; @@ -13,6 +12,7 @@ import subdivideSegments from '../src/subdivide_segments'; import possibleIntersection from '../src/possible_intersection'; import Tree from 'splaytree'; import compareSegments from '../src/compare_segments'; +import { BoundingBox, MultiPolygon, Point } from '../src/types'; // GeoJSON Data const shapes = load.sync( @@ -22,21 +22,21 @@ const shapes = load.sync( const subject = shapes.features[0]; const clipping = shapes.features[1]; -tap.test('divide segments', (main) => { - main.test('divide 2 segments', (t) => { +describe('divide segments', () => { + it('divide 2 segments', () => { const se1 = new SweepEvent( [0, 0], true, - new SweepEvent([5, 5], false), + new SweepEvent([5, 5], false, null, false), true ); const se2 = new SweepEvent( [0, 5], true, - new SweepEvent([5, 0], false), + new SweepEvent([5, 0], false, null, false), false ); - const q = new Queue(null, compareEvents); + const q = new Queue(undefined, compareEvents); q.push(se1); q.push(se2); @@ -45,72 +45,71 @@ tap.test('divide segments', (main) => { se1.point, se1.otherEvent.point, se2.point, - se2.otherEvent.point + se2.otherEvent.point, + false ); - divideSegment(se1, iter[0], q); - divideSegment(se2, iter[0], q); - - t.equals(q.length, 6, 'subdivided in 4 segments by intersection point'); + if (iter) { + divideSegment(se1, iter[0] as Point, q); + divideSegment(se2, iter[0] as Point, q); + } - t.end(); + assert.equal(q.length, 6, 'subdivided in 4 segments by intersection point'); }); - main.test('possible intersections', (t) => { + it('possible intersections', () => { const s = subject.geometry.coordinates; const c = clipping.geometry.coordinates; - const q = new Queue(null, compareEvents); + const q = new Queue(undefined, compareEvents); const se1 = new SweepEvent( s[0][3], true, - new SweepEvent(s[0][2], false), + new SweepEvent(s[0][2], false, null, false), true ); const se2 = new SweepEvent( c[0][0], true, - new SweepEvent(c[0][1], false), + new SweepEvent(c[0][1], false, null, false), false ); // console.log(se1.point, se1.left, se1.otherEvent.point, se1.otherEvent.left); // console.log(se2.point, se2.left, se2.otherEvent.point, se2.otherEvent.left); - t.equals(possibleIntersection(se1, se2, q), 1); - t.equals(q.length, 4); + assert.equal(possibleIntersection(se1, se2, q), 1); + assert.equal(q.length, 4); let e; e = q.pop(); - t.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); - t.deepEqual(e.otherEvent.point, [56, 181], '1'); + assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); + assert.deepEqual(e.otherEvent.point, [56, 181], '1'); e = q.pop(); - t.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); - t.deepEqual(e.otherEvent.point, [16, 282], '2'); + assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); + assert.deepEqual(e.otherEvent.point, [16, 282], '2'); e = q.pop(); - t.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); - t.deepEqual(e.otherEvent.point, [153, 203.5], '3'); + assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); + assert.deepEqual(e.otherEvent.point, [153, 203.5], '3'); e = q.pop(); - t.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); - t.deepEqual(e.otherEvent.point, [153, 294.5], '4'); - - t.end(); + assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]); + assert.deepEqual(e.otherEvent.point, [153, 294.5], '4'); }); - main.test('possible intersections on 2 polygons', (t) => { - const s = [subject.geometry.coordinates]; - const c = [clipping.geometry.coordinates]; + it('possible intersections on 2 polygons', () => { + const s = [subject.geometry.coordinates] as MultiPolygon; + const c = [clipping.geometry.coordinates] as MultiPolygon; - const bbox = [Infinity, Infinity, -Infinity, -Infinity]; - const q = fillQueue(s, c, bbox, bbox); - const p0 = [16, 282]; - const p1 = [298, 359]; - const p2 = [156, 203.5]; + const bbox: BoundingBox = [Infinity, Infinity, -Infinity, -Infinity]; + const q = fillQueue(s, c, bbox, bbox, 0); + const p0: Point = [16, 282]; + const p1: Point = [298, 359]; + const p2: Point = [156, 203.5]; const te = new SweepEvent(p0, true, null, true); const te2 = new SweepEvent(p1, false, te, false); @@ -122,24 +121,24 @@ tap.test('divide segments', (main) => { const tr = new Tree(compareSegments); - t.ok(tr.insert(te), 'insert'); - t.ok(tr.insert(te3), 'insert'); + assert.ok(tr.insert(te), 'insert'); + assert.ok(tr.insert(te3), 'insert'); - t.equals(tr.find(te).key, te); - t.equals(tr.find(te3).key, te3); + assert.equal(tr.find(te).key, te); + assert.equal(tr.find(te3).key, te3); - t.equals(compareSegments(te, te3), 1); - t.equals(compareSegments(te3, te), -1); + assert.equal(compareSegments(te, te3), 1); + assert.equal(compareSegments(te3, te), -1); const segments = subdivideSegments(q, bbox, bbox, 0); - const leftSegments = []; + const leftSegments: SweepEvent[] = []; for (let i = 0; i < segments.length; i++) { if (segments[i].left) { leftSegments.push(segments[i]); } } - t.equals(leftSegments.length, 11); + assert.equal(leftSegments.length, 11); const E = [16, 282]; const I = [100.79403384562252, 233.41363754101192]; @@ -263,20 +262,16 @@ tap.test('divide segments', (main) => { seg.otherInOut === data.otherInOut && seg.inResult === data.inResult && ((seg.prevInResult === null && data.prevInResult === null) || - (equals(seg.prevInResult.point, data.prevInResult.l) && - equals(seg.prevInResult.otherEvent.point, data.prevInResult.r))) + (equals(seg.prevInResult!.point, data.prevInResult.l) && + equals(seg.prevInResult!.otherEvent.point, data.prevInResult.r))) ) { - t.pass(interval); + assert.ok(interval); return; } } - t.fail(interval); + assert.fail(interval); } Object.keys(intervals).forEach((key) => checkContain(key)); - - t.end(); }); - - main.end(); }); From fa92404eb1fec2eba24a8e96fbde28b117d68596 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:00:13 +0200 Subject: [PATCH 11/38] compare events test --- test/compare_events.test.js | 113 ------------------------------------ test/compare_events.test.ts | 102 ++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 113 deletions(-) delete mode 100644 test/compare_events.test.js create mode 100644 test/compare_events.test.ts diff --git a/test/compare_events.test.js b/test/compare_events.test.js deleted file mode 100644 index 5552663..0000000 --- a/test/compare_events.test.js +++ /dev/null @@ -1,113 +0,0 @@ -import tap from 'tape'; -import Queue from 'tinyqueue'; -import sweepEventsComp from '../dist/compare_events'; -import SweepEvent from '../dist/sweep_event'; - -tap.test('queue', (main) => { - main.test('queue should process lest(by x) sweep event first', (t) => { - const queue = new Queue(null, sweepEventsComp); - const e1 = { point: [0.0, 0.0] }; - const e2 = { point: [0.5, 0.5] }; - - queue.push(e1); - queue.push(e2); - - t.equals(e1, queue.pop()); - t.equals(e2, queue.pop()); - - t.end(); - }); - - main.test('queue should process lest(by y) sweep event first', (t) => { - const queue = new Queue(null, sweepEventsComp); - const e1 = { point: [0.0, 0.0] }; - const e2 = { point: [0.0, 0.5] }; - - queue.push(e1); - queue.push(e2); - - t.equals(e1, queue.pop()); - t.equals(e2, queue.pop()); - - t.end(); - }); - - main.test('queue should pop least(by left prop) sweep event first', (t) => { - const queue = new Queue(null, sweepEventsComp); - const e1 = { point: [0.0, 0.0], left: true }; - const e2 = { point: [0.0, 0.0], left: false }; - - queue.push(e1); - queue.push(e2); - - t.equals(e2, queue.pop()); - t.equals(e1, queue.pop()); - - t.end(); - }); - - main.end(); -}); - -tap.test('sweep event comparison x coordinates', (t) => { - const e1 = { point: [0.0, 0.0] }; - const e2 = { point: [0.5, 0.5] }; - - t.equals(sweepEventsComp(e1, e2), -1); - t.equals(sweepEventsComp(e2, e1), 1); - - t.end(); -}); - -tap.test('sweep event comparison y coordinates', (t) => { - const e1 = { point: [0.0, 0.0] }; - const e2 = { point: [0.0, 0.5] }; - - t.equals(sweepEventsComp(e1, e2), -1); - t.equals(sweepEventsComp(e2, e1), 1); - - t.end(); -}); - -tap.test('sweep event comparison not left first', (t) => { - const e1 = { point: [0.0, 0.0], left: true }; - const e2 = { point: [0.0, 0.0], left: false }; - - t.equals(sweepEventsComp(e1, e2), 1); - t.equals(sweepEventsComp(e2, e1), -1); - - t.end(); -}); - -tap.test( - 'sweep event comparison shared start point not collinear edges', - (t) => { - const e1 = new SweepEvent([0.0, 0.0], true, new SweepEvent([1, 1], false)); - const e2 = new SweepEvent([0.0, 0.0], true, new SweepEvent([2, 3], false)); - - t.equals(sweepEventsComp(e1, e2), -1, 'lower is processed first'); - t.equals(sweepEventsComp(e2, e1), 1, 'higher is processed second'); - - t.end(); - } -); - -tap.test('sweep event comparison collinear edges', (t) => { - const e1 = new SweepEvent( - [0.0, 0.0], - true, - new SweepEvent([1, 1], false), - true - ); - const e2 = new SweepEvent( - [0.0, 0.0], - true, - new SweepEvent([2, 2], false), - false - ); - - t.equals(sweepEventsComp(e1, e2), -1, 'clipping is processed first'); - t.equals(sweepEventsComp(e2, e1), 1, 'subject is processed second'); - - t.end(); -}); diff --git a/test/compare_events.test.ts b/test/compare_events.test.ts new file mode 100644 index 0000000..f6c544d --- /dev/null +++ b/test/compare_events.test.ts @@ -0,0 +1,102 @@ +import { describe, it, assert, test } from 'vitest'; +import Queue from 'tinyqueue'; +import sweepEventsComp from '../src/compare_events'; +import SweepEvent from '../src/sweep_event'; + +describe('queue', () => { + it('queue should process lest(by x) sweep event first', () => { + const queue = new Queue(undefined, sweepEventsComp); + const e1 = { point: [0.0, 0.0] } as SweepEvent; + const e2 = { point: [0.5, 0.5] } as SweepEvent; + + queue.push(e1); + queue.push(e2); + + assert.equal(e1, queue.pop()); + assert.equal(e2, queue.pop()); + }); + + it('queue should process lest(by y) sweep event first', () => { + const queue = new Queue(undefined, sweepEventsComp); + const e1 = { point: [0.0, 0.0] } as SweepEvent; + const e2 = { point: [0.0, 0.5] } as SweepEvent; + + queue.push(e1); + queue.push(e2); + + assert.equal(e1, queue.pop()); + assert.equal(e2, queue.pop()); + }); + + it('queue should pop least(by left prop) sweep event first', () => { + const queue = new Queue(undefined, sweepEventsComp); + const e1 = { point: [0.0, 0.0], left: true } as SweepEvent; + const e2 = { point: [0.0, 0.0], left: false } as SweepEvent; + + queue.push(e1); + queue.push(e2); + + assert.equal(e2, queue.pop()); + assert.equal(e1, queue.pop()); + }); +}); + +test('sweep event comparison x coordinates', () => { + const e1 = { point: [0.0, 0.0] } as SweepEvent; + const e2 = { point: [0.5, 0.5] } as SweepEvent; + + assert.equal(sweepEventsComp(e1, e2), -1); + assert.equal(sweepEventsComp(e2, e1), 1); +}); + +test('sweep event comparison y coordinates', () => { + const e1 = { point: [0.0, 0.0] } as SweepEvent; + const e2 = { point: [0.0, 0.5] } as SweepEvent; + + assert.equal(sweepEventsComp(e1, e2), -1); + assert.equal(sweepEventsComp(e2, e1), 1); +}); + +test('sweep event comparison not left first', () => { + const e1 = { point: [0.0, 0.0], left: true } as SweepEvent; + const e2 = { point: [0.0, 0.0], left: false } as SweepEvent; + + assert.equal(sweepEventsComp(e1, e2), 1); + assert.equal(sweepEventsComp(e2, e1), -1); +}); + +test('sweep event comparison shared start point not collinear edges', () => { + const e1 = new SweepEvent( + [0.0, 0.0], + true, + new SweepEvent([1, 1], false, null, false), + false + ); + const e2 = new SweepEvent( + [0.0, 0.0], + true, + new SweepEvent([2, 3], false, null, false), + false + ); + + assert.equal(sweepEventsComp(e1, e2), -1, 'lower is processed first'); + assert.equal(sweepEventsComp(e2, e1), 1, 'higher is processed second'); +}); + +test('sweep event comparison collinear edges', () => { + const e1 = new SweepEvent( + [0.0, 0.0], + true, + new SweepEvent([1, 1], false, null, false), + true + ); + const e2 = new SweepEvent( + [0.0, 0.0], + true, + new SweepEvent([2, 2], false, null, false), + false + ); + + assert.equal(sweepEventsComp(e1, e2), -1, 'clipping is processed first'); + assert.equal(sweepEventsComp(e2, e1), 1, 'subject is processed second'); +}); From fb3ed528454e92da74731d31e85932622d6a7672 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:02:18 +0200 Subject: [PATCH 12/38] Removed explicit rollup --- rollup.config.js | 90 ------------------------------------------------ 1 file changed, 90 deletions(-) delete mode 100644 rollup.config.js diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 21c0096..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,90 +0,0 @@ -import resolve from 'rollup-plugin-node-resolve'; -import commonjs from 'rollup-plugin-commonjs'; -import typescript from 'rollup-plugin-typescript2'; -import { terser } from 'rollup-plugin-terser'; -import { version, author, license, description } from './package.json'; - -const name = 'martinez'; - -const banner = `\ -/** - * ${name} v${version} - * ${description} - * - * @author ${author} - * @license ${license} - * @preserve - */ -`; - -module.exports = [ - { - input: './src/index.ts', - output: { - file: 'dist/index.js', - name: 'martinez', - sourcemap: true, - format: 'umd', - banner - }, - plugins: [ - resolve(), // so Rollup can find external libs - commonjs(), // so Rollup can convert commonJS to an ES module - typescript({ - useTsconfigDeclarationDir: true - }) - ] - }, - { - input: './src/index.ts', - output: { - file: 'dist/index.esm.js', - name: 'martinez', - sourcemap: true, - format: 'esm', - banner - }, - plugins: [ - resolve(), // so Rollup can find external libs - commonjs(), // so Rollup can convert commonJS to an ES module - typescript({ - useTsconfigDeclarationDir: true - }) - ] - }, - { - input: './src/index.ts', - output: { - file: 'dist/index.min.js', - name: 'martinez', - sourcemap: true, - format: 'umd', - banner - }, - plugins: [ - resolve(), // so Rollup can find external libs - commonjs(), // so Rollup can convert commonJS to an ES module - typescript({ - useTsconfigDeclarationDir: true - }), - terser() - ] - }, - { - input: 'web/index.ts', - output: { - file: 'web/index-bundle.js', - format: 'iife', - globals: { - leaflet: 'L', - jsts: 'jsts' - } - }, - external: ['jsts', 'leaflet', 'leaflet-editable'], - plugins: [ - resolve(), // so Rollup can find external libs - commonjs(), // so Rollup can convert commonJS to an ES module - typescript({ tsconfig: 'web/tsconfig.json' }) - ] - } -]; From 0416035900e87e58847ee92885643009c101aa7e Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:10:19 +0200 Subject: [PATCH 13/38] Compare segments test --- test/compare_segments.test.js | 139 -------------------------- test/compare_segments.test.ts | 179 ++++++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+), 139 deletions(-) delete mode 100644 test/compare_segments.test.js create mode 100644 test/compare_segments.test.ts diff --git a/test/compare_segments.test.js b/test/compare_segments.test.js deleted file mode 100644 index 8b4315a..0000000 --- a/test/compare_segments.test.js +++ /dev/null @@ -1,139 +0,0 @@ -import tap from 'tape'; -import Tree from 'splaytree'; -import compareSegments from '../dist/compare_segments'; -import compareEvents from '../dist/compare_events'; -import SweepEvent from '../dist/sweep_event'; - -tap.test('compare segments', (main) => { - main.test('not collinear', (secondary) => { - secondary.test('shared left point - right point first', (t) => { - const tree = new Tree(compareSegments); - const pt = [0.0, 0.0]; - const se1 = new SweepEvent(pt, true, new SweepEvent([1, 1], false)); - const se2 = new SweepEvent(pt, true, new SweepEvent([2, 3], false)); - - tree.insert(se1); - tree.insert(se2); - - t.deepEqual(tree.maxNode().key.otherEvent.point, [2, 3]); - t.deepEqual(tree.minNode().key.otherEvent.point, [1, 1]); - - t.end(); - }); - - secondary.test( - 'different left point - right point y coord to sort', - (t) => { - const tree = new Tree(compareSegments); - const se1 = new SweepEvent([0, 1], true, new SweepEvent([1, 1], false)); - const se2 = new SweepEvent([0, 2], true, new SweepEvent([2, 3], false)); - - tree.insert(se1); - tree.insert(se2); - - t.deepEqual(tree.minNode().key.otherEvent.point, [1, 1]); - t.deepEqual(tree.maxNode().key.otherEvent.point, [2, 3]); - - t.end(); - } - ); - - secondary.test('events order in sweep line', (t) => { - const se1 = new SweepEvent([0, 1], true, new SweepEvent([2, 1], false)); - const se2 = new SweepEvent([-1, 0], true, new SweepEvent([2, 3], false)); - - const se3 = new SweepEvent([0, 1], true, new SweepEvent([3, 4], false)); - const se4 = new SweepEvent([-1, 0], true, new SweepEvent([3, 1], false)); - - t.equal(compareEvents(se1, se2), 1); - t.notOk(se2.isBelow(se1.point)); - t.ok(se2.isAbove(se1.point)); - - t.equal(compareSegments(se1, se2), -1, 'compare segments'); - t.equal(compareSegments(se2, se1), 1, 'compare segments inverted'); - - t.equal(compareEvents(se3, se4), 1); - t.notOk(se4.isAbove(se3.point)); - - t.end(); - }); - - secondary.test('first point is below', (t) => { - const se2 = new SweepEvent([0, 1], true, new SweepEvent([2, 1], false)); - const se1 = new SweepEvent([-1, 0], true, new SweepEvent([2, 3], false)); - - t.notOk(se1.isBelow(se2.point)); - t.equal(compareSegments(se1, se2), 1, 'compare segments'); - - t.end(); - }); - - secondary.end(); - }); - - main.test('collinear segments', (t) => { - const se1 = new SweepEvent( - [1, 1], - true, - new SweepEvent([5, 1], false), - true - ); - const se2 = new SweepEvent( - [2, 1], - true, - new SweepEvent([3, 1], false), - false - ); - - t.notEqual(se1.isSubject, se2.isSubject); - t.equal(compareSegments(se1, se2), -1); - - t.end(); - }); - - main.test('collinear shared left point', (t) => { - const pt = [0, 1]; - - const se1 = new SweepEvent(pt, true, new SweepEvent([5, 1], false), false); - const se2 = new SweepEvent(pt, true, new SweepEvent([3, 1], false), false); - - se1.contourId = 1; - se2.contourId = 2; - - t.equal(se1.isSubject, se2.isSubject); - t.equal(se1.point, se2.point); - - t.equal(compareSegments(se1, se2), -1); - - se1.contourId = 2; - se2.contourId = 1; - - t.equal(compareSegments(se1, se2), +1); - - t.end(); - }); - - main.test('collinear same polygon different left points', (t) => { - const se1 = new SweepEvent( - [1, 1], - true, - new SweepEvent([5, 1], false), - true - ); - const se2 = new SweepEvent( - [2, 1], - true, - new SweepEvent([3, 1], false), - true - ); - - t.equal(se1.isSubject, se2.isSubject); - t.notEqual(se1.point, se2.point); - t.equal(compareSegments(se1, se2), -1); - t.equal(compareSegments(se2, se1), 1); - - t.end(); - }); - - main.end(); -}); diff --git a/test/compare_segments.test.ts b/test/compare_segments.test.ts new file mode 100644 index 0000000..bcb9816 --- /dev/null +++ b/test/compare_segments.test.ts @@ -0,0 +1,179 @@ +import { describe, it, assert } from 'vitest'; +import Tree from 'splaytree'; +import compareSegments from '../src/compare_segments'; +import compareEvents from '../src/compare_events'; +import SweepEvent from '../src/sweep_event'; +import { Point } from '../src/types'; + +describe('compare segments', () => { + describe('not collinear', () => { + it('shared left point - right point first', () => { + const tree = new Tree(compareSegments); + const pt: Point = [0.0, 0.0]; + const se1 = new SweepEvent( + pt, + true, + new SweepEvent([1, 1], false, null, false), + false + ); + const se2 = new SweepEvent( + pt, + true, + new SweepEvent([2, 3], false, null, false), + false + ); + + tree.insert(se1); + tree.insert(se2); + + assert.deepEqual(tree.maxNode().key!.otherEvent.point, [2, 3]); + assert.deepEqual(tree.minNode().key!.otherEvent.point, [1, 1]); + }); + + it('different left point - right point y coord to sort', () => { + const tree = new Tree(compareSegments); + const se1 = new SweepEvent( + [0, 1], + true, + new SweepEvent([1, 1], false, null, false), + false + ); + const se2 = new SweepEvent( + [0, 2], + true, + new SweepEvent([2, 3], false, null, false), + false + ); + + tree.insert(se1); + tree.insert(se2); + + assert.deepEqual(tree.minNode().key!.otherEvent.point, [1, 1]); + assert.deepEqual(tree.maxNode().key!.otherEvent.point, [2, 3]); + }); + + it('events order in sweep line', () => { + const se1 = new SweepEvent( + [0, 1], + true, + new SweepEvent([2, 1], false, null, false), + false + ); + const se2 = new SweepEvent( + [-1, 0], + true, + new SweepEvent([2, 3], false, null, false), + false + ); + + const se3 = new SweepEvent( + [0, 1], + true, + new SweepEvent([3, 4], false, null, false), + false + ); + const se4 = new SweepEvent( + [-1, 0], + true, + new SweepEvent([3, 1], false, null, false), + false + ); + + assert.equal(compareEvents(se1, se2), 1); + assert.notOk(se2.isBelow(se1.point)); + assert.ok(se2.isAbove(se1.point)); + + assert.equal(compareSegments(se1, se2), -1, 'compare segments'); + assert.equal(compareSegments(se2, se1), 1, 'compare segments inverted'); + + assert.equal(compareEvents(se3, se4), 1); + assert.notOk(se4.isAbove(se3.point)); + }); + + it('first point is below', () => { + const se2 = new SweepEvent( + [0, 1], + true, + new SweepEvent([2, 1], false, null, false), + false + ); + const se1 = new SweepEvent( + [-1, 0], + true, + new SweepEvent([2, 3], false, null, false), + false + ); + + assert.notOk(se1.isBelow(se2.point)); + assert.equal(compareSegments(se1, se2), 1, 'compare segments'); + }); + }); + + it('collinear segments', () => { + const se1 = new SweepEvent( + [1, 1], + true, + new SweepEvent([5, 1], false, null, false), + true + ); + const se2 = new SweepEvent( + [2, 1], + true, + new SweepEvent([3, 1], false, null, false), + false + ); + + assert.notEqual(se1.isSubject, se2.isSubject); + assert.equal(compareSegments(se1, se2), -1); + }); + + it('collinear shared left point', () => { + const pt: Point = [0, 1]; + + const se1 = new SweepEvent( + pt, + true, + new SweepEvent([5, 1], false, null, false), + false + ); + const se2 = new SweepEvent( + pt, + true, + new SweepEvent([3, 1], false, null, false), + false + ); + + se1.contourId = 1; + se2.contourId = 2; + + assert.equal(se1.isSubject, se2.isSubject); + assert.equal(se1.point, se2.point); + + assert.equal(compareSegments(se1, se2), -1); + + se1.contourId = 2; + se2.contourId = 1; + + assert.equal(compareSegments(se1, se2), +1); + }); + + it('collinear same polygon different left points', () => { + const se1 = new SweepEvent( + [1, 1], + true, + new SweepEvent([5, 1], false, null, false), + true + ); + const se2 = new SweepEvent( + [2, 1], + true, + new SweepEvent([3, 1], false, null, false), + true + ); + + assert.equal(se1.isSubject, se2.isSubject); + assert.notEqual(se1.point, se2.point); + assert.equal(compareSegments(se1, se2), -1); + assert.equal(compareSegments(se2, se1), 1); + }); +}); From 1d933ef7e4e3db5fdc2dd107ebc79fd49155cf6f Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:15:17 +0200 Subject: [PATCH 14/38] Feature type test --- ...tureTypes.test.js => featureTypes.test.ts} | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) rename test/{featureTypes.test.js => featureTypes.test.ts} (86%) diff --git a/test/featureTypes.test.js b/test/featureTypes.test.ts similarity index 86% rename from test/featureTypes.test.js rename to test/featureTypes.test.ts index a222e74..0921698 100644 --- a/test/featureTypes.test.js +++ b/test/featureTypes.test.ts @@ -1,4 +1,4 @@ -import tap from 'tape'; +import { test, assert } from 'vitest'; import path from 'path'; import load from 'load-json-file'; import * as martinez from '../src'; @@ -31,9 +31,10 @@ testScenarios.forEach((ts) => { const subject = load.sync( path.join(__dirname, 'featureTypes', ts.subjectPoly + '.geojson') ); - tap.test(ts.testName, (t) => { + const name = ts.testName; + test(ts.testName, () => { const expectedIntResult = load.sync( - path.join(outDir, 'intersection', t.name + '.geojson') + path.join(outDir, 'intersection', name + '.geojson') ); if (expectedIntResult.geometry.type === 'Polygon') expectedIntResult.geometry.coordinates = [ @@ -43,14 +44,14 @@ testScenarios.forEach((ts) => { subject.geometry.coordinates, clipping.geometry.coordinates ); - t.same( + assert.deepEqual( intResult, expectedIntResult.geometry.coordinates, ts.testName + ' - Intersect' ); const expectedXorResult = load.sync( - path.join(outDir, 'xor', t.name + '.geojson') + path.join(outDir, 'xor', name + '.geojson') ); if (expectedXorResult.geometry.type === 'Polygon') expectedXorResult.geometry.coordinates = [ @@ -60,14 +61,14 @@ testScenarios.forEach((ts) => { subject.geometry.coordinates, clipping.geometry.coordinates ); - t.same( + assert.deepEqual( xorResult, expectedXorResult.geometry.coordinates, ts.testName + ' - XOR' ); const expectedDiffResult = load.sync( - path.join(outDir, 'difference', t.name + '.geojson') + path.join(outDir, 'difference', name + '.geojson') ); if (expectedDiffResult.geometry.type === 'Polygon') expectedDiffResult.geometry.coordinates = [ @@ -77,14 +78,14 @@ testScenarios.forEach((ts) => { subject.geometry.coordinates, clipping.geometry.coordinates ); - t.same( + assert.deepEqual( diffResult, expectedDiffResult.geometry.coordinates, ts.testName + ' - Difference' ); const expectedUnionResult = load.sync( - path.join(outDir, 'union', t.name + '.geojson') + path.join(outDir, 'union', name + '.geojson') ); if (expectedUnionResult.geometry.type === 'Polygon') expectedUnionResult.geometry.coordinates = [ @@ -94,12 +95,10 @@ testScenarios.forEach((ts) => { subject.geometry.coordinates, clipping.geometry.coordinates ); - t.same( + assert.deepEqual( unionResult, expectedUnionResult.geometry.coordinates, ts.testName + ' - Union' ); - - t.end(); }); }); From b5f2e344458925a552c61cb1c89331b058df151f Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:23:37 +0200 Subject: [PATCH 15/38] Main test --- test/index.test.js | 198 --------------------------------------------- test/index.test.ts | 173 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+), 198 deletions(-) delete mode 100644 test/index.test.js create mode 100644 test/index.test.ts diff --git a/test/index.test.js b/test/index.test.js deleted file mode 100644 index 1d5e11f..0000000 --- a/test/index.test.js +++ /dev/null @@ -1,198 +0,0 @@ -import tap from 'tape'; -import path from 'path'; -import load from 'load-json-file'; -import fillQueue from '../dist/fill_queue'; - -// GeoJSON Data -const data = load.sync( - path.join(__dirname, 'fixtures', 'two_triangles.geojson') -); - -const subject = data.features[0]; -const clipping = data.features[1]; - -tap.test('fill event queue', (main) => { - const s = [subject.geometry.coordinates]; - const c = [clipping.geometry.coordinates]; - - const sbbox = [Infinity, Infinity, -Infinity, -Infinity]; - const cbbox = [Infinity, Infinity, -Infinity, -Infinity]; - const q = fillQueue(s, c, sbbox, cbbox); - let currentPoint; - - main.test('bboxes', (t) => { - t.deepEqual(sbbox, [20, -113.5, 226.5, 74], 'subject bbox'); - t.deepEqual(cbbox, [54.5, -198, 239.5, 33.5], 'clipping bbox'); - t.end(); - }); - - main.test('point 0', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [20, -23.5]); /* s[0][0] */ - t.ok(currentPoint.left, 'is left'); - t.deepEqual( - currentPoint.otherEvent.point, - [226.5, -113.5], - 'other event' - ); /* s[0][2] */ - t.notOk(currentPoint.otherEvent.left, 'other event is right'); - - t.end(); - }); - - main.test('point 1', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [20, -23.5]); /* s[0][0] */ - t.ok(currentPoint.left, 'is left'); - t.deepEqual( - currentPoint.otherEvent.point, - [170, 74], - 'other event' - ); /* s[0][1] */ - t.notOk(currentPoint.otherEvent.left, 'other event is right'); - - t.end(); - }); - - main.test('point 2', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [54.5, -170.5]); /* c[0][0] */ - t.ok(currentPoint.left, 'is left'); - t.deepEqual( - currentPoint.otherEvent.point, - [239.5, -198], - 'other event' - ); /* c[0][2] */ - t.notOk(currentPoint.otherEvent.left, 'other event is right'); - - t.end(); - }); - - main.test('point 3', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [54.5, -170.5]); /* c[0][0] */ - t.ok(currentPoint.left, 'is left'); - t.deepEqual( - currentPoint.otherEvent.point, - [140.5, 33.5], - 'other event' - ); /* c[0][1] */ - t.notOk(currentPoint.otherEvent.left, 'other event is right'); - - t.end(); - }); - - main.test('point 4', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [140.5, 33.5]); /* c[0][0] */ - t.notOk(currentPoint.left, 'is right'); - t.deepEqual( - currentPoint.otherEvent.point, - [54.5, -170.5], - 'other event' - ); /* c[0][1] */ - t.ok(currentPoint.otherEvent.left, 'other event is left'); - - t.end(); - }); - - main.test('point 5', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [140.5, 33.5]); /* c[0][0] */ - t.ok(currentPoint.left, 'is left'); - t.deepEqual( - currentPoint.otherEvent.point, - [239.5, -198], - 'other event' - ); /* c[0][1] */ - t.notOk(currentPoint.otherEvent.left, 'other event is right'); - - t.end(); - }); - - main.test('point 6', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [170, 74]); /* s[0][1] */ - t.notOk(currentPoint.left, 'is right'); - t.deepEqual( - currentPoint.otherEvent.point, - [20, -23.5], - 'other event' - ); /* s[0][0] */ - t.ok(currentPoint.otherEvent.left, 'other event is left'); - - t.end(); - }); - - main.test('point 7', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [170, 74]); /* s[0][1] */ - t.ok(currentPoint.left, 'is left'); - t.deepEqual( - currentPoint.otherEvent.point, - [226.5, -113.5], - 'other event' - ); /* s[0][3] */ - t.notOk(currentPoint.otherEvent.left, 'other event is right'); - - t.end(); - }); - - main.test('point 8', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [226.5, -113.5]); /* s[0][1] */ - t.notOk(currentPoint.left, 'is right'); - t.deepEqual( - currentPoint.otherEvent.point, - [20, -23.5], - 'other event' - ); /* s[0][0] */ - t.ok(currentPoint.otherEvent.left, 'other event is left'); - - t.end(); - }); - - main.test('point 9', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [226.5, -113.5]); /* s[0][1] */ - t.notOk(currentPoint.left, 'is right'); - t.deepEqual( - currentPoint.otherEvent.point, - [170, 74], - 'other event' - ); /* s[0][0] */ - t.ok(currentPoint.otherEvent.left, 'other event is left'); - - t.end(); - }); - - main.test('point 10', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [239.5, -198]); /* c[0][2] */ - t.notOk(currentPoint.left, 'is right'); - t.deepEqual( - currentPoint.otherEvent.point, - [54.5, -170.5], - 'other event' - ); /* c[0][0] */ - t.ok(currentPoint.otherEvent.left, 'other event is left'); - - t.end(); - }); - - main.test('point 11', (t) => { - currentPoint = q.pop(); - t.deepEqual(currentPoint.point, [239.5, -198]); /* c[0][2] */ - t.notOk(currentPoint.left, 'is right'); - t.deepEqual( - currentPoint.otherEvent.point, - [140.5, 33.5], - 'other event' - ); /* s[0][1] */ - t.ok(currentPoint.otherEvent.left, 'other event is left'); - - t.end(); - }); - - main.end(); -}); diff --git a/test/index.test.ts b/test/index.test.ts new file mode 100644 index 0000000..e629d9e --- /dev/null +++ b/test/index.test.ts @@ -0,0 +1,173 @@ +import { describe, it, assert } from 'vitest'; +import path from 'path'; +import load from 'load-json-file'; +import fillQueue from '../src/fill_queue'; +import { BoundingBox, MultiPolygon, Polygon } from '../src/types'; +import { FeatureCollection, Polygon as GeoPolygon } from 'geojson'; + +// GeoJSON Data +const data: FeatureCollection = load.sync( + path.join(__dirname, 'fixtures', 'two_triangles.geojson') +); + +const subject = data.features[0]; +const clipping = data.features[1]; + +describe('fill event queue', () => { + const s = [subject.geometry.coordinates] as MultiPolygon; + const c = [clipping.geometry.coordinates] as MultiPolygon; + + const sbbox: BoundingBox = [Infinity, Infinity, -Infinity, -Infinity]; + const cbbox: BoundingBox = [Infinity, Infinity, -Infinity, -Infinity]; + const q = fillQueue(s, c, sbbox, cbbox, 0); + let currentPoint; + + it('bboxes', () => { + assert.deepEqual(sbbox, [20, -113.5, 226.5, 74], 'subject bbox'); + assert.deepEqual(cbbox, [54.5, -198, 239.5, 33.5], 'clipping bbox'); + }); + + it('point 0', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [20, -23.5]); /* s[0][0] */ + assert.ok(currentPoint.left, 'is left'); + assert.deepEqual( + currentPoint.otherEvent.point, + [226.5, -113.5], + 'other event' + ); /* s[0][2] */ + assert.notOk(currentPoint.otherEvent.left, 'other event is right'); + }); + + it('point 1', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [20, -23.5]); /* s[0][0] */ + assert.ok(currentPoint.left, 'is left'); + assert.deepEqual( + currentPoint.otherEvent.point, + [170, 74], + 'other event' + ); /* s[0][1] */ + assert.notOk(currentPoint.otherEvent.left, 'other event is right'); + }); + + it('point 2', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [54.5, -170.5]); /* c[0][0] */ + assert.ok(currentPoint.left, 'is left'); + assert.deepEqual( + currentPoint.otherEvent.point, + [239.5, -198], + 'other event' + ); /* c[0][2] */ + assert.notOk(currentPoint.otherEvent.left, 'other event is right'); + }); + + it('point 3', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [54.5, -170.5]); /* c[0][0] */ + assert.ok(currentPoint.left, 'is left'); + assert.deepEqual( + currentPoint.otherEvent.point, + [140.5, 33.5], + 'other event' + ); /* c[0][1] */ + assert.notOk(currentPoint.otherEvent.left, 'other event is right'); + }); + + it('point 4', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [140.5, 33.5]); /* c[0][0] */ + assert.notOk(currentPoint.left, 'is right'); + assert.deepEqual( + currentPoint.otherEvent.point, + [54.5, -170.5], + 'other event' + ); /* c[0][1] */ + assert.ok(currentPoint.otherEvent.left, 'other event is left'); + }); + + it('point 5', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [140.5, 33.5]); /* c[0][0] */ + assert.ok(currentPoint.left, 'is left'); + assert.deepEqual( + currentPoint.otherEvent.point, + [239.5, -198], + 'other event' + ); /* c[0][1] */ + assert.notOk(currentPoint.otherEvent.left, 'other event is right'); + }); + + it('point 6', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [170, 74]); /* s[0][1] */ + assert.notOk(currentPoint.left, 'is right'); + assert.deepEqual( + currentPoint.otherEvent.point, + [20, -23.5], + 'other event' + ); /* s[0][0] */ + assert.ok(currentPoint.otherEvent.left, 'other event is left'); + }); + + it('point 7', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [170, 74]); /* s[0][1] */ + assert.ok(currentPoint.left, 'is left'); + assert.deepEqual( + currentPoint.otherEvent.point, + [226.5, -113.5], + 'other event' + ); /* s[0][3] */ + assert.notOk(currentPoint.otherEvent.left, 'other event is right'); + }); + + it('point 8', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [226.5, -113.5]); /* s[0][1] */ + assert.notOk(currentPoint.left, 'is right'); + assert.deepEqual( + currentPoint.otherEvent.point, + [20, -23.5], + 'other event' + ); /* s[0][0] */ + assert.ok(currentPoint.otherEvent.left, 'other event is left'); + }); + + it('point 9', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [226.5, -113.5]); /* s[0][1] */ + assert.notOk(currentPoint.left, 'is right'); + assert.deepEqual( + currentPoint.otherEvent.point, + [170, 74], + 'other event' + ); /* s[0][0] */ + assert.ok(currentPoint.otherEvent.left, 'other event is left'); + }); + + it('point 10', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [239.5, -198]); /* c[0][2] */ + assert.notOk(currentPoint.left, 'is right'); + assert.deepEqual( + currentPoint.otherEvent.point, + [54.5, -170.5], + 'other event' + ); /* c[0][0] */ + assert.ok(currentPoint.otherEvent.left, 'other event is left'); + }); + + it('point 11', () => { + currentPoint = q.pop(); + assert.deepEqual(currentPoint.point, [239.5, -198]); /* c[0][2] */ + assert.notOk(currentPoint.left, 'is right'); + assert.deepEqual( + currentPoint.otherEvent.point, + [140.5, 33.5], + 'other event' + ); /* s[0][1] */ + assert.ok(currentPoint.otherEvent.left, 'other event is left'); + }); +}); From 3e7bc900d4c988b3fa0aea459dfdf68f072ee38e Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:26:06 +0200 Subject: [PATCH 16/38] Tests are done --- test/genericTestCases.test.js | 85 ----------------------------------- test/genericTestCases.test.ts | 85 +++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 85 deletions(-) delete mode 100644 test/genericTestCases.test.js create mode 100644 test/genericTestCases.test.ts diff --git a/test/genericTestCases.test.js b/test/genericTestCases.test.js deleted file mode 100644 index 7dca7b1..0000000 --- a/test/genericTestCases.test.js +++ /dev/null @@ -1,85 +0,0 @@ -import tap from 'tape'; -import path from 'path'; -import glob from 'glob'; -import load from 'load-json-file'; -import fs from 'fs'; -import stringify from 'json-stringify-pretty-compact'; -import * as martinez from '..'; - -function extractExpectedResults(features) { - return features.map((feature) => { - let mode = feature.properties.operation; - var op; - switch (mode) { - case 'union': - op = martinez.union; - break; - case 'intersection': - op = martinez.intersection; - break; - case 'xor': - op = martinez.xor; - break; - case 'diff': - op = martinez.diff; - break; - case 'diff_ba': - op = (a, b) => martinez.diff(b, a); - break; - } - if (op == null) { - throw `Invalid mode: ${mode}`; - } - return { - op: op, - coordinates: feature.geometry.coordinates - }; - }); -} - -const caseDir = path.join(__dirname, 'genericTestCases'); -const testCases = glob.sync(path.join(caseDir, '*.geojson')); -if (testCases.length === 0) { - throw 'No test cases found, this must not happen'; -} - -testCases.forEach((testCaseFile) => { - let testName = 'Generic test case: ' + path.basename(testCaseFile); - tap.test(testName, (t) => { - const data = load.sync(testCaseFile); - if (data.features.length < 2) { - throw `Test case file must contain at least two features, but ${testCaseFile} doesn't.`; - } - - let p1Geometry = data.features[0].geometry; - let p2Geometry = data.features[1].geometry; - - let p1 = - p1Geometry.type === 'Polygon' - ? [p1Geometry.coordinates] - : p1Geometry.coordinates; - let p2 = - p2Geometry.type === 'Polygon' - ? [p2Geometry.coordinates] - : p2Geometry.coordinates; - - let expectedResults = extractExpectedResults(data.features.slice(2)); - - let featureIndex = 2; - for (const expectedResult of expectedResults) { - const result = expectedResult.op(p1, p2); - t.same(result, expectedResult.coordinates); - - // Update output data for re-generation mode - data.features[featureIndex].geometry.type = 'MultiPolygon'; - data.features[featureIndex].geometry.coordinates = result; - featureIndex += 1; - } - - if (process.env.REGEN) { - fs.writeFileSync(testCaseFile, stringify(data)); - } - - t.end(); - }); -}); diff --git a/test/genericTestCases.test.ts b/test/genericTestCases.test.ts new file mode 100644 index 0000000..75f82ed --- /dev/null +++ b/test/genericTestCases.test.ts @@ -0,0 +1,85 @@ +import { describe, it, assert } from 'vitest'; +import path from 'path'; +import glob from 'glob'; +import load from 'load-json-file'; +import fs from 'fs'; +import stringify from 'json-stringify-pretty-compact'; +import * as martinez from '../src'; + +function extractExpectedResults(features) { + return features.map((feature) => { + let mode = feature.properties.operation; + var op; + switch (mode) { + case 'union': + op = martinez.union; + break; + case 'intersection': + op = martinez.intersection; + break; + case 'xor': + op = martinez.xor; + break; + case 'diff': + op = martinez.diff; + break; + case 'diff_ba': + op = (a, b) => martinez.diff(b, a); + break; + } + if (op == null) { + throw `Invalid mode: ${mode}`; + } + return { + op: op, + coordinates: feature.geometry.coordinates + }; + }); +} + +const caseDir = path.join(__dirname, 'genericTestCases'); +const testCases = glob.sync(path.join(caseDir, '*.geojson')); +if (testCases.length === 0) { + throw 'No test cases found, this must not happen'; +} + +describe('Generic test cases', () => { + testCases.forEach((testCaseFile) => { + let testName = 'Generic test case: ' + path.basename(testCaseFile); + it(testName, () => { + const data = load.sync(testCaseFile); + if (data.features.length < 2) { + throw `Test case file must contain at least two features, but ${testCaseFile} doesn't.`; + } + + let p1Geometry = data.features[0].geometry; + let p2Geometry = data.features[1].geometry; + + let p1 = + p1Geometry.type === 'Polygon' + ? [p1Geometry.coordinates] + : p1Geometry.coordinates; + let p2 = + p2Geometry.type === 'Polygon' + ? [p2Geometry.coordinates] + : p2Geometry.coordinates; + + let expectedResults = extractExpectedResults(data.features.slice(2)); + + let featureIndex = 2; + for (const expectedResult of expectedResults) { + const result = expectedResult.op(p1, p2); + assert.deepEqual(result, expectedResult.coordinates); + + // Update output data for re-generation mode + data.features[featureIndex].geometry.type = 'MultiPolygon'; + data.features[featureIndex].geometry.coordinates = result; + featureIndex += 1; + } + + if (process.env.REGEN) { + fs.writeFileSync(testCaseFile, stringify(data)); + } + }); + }); +}); From 8611e0409ab1caf7582b1f71d38ef058a0256ab2 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:39:29 +0200 Subject: [PATCH 17/38] deps --- package-lock.json | 1411 +-------------------------------------------- 1 file changed, 1 insertion(+), 1410 deletions(-) diff --git a/package-lock.json b/package-lock.json index d3074d2..80a6277 100644 --- a/package-lock.json +++ b/package-lock.json @@ -126,13 +126,6 @@ "@types/leaflet": "*" } }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { "version": "17.0.45", "dev": true, @@ -143,13 +136,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true, - "license": "ISC" - }, "node_modules/@vitest/ui": { "version": "0.18.1", "dev": true, @@ -192,16 +178,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "dev": true, @@ -246,20 +222,6 @@ "node": ">=4" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/argparse": { "version": "1.0.10", "dev": true, @@ -314,16 +276,6 @@ "platform": "^1.3.3" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "dev": true, @@ -333,26 +285,6 @@ "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" - }, "node_modules/builtin-modules": { "version": "1.1.1", "dev": true, @@ -381,19 +313,6 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/chai": { "version": "4.3.6", "dev": true, @@ -437,34 +356,6 @@ "node": "*" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "dev": true, @@ -484,41 +375,6 @@ "node": ">= 10" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/color-convert": { "version": "1.9.3", "dev": true, @@ -600,19 +456,6 @@ } } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-eql": { "version": "3.0.1", "dev": true, @@ -644,16 +487,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/doctrine": { "version": "3.0.0", "dev": true, @@ -793,16 +626,6 @@ "node": ">=12" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "dev": true, @@ -1077,46 +900,6 @@ "node": ">=4" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "2.0.1", "dev": true, @@ -1199,16 +982,6 @@ "dev": true, "license": "MIT" }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-func-name": { "version": "2.0.0", "dev": true, @@ -1598,19 +1371,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.1.2", "dev": true, @@ -1700,16 +1460,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-number-object": { "version": "1.0.7", "dev": true, @@ -1724,16 +1474,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-regex": { "version": "1.1.4", "dev": true, @@ -1788,19 +1528,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "dev": true, @@ -1920,22 +1647,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lodash": { "version": "4.17.21", "dev": true, @@ -1951,99 +1662,6 @@ "dev": true, "license": "MIT" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/loupe": { "version": "2.3.4", "dev": true, @@ -2113,184 +1731,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mocha/node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/mrmime": { "version": "1.0.1", "dev": true, @@ -2349,16 +1789,6 @@ "semver": "bin/semver" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-run-all": { "version": "4.1.5", "dev": true, @@ -2474,38 +1904,6 @@ "node": ">=0.10.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parent-module": { "version": "1.0.1", "dev": true, @@ -2528,16 +1926,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "dev": true, @@ -2591,19 +1979,6 @@ "dev": true, "license": "ISC" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/pidtree": { "version": "0.3.1", "dev": true, @@ -2709,16 +2084,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/read-pkg": { "version": "3.0.0", "dev": true, @@ -2766,19 +2131,6 @@ "node": ">=4" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", "dev": true, @@ -2852,16 +2204,6 @@ "semver": "bin/semver" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/requires-port": { "version": "1.0.0", "dev": true, @@ -2951,27 +2293,6 @@ "npm": ">=2.0.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/safer-buffer": { "version": "2.1.2", "dev": true, @@ -2990,16 +2311,6 @@ "semver": "bin/semver.js" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/shebang-command": { "version": "1.2.0", "dev": true, @@ -3333,19 +2644,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/totalist": { "version": "3.0.0", "dev": true, @@ -3572,90 +2870,6 @@ "node": ">=0.10.0" } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "dev": true, @@ -3671,74 +2885,6 @@ "engines": { "node": ">=4" } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } }, "dependencies": { @@ -3809,11 +2955,6 @@ "@types/leaflet": "*" } }, - "@types/mocha": { - "version": "https://nexus3.linkurious.net/repository/npm/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, "@types/node": { "version": "17.0.45", "dev": true @@ -3822,12 +2963,6 @@ "version": "4.6.18", "dev": true }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "@vitest/ui": { "version": "0.18.1", "dev": true, @@ -3852,13 +2987,7 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + } }, "ansi-escapes": { "version": "4.3.2", @@ -3884,16 +3013,6 @@ "color-convert": "^1.9.0" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "argparse": { "version": "1.0.10", "dev": true, @@ -3932,12 +3051,6 @@ "platform": "^1.3.3" } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "dev": true, @@ -3946,21 +3059,6 @@ "concat-map": "0.0.1" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "builtin-modules": { "version": "1.1.1", "dev": true @@ -3977,12 +3075,6 @@ "version": "3.1.0", "dev": true }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, "chai": { "version": "4.3.6", "dev": true, @@ -4013,22 +3105,6 @@ "version": "1.0.2", "dev": true }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, "cli-cursor": { "version": "3.1.0", "dev": true, @@ -4040,34 +3116,6 @@ "version": "3.0.0", "dev": true }, - "cliui": { - "version": "7.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "color-convert": { "version": "1.9.3", "dev": true, @@ -4119,12 +3167,6 @@ "ms": "2.1.2" } }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, "deep-eql": { "version": "3.0.1", "dev": true, @@ -4144,12 +3186,6 @@ "object-keys": "^1.1.1" } }, - "diff": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, "doctrine": { "version": "3.0.0", "dev": true, @@ -4247,12 +3283,6 @@ "dev": true, "optional": true }, - "escalade": { - "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "dev": true @@ -4432,31 +3462,6 @@ "flat-cache": "^2.0.1" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, "flat-cache": { "version": "2.0.1", "dev": true, @@ -4504,12 +3509,6 @@ "version": "1.0.1", "dev": true }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "get-func-name": { "version": "2.0.0", "dev": true @@ -4751,15 +3750,6 @@ "has-bigints": "^1.0.1" } }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, "is-boolean-object": { "version": "1.1.2", "dev": true, @@ -4805,12 +3795,6 @@ "version": "2.0.2", "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "is-number-object": { "version": "1.0.7", "dev": true, @@ -4818,12 +3802,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, "is-regex": { "version": "1.1.4", "dev": true, @@ -4853,12 +3831,6 @@ "has-symbols": "^1.0.2" } }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, "is-weakref": { "version": "1.0.2", "dev": true, @@ -4936,15 +3908,6 @@ "version": "0.4.2", "dev": true }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, "lodash": { "version": "4.17.21", "dev": true @@ -4957,67 +3920,6 @@ "version": "4.6.0", "dev": true }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "loupe": { "version": "2.3.4", "dev": true, @@ -5062,130 +3964,6 @@ "minimist": "^1.2.6" } }, - "mocha": { - "version": "https://nexus3.linkurious.net/repository/npm/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "mrmime": { "version": "1.0.1", "dev": true @@ -5226,12 +4004,6 @@ } } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, "npm-run-all": { "version": "4.1.5", "dev": true, @@ -5303,24 +4075,6 @@ "version": "1.0.2", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, "parent-module": { "version": "1.0.1", "dev": true, @@ -5335,12 +4089,6 @@ "error-ex": "^1.2.0" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "dev": true @@ -5374,12 +4122,6 @@ "version": "1.0.0", "dev": true }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, "pidtree": { "version": "0.3.1", "dev": true @@ -5438,15 +4180,6 @@ "side-channel": "^1.0.4" } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, "read-pkg": { "version": "3.0.0", "dev": true, @@ -5480,15 +4213,6 @@ } } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, "regexp.prototype.flags": { "version": "1.4.3", "dev": true, @@ -5531,12 +4255,6 @@ } } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, "requires-port": { "version": "1.0.0", "dev": true @@ -5590,12 +4308,6 @@ "tslib": "^1.9.0" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, "safer-buffer": { "version": "2.1.2", "dev": true @@ -5608,15 +4320,6 @@ "version": "6.3.0", "dev": true }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, "shebang-command": { "version": "1.2.0", "dev": true, @@ -5838,15 +4541,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, "totalist": { "version": "3.0.0", "dev": true @@ -5962,64 +4656,6 @@ "version": "1.2.3", "dev": true }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "wrappy": { "version": "1.0.2", "dev": true @@ -6030,51 +4666,6 @@ "requires": { "mkdirp": "^0.5.1" } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://nexus3.linkurious.net/repository/npm/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } } } From 2676f1dbb172b87fc2ef6f165beedd5b98059f01 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:40:16 +0200 Subject: [PATCH 18/38] Node version --- .github/workflows/nodejs.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index e772a1c..23b3b15 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -5,25 +5,24 @@ name: Node.js CI on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] jobs: build: - runs-on: ubuntu-latest strategy: matrix: - node-version: [10.x, 12.x] + node-version: [14.x, 16.x] steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm run build --if-present - - run: npm test + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run build --if-present + - run: npm test From dac882048155f0d38280dc237b90ccc84ee1293b Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:47:17 +0200 Subject: [PATCH 19/38] Job --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 23b3b15..f9ebe9b 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - run: npm ci From 23f3501babe03e062440c5b61911d01c7ffe4b5e Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:51:53 +0200 Subject: [PATCH 20/38] Deps --- package-lock.json | 2095 +++++++++++++++++++++++---------------------- package.json | 8 +- 2 files changed, 1066 insertions(+), 1037 deletions(-) diff --git a/package-lock.json b/package-lock.json index b85ead5..9468628 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,12 +22,12 @@ "@types/node": "^17.0.8", "@vitest/ui": "^0.18.1", "benchmark": "^2.1.4", - "eslint": "^6.8.0", + "eslint": "^8.20.0", "eslint-plugin-import-order": "^2.1.4", - "eslint-plugin-jsdoc": "^20.0.2", + "eslint-plugin-jsdoc": "^39.3.3", "eslint-plugin-promise": "^3.8.0", "geojson-project": "^1.0.0", - "http-server": "^0.12.1", + "http-server": "^14.1.1", "json-stringify-pretty-compact": "^2.0.0", "leaflet": "^1.2.0", "leaflet-editable": "^1.2.0", @@ -39,38 +39,64 @@ "vitest": "^0.18.1" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", + "node_modules/@es-joy/jsdoccomment": { + "version": "0.31.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", + "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.18.6" + "comment-parser": "1.3.1", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "~3.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^14 || ^16 || ^17 || ^18" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=6.9.0" + "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "dev": true, @@ -145,7 +171,9 @@ } }, "node_modules/acorn": { - "version": "7.4.1", + "version": "8.7.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "license": "MIT", "bin": { @@ -157,6 +185,8 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -165,6 +195,8 @@ }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -178,37 +210,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { - "version": "4.1.1", + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -223,12 +232,11 @@ } }, "node_modules/argparse": { - "version": "1.0.10", + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "license": "Python-2.0" }, "node_modules/assertion-error": { "version": "1.1.0", @@ -238,14 +246,6 @@ "node": "*" } }, - "node_modules/astral-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -261,11 +261,15 @@ "license": "MIT" }, "node_modules/basic-auth": { - "version": "1.1.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dev": true, - "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/benchmark": { @@ -308,6 +312,8 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -344,11 +350,6 @@ "node": ">=4" } }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, "node_modules/check-error": { "version": "1.0.2", "dev": true, @@ -357,25 +358,6 @@ "node": "*" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, "node_modules/color-convert": { "version": "1.9.3", "dev": true, @@ -389,20 +371,14 @@ "dev": true, "license": "MIT" }, - "node_modules/colors": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/comment-parser": { - "version": "0.7.6", + "version": "1.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6.0.0" + "node": ">= 12.0.0" } }, "node_modules/concat-map": { @@ -470,6 +446,8 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, @@ -499,25 +477,6 @@ "node": ">=6.0.0" } }, - "node_modules/ecstatic": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - }, - "bin": { - "ecstatic": "lib/ecstatic.js" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/error-ex": { "version": "1.3.2", "dev": true, @@ -636,45 +595,45 @@ } }, "node_modules/eslint": { - "version": "6.8.0", + "version": "8.20.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -682,7 +641,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -705,24 +664,38 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "20.4.0", + "version": "39.3.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.3.tgz", + "integrity": "sha512-K/DAjKRUNaUTf0KQhI9PvsF+Y3mGDx/j0pofXsJCQe/tmRsRweBIXR353c8nAro0lytZYEf7l0PluBpzKDiHxw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "comment-parser": "^0.7.2", - "debug": "^4.1.1", - "jsdoctypeparser": "^6.1.0", - "lodash": "^4.17.15", - "object.entries-ponyfill": "^1.0.1", - "regextras": "^0.7.0", - "semver": "^6.3.0", - "spdx-expression-parse": "^3.0.0" + "@es-joy/jsdoccomment": "~0.31.0", + "comment-parser": "1.3.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.4.0", + "semver": "^7.3.7", + "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": ">=6" + "node": "^14 || ^16 || ^17 || ^18" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0" + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-plugin-promise": { @@ -734,103 +707,255 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", + "version": "7.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint-utils": { - "version": "1.4.3", + "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" } }, "node_modules/eslint-visitor-keys": { - "version": "1.3.0", + "version": "3.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/espree": { - "version": "6.2.1", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/esprima": { - "version": "4.0.1", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/esquery": { - "version": "1.4.0", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10" + "node": ">=7.0.0" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=4.0" + "node": ">= 8" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/espree": { + "version": "9.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "estraverse": "^5.2.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { - "version": "4.3.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -848,74 +973,58 @@ "dev": true, "license": "MIT" }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/file-entry-cache": { - "version": "5.0.1", + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flat-cache": { - "version": "2.0.1", + "version": "3.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "2.0.2", + "version": "3.2.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true, "license": "ISC" }, @@ -940,6 +1049,8 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, @@ -1021,6 +1132,8 @@ }, "node_modules/glob": { "version": "7.2.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "license": "ISC", "dependencies": { @@ -1039,22 +1152,26 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", + "version": "6.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/globals": { - "version": "12.4.0", + "version": "13.16.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -1133,8 +1250,9 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } @@ -1144,6 +1262,18 @@ "dev": true, "license": "ISC" }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/http-proxy": { "version": "1.18.1", "dev": true, @@ -1158,191 +1288,167 @@ } }, "node_modules/http-server": { - "version": "0.12.3", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "dev": true, - "license": "MIT", "dependencies": { - "basic-auth": "^1.0.3", - "colors": "^1.4.0", + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", "corser": "^2.0.1", - "ecstatic": "^3.3.2", - "http-proxy": "^1.18.0", - "minimist": "^1.2.5", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", "opener": "^1.5.1", - "portfinder": "^1.0.25", + "portfinder": "^1.0.28", "secure-compare": "3.0.1", - "union": "~0.5.0" + "union": "~0.5.0", + "url-join": "^4.0.1" }, "bin": { - "hs": "bin/http-server", "http-server": "bin/http-server" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/http-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/http-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "7.3.3", + "node_modules/http-server/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8.0.0" + "node": ">=7.0.0" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/http-server/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/http-server/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/http-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">= 4" } }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/imurmurhash": { + "version": "0.1.4", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.8.19" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "once": "^1.3.0", + "wrappy": "1" } }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, "node_modules/internal-slot": { "version": "1.0.3", "dev": true, @@ -1425,22 +1531,18 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1545,32 +1647,27 @@ "dev": true, "license": "ISC" }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/js-yaml": { - "version": "3.14.1", + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdoctypeparser": { - "version": "6.1.0", + "node_modules/jsdoc-type-pratt-parser": { + "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true, "license": "MIT", - "bin": { - "jsdoctypeparser": "bin/jsdoctypeparser" - }, "engines": { - "node": ">=6" + "node": ">=12.0.0" } }, "node_modules/json-parse-better-errors": { @@ -1580,6 +1677,8 @@ }, "node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, @@ -1612,12 +1711,14 @@ "license": "WTFPL" }, "node_modules/levn": { - "version": "0.3.0", + "version": "0.4.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -1663,6 +1764,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/loupe": { "version": "2.3.4", "dev": true, @@ -1671,6 +1779,19 @@ "get-func-name": "^2.0.0" } }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/magic-string": { "version": "0.25.9", "dev": true, @@ -1688,8 +1809,9 @@ }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -1697,14 +1819,6 @@ "node": ">=4" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/minimatch": { "version": "3.1.2", "dev": true, @@ -1745,11 +1859,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, "node_modules/nanoid": { "version": "3.3.4", "dev": true, @@ -1847,32 +1956,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries-ponyfill": { - "version": "1.0.1", - "dev": true - }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/opener": { "version": "1.5.2", "dev": true, @@ -1882,31 +1975,27 @@ } }, "node_modules/optionator": { - "version": "0.8.3", + "version": "0.9.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -1929,6 +2018,8 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -2049,22 +2140,19 @@ } }, "node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", + "version": "1.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">= 0.8.0" } }, "node_modules/punycode": { "version": "2.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "license": "MIT", "engines": { @@ -2149,19 +2237,16 @@ } }, "node_modules/regexpp": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/regextras": { - "version": "0.7.1", + "version": "3.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.1.14" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/reify": { @@ -2228,26 +2313,18 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/rimraf": { - "version": "2.6.3", + "version": "3.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "license": "ISC", "dependencies": { @@ -2255,6 +2332,9 @@ }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/robust-predicates": { @@ -2275,29 +2355,17 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/secure-compare": { "version": "3.0.1", @@ -2305,11 +2373,19 @@ "license": "MIT" }, "node_modules/semver": { - "version": "6.3.0", + "version": "7.3.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/shebang-command": { @@ -2349,11 +2425,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, "node_modules/sirv": { "version": "2.0.2", "dev": true, @@ -2367,27 +2438,6 @@ "node": ">= 10" } }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "dev": true, @@ -2433,43 +2483,6 @@ "version": "0.1.4", "license": "MIT" }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.padend": { "version": "3.1.3", "dev": true, @@ -2513,14 +2526,16 @@ } }, "node_modules/strip-ansi": { - "version": "5.2.0", + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -2533,6 +2548,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -2564,56 +2581,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table": { - "version": "5.4.6", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/text-table": { "version": "0.2.0", "dev": true, "license": "MIT" }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, "node_modules/tinypool": { "version": "0.2.4", "dev": true, @@ -2634,17 +2606,6 @@ "node": ">=14.0.0" } }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/totalist": { "version": "3.0.0", "dev": true, @@ -2653,17 +2614,14 @@ "node": ">=6" } }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, "node_modules/type-check": { - "version": "0.3.2", + "version": "0.4.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" @@ -2678,11 +2636,16 @@ } }, "node_modules/type-fest": { - "version": "0.8.1", + "version": "0.20.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typescript": { @@ -2723,6 +2686,8 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2730,9 +2695,10 @@ } }, "node_modules/url-join": { - "version": "2.0.5", - "dev": true, - "license": "MIT" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true }, "node_modules/v8-compile-cache": { "version": "2.3.0", @@ -2837,6 +2803,18 @@ } } }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/which": { "version": "1.3.1", "dev": true, @@ -2865,6 +2843,8 @@ }, "node_modules/word-wrap": { "version": "1.2.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "license": "MIT", "engines": { @@ -2873,42 +2853,65 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" }, - "node_modules/write": { - "version": "1.0.3", + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } + "license": "ISC" } }, "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", + "@es-joy/jsdoccomment": { + "version": "0.31.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", + "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "comment-parser": "1.3.1", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "~3.1.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" } }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@polka/url": { "version": "1.0.0-next.21", "dev": true @@ -2972,16 +2975,22 @@ } }, "acorn": { - "version": "7.4.1", + "version": "8.7.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-jsx": { "version": "5.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "ajv": { "version": "6.12.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -2990,21 +2999,10 @@ "uri-js": "^4.2.2" } }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, "ansi-regex": { - "version": "4.1.1", + "version": "5.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -3015,20 +3013,15 @@ } }, "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "assertion-error": { "version": "1.1.0", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "dev": true - }, "async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -3043,8 +3036,13 @@ "dev": true }, "basic-auth": { - "version": "1.1.0", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } }, "benchmark": { "version": "2.1.4", @@ -3076,6 +3074,8 @@ }, "callsites": { "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "chai": { @@ -3100,25 +3100,10 @@ "supports-color": "^5.3.0" } }, - "chardet": { - "version": "0.7.0", - "dev": true - }, "check-error": { "version": "1.0.2", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "dev": true - }, "color-convert": { "version": "1.9.3", "dev": true, @@ -3130,12 +3115,10 @@ "version": "1.1.3", "dev": true }, - "colors": { - "version": "1.4.0", - "dev": true - }, "comment-parser": { - "version": "0.7.6", + "version": "1.3.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true }, "concat-map": { @@ -3179,6 +3162,8 @@ }, "deep-is": { "version": "0.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "define-properties": { @@ -3196,20 +3181,6 @@ "esutils": "^2.0.2" } }, - "ecstatic": { - "version": "3.3.2", - "dev": true, - "requires": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - } - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, "error-ex": { "version": "1.3.2", "dev": true, @@ -3291,46 +3262,144 @@ "dev": true }, "eslint": { - "version": "6.8.0", + "version": "8.20.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "eslint-plugin-import-order": { @@ -3343,17 +3412,26 @@ } }, "eslint-plugin-jsdoc": { - "version": "20.4.0", + "version": "39.3.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.3.tgz", + "integrity": "sha512-K/DAjKRUNaUTf0KQhI9PvsF+Y3mGDx/j0pofXsJCQe/tmRsRweBIXR353c8nAro0lytZYEf7l0PluBpzKDiHxw==", "dev": true, "requires": { - "comment-parser": "^0.7.2", - "debug": "^4.1.1", - "jsdoctypeparser": "^6.1.0", - "lodash": "^4.17.15", - "object.entries-ponyfill": "^1.0.1", - "regextras": "^0.7.0", - "semver": "^6.3.0", - "spdx-expression-parse": "^3.0.0" + "@es-joy/jsdoccomment": "~0.31.0", + "comment-parser": "1.3.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.4.0", + "semver": "^7.3.7", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } } }, "eslint-plugin-promise": { @@ -3361,65 +3439,69 @@ "dev": true }, "eslint-scope": { - "version": "5.1.1", + "version": "7.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-utils": { - "version": "1.4.3", + "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.3.0", + "version": "3.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "6.2.1", + "version": "9.3.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" } }, - "esprima": { - "version": "4.0.1", - "dev": true - }, "esquery": { "version": "1.4.0", "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } } }, "esrecurse": { "version": "4.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -3430,52 +3512,47 @@ "version": "4.0.7", "dev": true }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "fast-deep-equal": { "version": "3.1.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { - "version": "5.0.1", + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "flat-cache": { - "version": "2.0.1", + "version": "3.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", + "version": "3.2.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "follow-redirects": { @@ -3484,6 +3561,8 @@ }, "fs.realpath": { "version": "1.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "function-bind": { @@ -3535,6 +3614,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3546,17 +3627,21 @@ } }, "glob-parent": { - "version": "5.1.2", + "version": "6.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { - "version": "12.4.0", + "version": "13.16.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "graceful-fs": { @@ -3598,12 +3683,23 @@ }, "he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hosted-git-info": { "version": "2.8.9", "dev": true }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, "http-proxy": { "version": "1.18.1", "dev": true, @@ -3614,81 +3710,30 @@ } }, "http-server": { - "version": "0.12.3", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "dev": true, "requires": { - "basic-auth": "^1.0.3", - "colors": "^1.4.0", + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", "corser": "^2.0.1", - "ecstatic": "^3.3.2", - "http-proxy": "^1.18.0", - "minimist": "^1.2.5", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", "opener": "^1.5.1", - "portfinder": "^1.0.25", + "portfinder": "^1.0.28", "secure-compare": "3.0.1", - "union": "~0.5.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "inquirer": { - "version": "7.3.3", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -3696,6 +3741,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -3704,6 +3751,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -3711,21 +3760,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -3733,6 +3781,51 @@ } } }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://nexus3.linkurious.net/repository/npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, "internal-slot": { "version": "1.0.3", "dev": true, @@ -3781,14 +3874,14 @@ }, "is-extglob": { "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-glob": { "version": "4.0.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -3845,20 +3938,19 @@ "version": "2.0.0", "dev": true }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, "js-yaml": { - "version": "3.14.1", + "version": "4.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, - "jsdoctypeparser": { - "version": "6.1.0", + "jsdoc-type-pratt-parser": { + "version": "3.1.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true }, "json-parse-better-errors": { @@ -3867,6 +3959,8 @@ }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { @@ -3890,11 +3984,13 @@ "dev": true }, "levn": { - "version": "0.3.0", + "version": "0.4.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "load-json-file": { @@ -3923,6 +4019,12 @@ "version": "4.6.0", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "loupe": { "version": "2.3.4", "dev": true, @@ -3930,6 +4032,15 @@ "get-func-name": "^2.0.0" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "magic-string": { "version": "0.25.9", "dev": true, @@ -3943,10 +4054,8 @@ }, "mime": { "version": "1.6.0", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "minimatch": { @@ -3975,10 +4084,6 @@ "version": "2.1.2", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "dev": true - }, "nanoid": { "version": "3.3.4", "dev": true @@ -4040,46 +4145,37 @@ "object-keys": "^1.1.1" } }, - "object.entries-ponyfill": { - "version": "1.0.1", - "dev": true - }, "once": { "version": "1.4.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, "opener": { "version": "1.5.2", "dev": true }, "optionator": { - "version": "0.8.3", + "version": "0.9.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true - }, "parent-module": { "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -4094,6 +4190,8 @@ }, "path-is-absolute": { "version": "1.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { @@ -4165,15 +4263,15 @@ } }, "prelude-ls": { - "version": "1.1.2", - "dev": true - }, - "progress": { - "version": "2.0.3", + "version": "1.2.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "punycode": { "version": "2.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { @@ -4226,11 +4324,9 @@ } }, "regexpp": { - "version": "2.0.1", - "dev": true - }, - "regextras": { - "version": "0.7.1", + "version": "3.2.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "reify": { @@ -4273,18 +4369,14 @@ }, "resolve-from": { "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "rimraf": { - "version": "2.6.3", + "version": "3.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -4300,19 +4392,16 @@ "fsevents": "~2.3.2" } }, - "run-async": { - "version": "2.4.1", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "rxjs": { - "version": "6.6.7", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "secure-compare": { @@ -4320,8 +4409,13 @@ "dev": true }, "semver": { - "version": "6.3.0", - "dev": true + "version": "7.3.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "shebang-command": { "version": "1.2.0", @@ -4347,10 +4441,6 @@ "object-inspect": "^1.9.0" } }, - "signal-exit": { - "version": "3.0.7", - "dev": true - }, "sirv": { "version": "2.0.2", "dev": true, @@ -4360,21 +4450,6 @@ "totalist": "^3.0.0" } }, - "slice-ansi": { - "version": "2.1.0", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - } - } - }, "source-map-js": { "version": "1.0.2", "dev": true @@ -4410,32 +4485,6 @@ "splaytree": { "version": "0.1.4" }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "string.prototype.padend": { "version": "3.1.3", "dev": true, @@ -4464,10 +4513,12 @@ } }, "strip-ansi": { - "version": "5.2.0", + "version": "6.0.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -4476,6 +4527,8 @@ }, "strip-json-comments": { "version": "3.1.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -4489,43 +4542,10 @@ "version": "1.0.0", "dev": true }, - "table": { - "version": "5.4.6", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, "text-table": { "version": "0.2.0", "dev": true }, - "through": { - "version": "2.3.8", - "dev": true - }, "tinypool": { "version": "0.2.4", "dev": true @@ -4537,26 +4557,17 @@ "version": "1.0.0", "dev": true }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "totalist": { "version": "3.0.0", "dev": true }, - "tslib": { - "version": "1.14.1", - "dev": true - }, "type-check": { - "version": "0.3.2", + "version": "0.4.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-detect": { @@ -4564,7 +4575,9 @@ "dev": true }, "type-fest": { - "version": "0.8.1", + "version": "0.20.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typescript": { @@ -4590,13 +4603,17 @@ }, "uri-js": { "version": "4.4.1", + "resolved": "https://nexus3.linkurious.net/repository/npm/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "url-join": { - "version": "2.0.5", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, "v8-compile-cache": { @@ -4637,6 +4654,15 @@ "vite": "^2.9.12 || ^3.0.0-0" } }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, "which": { "version": "1.3.1", "dev": true, @@ -4657,18 +4683,21 @@ }, "word-wrap": { "version": "1.2.3", + "resolved": "https://nexus3.linkurious.net/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrappy": { "version": "1.0.2", + "resolved": "https://nexus3.linkurious.net/repository/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "write": { - "version": "1.0.3", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://nexus3.linkurious.net/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } } diff --git a/package.json b/package.json index ffd665a..fefecfc 100644 --- a/package.json +++ b/package.json @@ -49,20 +49,20 @@ "@types/leaflet": "^1.7.8", "@types/leaflet-editable": "^1.2.1", "@types/node": "^17.0.8", + "@vitest/ui": "^0.18.1", "benchmark": "^2.1.4", - "eslint": "^6.8.0", + "eslint": "^8.20.0", "eslint-plugin-import-order": "^2.1.4", - "eslint-plugin-jsdoc": "^20.0.2", + "eslint-plugin-jsdoc": "^39.3.3", "eslint-plugin-promise": "^3.8.0", "geojson-project": "^1.0.0", - "http-server": "^0.12.1", + "http-server": "^14.1.1", "json-stringify-pretty-compact": "^2.0.0", "leaflet": "^1.2.0", "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", "npm-run-all": "^4.1.5", "reify": "^0.20.12", - "@vitest/ui": "^0.18.1", "typescript": "^4.6.4", "vite": "^3.0.0", "vitest": "^0.18.1" From 4dc1453aee60c99fe1d0bee4c11b74426bf92fa4 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Tue, 19 Jul 2022 00:54:38 +0200 Subject: [PATCH 21/38] Registry change --- package-lock.json | 2687 +++++++++++++++++++++++++++++---------------- 1 file changed, 1715 insertions(+), 972 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9468628..3fcda56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,10 +41,9 @@ }, "node_modules/@es-joy/jsdoccomment": { "version": "0.31.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", "dev": true, - "license": "MIT", "dependencies": { "comment-parser": "1.3.1", "esquery": "^1.4.0", @@ -56,10 +55,9 @@ }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -77,10 +75,9 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -92,90 +89,99 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@polka/url": { "version": "1.0.0-next.21", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true }, "node_modules/@turf/union": { "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-4.7.3.tgz", + "integrity": "sha512-6mF3CJKJXGEUa9lNNM3yWc1dqEjEsoB92UoJPa0yr8zQOhgd4va1MoLh9QXHnWsGlevRa74Ob1e12mZxffcfdA==", "dev": true, - "license": "MIT", "dependencies": { "jsts": "1.3.0" } }, "node_modules/@types/chai": { "version": "4.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true }, "node_modules/@types/chai-subset": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*" } }, "node_modules/@types/geojson": { "version": "1.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", + "dev": true }, "node_modules/@types/jsts": { "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@types/jsts/-/jsts-0.17.12.tgz", + "integrity": "sha512-CVRlGD914G8Lce/r6PBDCNX5KSfdI5ZXCJ4cefy09/5gZBMEy3rcv5prjJuSHusfDaKMnqWc9Asz4I08q/YrAQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/openlayers": "*" } }, "node_modules/@types/leaflet": { "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.7.11.tgz", + "integrity": "sha512-VwAYom2pfIAf/pLj1VR5aLltd4tOtHyvfaJlNYCoejzP2nu52PrMi1ehsLRMUS+bgafmIIKBV1cMfKeS+uJ0Vg==", "dev": true, - "license": "MIT", "dependencies": { "@types/geojson": "*" } }, "node_modules/@types/leaflet-editable": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/leaflet-editable/-/leaflet-editable-1.2.1.tgz", + "integrity": "sha512-7Oms1HgulWiclkI0s1XLmr1yRylNoJX8sVUfAv9+28JzwWbKbLcQ6//vhFEOmoMlBQyL5veogKpUUb5qeF+Qyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/leaflet": "*" } }, "node_modules/@types/node": { "version": "17.0.45", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true }, "node_modules/@types/openlayers": { "version": "4.6.18", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/openlayers/-/openlayers-4.6.18.tgz", + "integrity": "sha512-srqcI4chyzzs11ZhYpnZqT6Lh1v/O5EXh+pPENDtAwhE7CM31h+JsGomt+ioGhuNVJ96Jl4UkHR1Lllb/XrQAA==", + "dev": true }, "node_modules/@vitest/ui": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.18.1.tgz", + "integrity": "sha512-JgYewAWfx9fN/cjOW6fPh63j9EDiHmDpVXzvp7UJeza+26QoYHXVsgjCmnzP/jjH3i/LkOXlJLqEJw/nJQ+IJg==", "dev": true, - "license": "MIT", "dependencies": { "sirv": "^2.0.2" } }, "node_modules/acorn": { "version": "8.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-8.7.1.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -185,20 +191,18 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/ajv/-/ajv-6.12.6.tgz", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -212,36 +216,39 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" + "dev": true }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -257,8 +264,9 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/basic-auth": { "version": "2.0.1", @@ -274,8 +282,9 @@ }, "node_modules/benchmark": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.4", "platform": "^1.3.3" @@ -283,8 +292,9 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -292,16 +302,18 @@ }, "node_modules/builtin-modules": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -312,18 +324,18 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/callsites/-/callsites-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/chai": { "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -338,89 +350,91 @@ } }, "node_modules/chalk": { - "version": "2.4.2", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/check-error": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/color-convert": { - "version": "1.9.3", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/comment-parser": { "version": "1.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12.0.0" } }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/corser": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/cross-spawn": { - "version": "6.0.5", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">= 8" } }, "node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -435,8 +449,9 @@ }, "node_modules/deep-eql": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -446,15 +461,15 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-is/-/deep-is-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/define-properties": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, - "license": "MIT", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -468,8 +483,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -479,16 +495,18 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -523,8 +541,9 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -539,9 +558,10 @@ }, "node_modules/esbuild": { "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz", + "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -571,268 +591,331 @@ "esbuild-windows-arm64": "0.14.49" } }, - "node_modules/esbuild-darwin-64": { + "node_modules/esbuild-android-64": { "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", + "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/esbuild-android-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", + "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, - "node_modules/eslint": { - "version": "8.20.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "node_modules/esbuild-darwin-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", + "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/eslint-plugin-import-order": { - "version": "2.1.4", + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", + "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^1.1.1", - "lodash.cond": "^4.2.0", - "lodash.find": "^4.2.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=2" + "node": ">=12" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "39.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.3.tgz", - "integrity": "sha512-K/DAjKRUNaUTf0KQhI9PvsF+Y3mGDx/j0pofXsJCQe/tmRsRweBIXR353c8nAro0lytZYEf7l0PluBpzKDiHxw==", + "node_modules/esbuild-freebsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", + "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@es-joy/jsdoccomment": "~0.31.0", - "comment-parser": "1.3.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "semver": "^7.3.7", - "spdx-expression-parse": "^3.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^14 || ^16 || ^17 || ^18" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">=12" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", + "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint-plugin-promise": { - "version": "3.8.0", + "node_modules/esbuild-linux-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", + "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "ISC", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "node_modules/esbuild-linux-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", + "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/esbuild-linux-arm": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", + "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "node": ">=12" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/esbuild-linux-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", + "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", + "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", + "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=12" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", + "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=12" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/esbuild-linux-s390x": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", + "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/esbuild-netbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", + "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/esbuild-openbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", + "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 8" + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", + "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", + "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", + "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { + "node_modules/esbuild-windows-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", + "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -840,84 +923,160 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, - "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/eslint-plugin-import-order": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-order/-/eslint-plugin-import-order-2.1.4.tgz", + "integrity": "sha512-cHThJ45zFx5UtRZ+Jd6XO89bLriKkdckAHZoSxknlK3BELmAO6Gqe74A7j8rvL+1PEyNJF3Fsil/Rjwx8cqOow==", + "deprecated": "Use eslint-plugin-import instead (order rule)", "dev": true, - "license": "MIT", + "dependencies": { + "builtin-modules": "^1.1.1", + "lodash.cond": "^4.2.0", + "lodash.find": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=2" } }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/eslint-plugin-jsdoc": { + "version": "39.3.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.3.tgz", + "integrity": "sha512-K/DAjKRUNaUTf0KQhI9PvsF+Y3mGDx/j0pofXsJCQe/tmRsRweBIXR353c8nAro0lytZYEf7l0PluBpzKDiHxw==", "dev": true, - "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "@es-joy/jsdoccomment": "~0.31.0", + "comment-parser": "1.3.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.4.0", + "semver": "^7.3.7", + "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || ^17 || ^18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/eslint-plugin-promise": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "eslint-visitor-keys": "^2.0.0" }, - "bin": { - "node-which": "bin/node-which" + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/espree": { "version": "9.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-9.3.2.tgz", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", @@ -929,8 +1088,9 @@ }, "node_modules/esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -940,10 +1100,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -962,44 +1121,42 @@ }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/eventemitter3": { "version": "4.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -1009,10 +1166,9 @@ }, "node_modules/flat-cache": { "version": "3.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/flat-cache/-/flat-cache-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -1023,13 +1179,14 @@ }, "node_modules/flatted": { "version": "3.2.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-3.2.6.tgz", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "dev": true, "funding": [ { @@ -1037,7 +1194,6 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -1049,20 +1205,35 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "license": "ISC" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, "node_modules/function-bind": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/function.prototype.name": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -1078,34 +1249,39 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/geojson-project": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/geojson-project/-/geojson-project-1.0.1.tgz", + "integrity": "sha512-9x+VIogg1QQotqPUgg6EQqAnj6EANZQTAh/kKXsPO4WcaM4TukrAf6PnwNggkOUm5oAduoQTG1YiQOxY+6XAIw==", + "dev": true }, "node_modules/get-func-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -1117,8 +1293,9 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -1132,10 +1309,9 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.3.tgz", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1153,10 +1329,9 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -1166,10 +1341,9 @@ }, "node_modules/globals": { "version": "13.16.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-13.16.0.tgz", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -1182,13 +1356,15 @@ }, "node_modules/graceful-fs": { "version": "4.2.10", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "node_modules/has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -1198,24 +1374,27 @@ }, "node_modules/has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -1225,8 +1404,9 @@ }, "node_modules/has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1236,8 +1416,9 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -1259,8 +1440,9 @@ }, "node_modules/hosted-git-info": { "version": "2.8.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", @@ -1276,8 +1458,9 @@ }, "node_modules/http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -1314,76 +1497,6 @@ "node": ">=12" } }, - "node_modules/http-server/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/http-server/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/http-server/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/http-server/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/http-server/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-server/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -1398,20 +1511,18 @@ }, "node_modules/ignore": { "version": "5.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ignore/-/ignore-5.2.0.tgz", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1425,18 +1536,18 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/inflight/-/inflight-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1444,15 +1555,15 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/internal-slot": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -1464,13 +1575,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -1480,8 +1593,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -1495,8 +1609,9 @@ }, "node_modules/is-callable": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1506,8 +1621,9 @@ }, "node_modules/is-core-module": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, - "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -1517,8 +1633,9 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1531,20 +1648,18 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -1554,8 +1669,9 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1565,8 +1681,9 @@ }, "node_modules/is-number-object": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1579,8 +1696,9 @@ }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -1594,8 +1712,9 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -1605,8 +1724,9 @@ }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1619,8 +1739,9 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -1633,8 +1754,9 @@ }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -1644,15 +1766,15 @@ }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1662,60 +1784,63 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.0.0" } }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json-stringify-pretty-compact": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", + "dev": true }, "node_modules/jsts": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsts/-/jsts-1.3.0.tgz", + "integrity": "sha512-uFcaiZ5ba3Y6lfHNFikk64Kdkfx01iq3GE+K2S2k95uDcJcKxMusMd2RGgYWeS8EeUVX6eadOqwEzwA8yyGOaQ==", "dev": true, - "license": "(EDL-1.0 OR EPL-1.0)", "engines": { "node": ">= 4" } }, "node_modules/leaflet": { "version": "1.8.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz", + "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==", + "dev": true }, "node_modules/leaflet-editable": { "version": "1.2.0", - "dev": true, - "license": "WTFPL" + "resolved": "https://registry.npmjs.org/leaflet-editable/-/leaflet-editable-1.2.0.tgz", + "integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==", + "dev": true }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/levn/-/levn-0.4.1.tgz", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -1726,8 +1851,9 @@ }, "node_modules/load-json-file": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -1740,8 +1866,9 @@ }, "node_modules/local-pkg": { "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" }, @@ -1751,40 +1878,42 @@ }, "node_modules/lodash": { "version": "4.17.21", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.cond": { "version": "4.5.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", + "dev": true }, "node_modules/lodash.find": { "version": "4.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", + "integrity": "sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/loupe": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.0" } }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -1794,14 +1923,17 @@ }, "node_modules/magic-string": { "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, - "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.8" } }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" @@ -1821,8 +1953,9 @@ }, "node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1832,13 +1965,15 @@ }, "node_modules/minimist": { "version": "1.2.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -1848,21 +1983,24 @@ }, "node_modules/mrmime": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -1872,18 +2010,21 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/nice-try": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -1893,16 +2034,18 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/npm-run-all": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -1923,26 +2066,167 @@ "node": ">= 4" } }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/object-inspect": { "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -1958,28 +2242,27 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/once/-/once-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/opener": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/optionator": { "version": "0.9.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/optionator/-/optionator-0.9.1.tgz", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -1994,10 +2277,9 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/parent-module/-/parent-module-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -2007,8 +2289,9 @@ }, "node_modules/parse-json": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, - "license": "MIT", "dependencies": { "error-ex": "^1.2.0" }, @@ -2018,31 +2301,33 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { - "version": "2.0.1", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, - "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -2052,29 +2337,33 @@ }, "node_modules/path-type/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/picocolors": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/pidtree": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -2084,21 +2373,24 @@ }, "node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/platform": { "version": "1.3.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true }, "node_modules/portfinder": { "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, - "license": "MIT", "dependencies": { "async": "^2.6.2", "debug": "^3.1.1", @@ -2110,14 +2402,17 @@ }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/postcss": { "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "dev": true, "funding": [ { @@ -2129,7 +2424,6 @@ "url": "https://tidelift.com/funding/github/npm/postcss" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -2141,28 +2435,27 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/punycode": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/punycode/-/punycode-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qs": { "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -2175,8 +2468,9 @@ }, "node_modules/read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, - "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -2188,8 +2482,9 @@ }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -2202,8 +2497,9 @@ }, "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -2214,16 +2510,18 @@ }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -2238,10 +2536,9 @@ }, "node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexpp/-/regexpp-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -2251,8 +2548,9 @@ }, "node_modules/reify": { "version": "0.20.12", + "resolved": "https://registry.npmjs.org/reify/-/reify-0.20.12.tgz", + "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^6.1.1", "acorn-dynamic-import": "^4.0.0", @@ -2265,8 +2563,9 @@ }, "node_modules/reify/node_modules/acorn": { "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2276,29 +2575,33 @@ }, "node_modules/reify/node_modules/acorn-dynamic-import": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0" } }, "node_modules/reify/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/requires-port": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "node_modules/resolve": { "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -2313,20 +2616,18 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/rimraf/-/rimraf-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -2339,12 +2640,14 @@ }, "node_modules/robust-predicates": { "version": "3.0.1", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", + "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "node_modules/rollup": { "version": "2.77.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz", + "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==", "dev": true, - "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -2369,15 +2672,15 @@ }, "node_modules/secure-compare": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", + "dev": true }, "node_modules/semver": { "version": "7.3.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-7.3.7.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2389,33 +2692,37 @@ } }, "node_modules/shebang-command": { - "version": "1.2.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.7.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true }, "node_modules/side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -2427,8 +2734,9 @@ }, "node_modules/sirv": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", "dev": true, - "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.20", "mrmime": "^1.0.0", @@ -2440,21 +2748,24 @@ }, "node_modules/source-map-js": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true }, "node_modules/spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -2462,13 +2773,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -2476,17 +2789,20 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true }, "node_modules/splaytree": { "version": "0.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", + "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" }, "node_modules/string.prototype.padend": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -2501,8 +2817,9 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -2514,8 +2831,9 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -2527,10 +2845,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2540,18 +2857,18 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -2560,20 +2877,22 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2583,43 +2902,47 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/tinypool": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz", + "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tinyqueue": { "version": "2.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "node_modules/tinyspy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.0.tgz", + "integrity": "sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/totalist": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-check/-/type-check-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -2629,18 +2952,18 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.20.2.tgz", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -2650,8 +2973,9 @@ }, "node_modules/typescript": { "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2662,8 +2986,9 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -2676,6 +3001,8 @@ }, "node_modules/union": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dev": true, "dependencies": { "qs": "^6.4.0" @@ -2686,10 +3013,9 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/uri-js/-/uri-js-4.4.1.tgz", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -2702,13 +3028,15 @@ }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -2716,8 +3044,9 @@ }, "node_modules/vite": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.2.tgz", + "integrity": "sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.14.47", "postcss": "^8.4.14", @@ -2756,8 +3085,9 @@ }, "node_modules/vitest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.18.1.tgz", + "integrity": "sha512-4F/1K/Vn4AvJwe7i2YblR02PT5vMKcw9KN4unDq2KD0YcSxX0B/6D6Qu9PJaXwVuxXMFTQ5ovd4+CQaW3bwofA==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "^4.3.1", "@types/chai-subset": "^1.3.3", @@ -2816,20 +3146,25 @@ } }, "node_modules/which": { - "version": "1.3.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -2843,33 +3178,30 @@ }, "node_modules/word-wrap": { "version": "1.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/wrappy/-/wrappy-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yallist/-/yallist-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "dev": true } }, "dependencies": { "@es-joy/jsdoccomment": { "version": "0.31.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", "dev": true, "requires": { @@ -2880,7 +3212,7 @@ }, "@eslint/eslintrc": { "version": "1.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { @@ -2897,7 +3229,7 @@ }, "@humanwhocodes/config-array": { "version": "0.9.5", - "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { @@ -2908,16 +3240,20 @@ }, "@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@polka/url": { "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", "dev": true }, "@turf/union": { "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-4.7.3.tgz", + "integrity": "sha512-6mF3CJKJXGEUa9lNNM3yWc1dqEjEsoB92UoJPa0yr8zQOhgd4va1MoLh9QXHnWsGlevRa74Ob1e12mZxffcfdA==", "dev": true, "requires": { "jsts": "1.3.0" @@ -2925,10 +3261,14 @@ }, "@types/chai": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", "dev": true }, "@types/chai-subset": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", "dev": true, "requires": { "@types/chai": "*" @@ -2936,10 +3276,14 @@ }, "@types/geojson": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", "dev": true }, "@types/jsts": { "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@types/jsts/-/jsts-0.17.12.tgz", + "integrity": "sha512-CVRlGD914G8Lce/r6PBDCNX5KSfdI5ZXCJ4cefy09/5gZBMEy3rcv5prjJuSHusfDaKMnqWc9Asz4I08q/YrAQ==", "dev": true, "requires": { "@types/openlayers": "*" @@ -2947,6 +3291,8 @@ }, "@types/leaflet": { "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.7.11.tgz", + "integrity": "sha512-VwAYom2pfIAf/pLj1VR5aLltd4tOtHyvfaJlNYCoejzP2nu52PrMi1ehsLRMUS+bgafmIIKBV1cMfKeS+uJ0Vg==", "dev": true, "requires": { "@types/geojson": "*" @@ -2954,6 +3300,8 @@ }, "@types/leaflet-editable": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/leaflet-editable/-/leaflet-editable-1.2.1.tgz", + "integrity": "sha512-7Oms1HgulWiclkI0s1XLmr1yRylNoJX8sVUfAv9+28JzwWbKbLcQ6//vhFEOmoMlBQyL5veogKpUUb5qeF+Qyg==", "dev": true, "requires": { "@types/leaflet": "*" @@ -2961,14 +3309,20 @@ }, "@types/node": { "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "dev": true }, "@types/openlayers": { "version": "4.6.18", + "resolved": "https://registry.npmjs.org/@types/openlayers/-/openlayers-4.6.18.tgz", + "integrity": "sha512-srqcI4chyzzs11ZhYpnZqT6Lh1v/O5EXh+pPENDtAwhE7CM31h+JsGomt+ioGhuNVJ96Jl4UkHR1Lllb/XrQAA==", "dev": true }, "@vitest/ui": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.18.1.tgz", + "integrity": "sha512-JgYewAWfx9fN/cjOW6fPh63j9EDiHmDpVXzvp7UJeza+26QoYHXVsgjCmnzP/jjH3i/LkOXlJLqEJw/nJQ+IJg==", "dev": true, "requires": { "sirv": "^2.0.2" @@ -2976,20 +3330,20 @@ }, "acorn": { "version": "8.7.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn/-/acorn-8.7.1.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-jsx": { "version": "5.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "ajv": { "version": "6.12.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/ajv/-/ajv-6.12.6.tgz", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { @@ -3001,25 +3355,29 @@ }, "ansi-regex": { "version": "5.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "3.2.1", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "argparse": { "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "async": { @@ -3033,6 +3391,8 @@ }, "balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "basic-auth": { @@ -3046,6 +3406,8 @@ }, "benchmark": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==", "dev": true, "requires": { "lodash": "^4.17.4", @@ -3054,6 +3416,8 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -3062,10 +3426,14 @@ }, "builtin-modules": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true }, "call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -3074,12 +3442,14 @@ }, "callsites": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/callsites/-/callsites-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "chai": { "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -3092,62 +3462,69 @@ } }, "chalk": { - "version": "2.4.2", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "check-error": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true }, "color-convert": { - "version": "1.9.3", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "comment-parser": { "version": "1.3.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true }, "concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "corser": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", "dev": true }, "cross-spawn": { - "version": "6.0.5", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true - } + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -3155,6 +3532,8 @@ }, "deep-eql": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -3162,12 +3541,14 @@ }, "deep-is": { "version": "0.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/deep-is/-/deep-is-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "define-properties": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { "has-property-descriptors": "^1.0.0", @@ -3176,94 +3557,241 @@ }, "doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, - "error-ex": { - "version": "1.3.2", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz", + "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "esbuild-android-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", + "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", + "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", + "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", + "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", + "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", + "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", + "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", + "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", + "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", + "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", + "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", + "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", + "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", + "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", + "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", + "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } + "optional": true }, - "es-abstract": { - "version": "1.20.1", + "esbuild-sunos-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", + "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } + "optional": true }, - "es-to-primitive": { - "version": "1.2.1", + "esbuild-windows-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", + "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "optional": true }, - "esbuild": { + "esbuild-windows-64": { "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", + "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", "dev": true, - "requires": { - "esbuild-android-64": "0.14.49", - "esbuild-android-arm64": "0.14.49", - "esbuild-darwin-64": "0.14.49", - "esbuild-darwin-arm64": "0.14.49", - "esbuild-freebsd-64": "0.14.49", - "esbuild-freebsd-arm64": "0.14.49", - "esbuild-linux-32": "0.14.49", - "esbuild-linux-64": "0.14.49", - "esbuild-linux-arm": "0.14.49", - "esbuild-linux-arm64": "0.14.49", - "esbuild-linux-mips64le": "0.14.49", - "esbuild-linux-ppc64le": "0.14.49", - "esbuild-linux-riscv64": "0.14.49", - "esbuild-linux-s390x": "0.14.49", - "esbuild-netbsd-64": "0.14.49", - "esbuild-openbsd-64": "0.14.49", - "esbuild-sunos-64": "0.14.49", - "esbuild-windows-32": "0.14.49", - "esbuild-windows-64": "0.14.49", - "esbuild-windows-arm64": "0.14.49" - } + "optional": true }, - "esbuild-darwin-64": { + "esbuild-windows-arm64": { "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", + "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", "dev": true, "optional": true }, "escape-string-regexp": { - "version": "1.0.5", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint": { "version": "8.20.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-8.20.0.tgz", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, "requires": { @@ -3302,108 +3830,12 @@ "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "eslint-plugin-import-order": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-order/-/eslint-plugin-import-order-2.1.4.tgz", + "integrity": "sha512-cHThJ45zFx5UtRZ+Jd6XO89bLriKkdckAHZoSxknlK3BELmAO6Gqe74A7j8rvL+1PEyNJF3Fsil/Rjwx8cqOow==", "dev": true, "requires": { "builtin-modules": "^1.1.1", @@ -3413,7 +3845,7 @@ }, "eslint-plugin-jsdoc": { "version": "39.3.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.3.tgz", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.3.tgz", "integrity": "sha512-K/DAjKRUNaUTf0KQhI9PvsF+Y3mGDx/j0pofXsJCQe/tmRsRweBIXR353c8nAro0lytZYEf7l0PluBpzKDiHxw==", "dev": true, "requires": { @@ -3424,23 +3856,17 @@ "esquery": "^1.4.0", "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } } }, "eslint-plugin-promise": { "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true }, "eslint-scope": { "version": "7.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-scope/-/eslint-scope-7.1.1.tgz", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { @@ -3450,7 +3876,7 @@ }, "eslint-utils": { "version": "3.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-utils/-/eslint-utils-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { @@ -3459,7 +3885,7 @@ "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } @@ -3467,13 +3893,13 @@ }, "eslint-visitor-keys": { "version": "3.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { "version": "9.3.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-9.3.2.tgz", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { @@ -3484,6 +3910,8 @@ }, "esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -3491,7 +3919,7 @@ }, "esrecurse": { "version": "4.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { @@ -3506,33 +3934,37 @@ }, "esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "eventemitter3": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "fast-deep-equal": { "version": "3.1.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "file-entry-cache": { "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { @@ -3541,7 +3973,7 @@ }, "flat-cache": { "version": "3.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/flat-cache/-/flat-cache-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { @@ -3551,26 +3983,39 @@ }, "flatted": { "version": "3.2.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-3.2.6.tgz", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "follow-redirects": { "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "dev": true }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "function.prototype.name": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -3581,22 +4026,32 @@ }, "functional-red-black-tree": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "geojson-project": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/geojson-project/-/geojson-project-1.0.1.tgz", + "integrity": "sha512-9x+VIogg1QQotqPUgg6EQqAnj6EANZQTAh/kKXsPO4WcaM4TukrAf6PnwNggkOUm5oAduoQTG1YiQOxY+6XAIw==", "dev": true }, "get-func-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true }, "get-intrinsic": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -3606,6 +4061,8 @@ }, "get-symbol-description": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -3614,7 +4071,7 @@ }, "glob": { "version": "7.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob/-/glob-7.2.3.tgz", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { @@ -3628,7 +4085,7 @@ }, "glob-parent": { "version": "6.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { @@ -3637,7 +4094,7 @@ }, "globals": { "version": "13.16.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-13.16.0.tgz", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { @@ -3646,10 +4103,14 @@ }, "graceful-fs": { "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -3657,14 +4118,20 @@ }, "has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-property-descriptors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "requires": { "get-intrinsic": "^1.1.1" @@ -3672,10 +4139,14 @@ }, "has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-tostringtag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -3689,6 +4160,8 @@ }, "hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-encoding-sniffer": { @@ -3702,6 +4175,8 @@ }, "http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", @@ -3728,57 +4203,6 @@ "secure-compare": "3.0.1", "union": "~0.5.0", "url-join": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "iconv-lite": { @@ -3792,13 +4216,13 @@ }, "ignore": { "version": "5.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/ignore/-/ignore-5.2.0.tgz", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { "version": "3.3.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { @@ -3808,11 +4232,13 @@ }, "imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://nexus3.linkurious.net/repository/npm/inflight/-/inflight-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { @@ -3822,12 +4248,14 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://nexus3.linkurious.net/repository/npm/inherits/-/inherits-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "internal-slot": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { "get-intrinsic": "^1.1.0", @@ -3837,10 +4265,14 @@ }, "is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -3848,6 +4280,8 @@ }, "is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -3856,10 +4290,14 @@ }, "is-callable": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -3867,6 +4305,8 @@ }, "is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -3874,13 +4314,13 @@ }, "is-extglob": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-glob": { "version": "4.0.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { @@ -3889,10 +4329,14 @@ }, "is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number-object": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -3900,6 +4344,8 @@ }, "is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -3908,6 +4354,8 @@ }, "is-shared-array-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "requires": { "call-bind": "^1.0.2" @@ -3915,6 +4363,8 @@ }, "is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -3922,6 +4372,8 @@ }, "is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -3929,6 +4381,8 @@ }, "is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { "call-bind": "^1.0.2" @@ -3936,11 +4390,13 @@ }, "isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "js-yaml": { "version": "4.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { @@ -3949,43 +4405,55 @@ }, "jsdoc-type-pratt-parser": { "version": "3.1.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-pretty-compact": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", "dev": true }, "jsts": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsts/-/jsts-1.3.0.tgz", + "integrity": "sha512-uFcaiZ5ba3Y6lfHNFikk64Kdkfx01iq3GE+K2S2k95uDcJcKxMusMd2RGgYWeS8EeUVX6eadOqwEzwA8yyGOaQ==", "dev": true }, "leaflet": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz", + "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==", "dev": true }, "leaflet-editable": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/leaflet-editable/-/leaflet-editable-1.2.0.tgz", + "integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==", "dev": true }, "levn": { "version": "0.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/levn/-/levn-0.4.1.tgz", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { @@ -3995,6 +4463,8 @@ }, "load-json-file": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4005,28 +4475,38 @@ }, "local-pkg": { "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", "dev": true }, "lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.cond": { "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", "dev": true }, "lodash.find": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", + "integrity": "sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==", "dev": true }, "lodash.merge": { "version": "4.6.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "loupe": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "dev": true, "requires": { "get-func-name": "^2.0.0" @@ -4034,7 +4514,7 @@ }, "lru-cache": { "version": "6.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { @@ -4043,6 +4523,8 @@ }, "magic-string": { "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, "requires": { "sourcemap-codec": "^1.4.8" @@ -4050,6 +4532,8 @@ }, "memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true }, "mime": { @@ -4060,6 +4544,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -4067,10 +4553,14 @@ }, "minimist": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { "minimist": "^1.2.6" @@ -4078,26 +4568,38 @@ }, "mrmime": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "dev": true }, "ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "nanoid": { "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true }, "natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "nice-try": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -4108,12 +4610,16 @@ "dependencies": { "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "npm-run-all": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -4125,18 +4631,131 @@ "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "object-inspect": { "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, "object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -4147,7 +4766,7 @@ }, "once": { "version": "1.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/once/-/once-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { @@ -4156,11 +4775,13 @@ }, "opener": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "optionator": { "version": "0.9.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/optionator/-/optionator-0.9.1.tgz", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { @@ -4174,7 +4795,7 @@ }, "parent-module": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/parent-module/-/parent-module-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { @@ -4183,6 +4804,8 @@ }, "parse-json": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, "requires": { "error-ex": "^1.2.0" @@ -4190,20 +4813,26 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { - "version": "2.0.1", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" @@ -4211,32 +4840,46 @@ "dependencies": { "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true } } }, "pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "picocolors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "pidtree": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true }, "pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true }, "platform": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true }, "portfinder": { "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { "async": "^2.6.2", @@ -4246,6 +4889,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -4255,6 +4900,8 @@ }, "postcss": { "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "dev": true, "requires": { "nanoid": "^3.3.4", @@ -4264,18 +4911,20 @@ }, "prelude-ls": { "version": "1.2.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "punycode": { "version": "2.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/punycode/-/punycode-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -4283,6 +4932,8 @@ }, "read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -4292,6 +4943,8 @@ "dependencies": { "load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4302,6 +4955,8 @@ }, "parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -4310,12 +4965,16 @@ }, "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true } } }, "regexp.prototype.flags": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4325,12 +4984,14 @@ }, "regexpp": { "version": "3.2.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/regexpp/-/regexpp-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "reify": { "version": "0.20.12", + "resolved": "https://registry.npmjs.org/reify/-/reify-0.20.12.tgz", + "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==", "dev": true, "requires": { "acorn": "^6.1.1", @@ -4341,25 +5002,35 @@ "dependencies": { "acorn": { "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "acorn-dynamic-import": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true, "requires": {} }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "requires-port": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { "is-core-module": "^2.9.0", @@ -4369,13 +5040,13 @@ }, "resolve-from": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "rimraf": { "version": "3.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/rimraf/-/rimraf-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { @@ -4383,10 +5054,14 @@ } }, "robust-predicates": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", + "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "rollup": { "version": "2.77.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz", + "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -4406,11 +5081,13 @@ }, "secure-compare": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", "dev": true }, "semver": { "version": "7.3.7", - "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-7.3.7.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { @@ -4418,22 +5095,30 @@ } }, "shebang-command": { - "version": "1.2.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "shell-quote": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -4443,6 +5128,8 @@ }, "sirv": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", "dev": true, "requires": { "@polka/url": "^1.0.0-next.20", @@ -4452,14 +5139,20 @@ }, "source-map-js": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, "sourcemap-codec": { "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -4468,10 +5161,14 @@ }, "spdx-exceptions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -4480,13 +5177,19 @@ }, "spdx-license-ids": { "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "splaytree": { - "version": "0.1.4" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", + "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" }, "string.prototype.padend": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4496,6 +5199,8 @@ }, "string.prototype.trimend": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4505,6 +5210,8 @@ }, "string.prototype.trimstart": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4514,7 +5221,7 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { @@ -4523,47 +5230,63 @@ }, "strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-json-comments": { "version": "3.1.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { - "version": "5.5.0", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "tinypool": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz", + "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==", "dev": true }, "tinyqueue": { - "version": "2.0.3" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "tinyspy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.0.tgz", + "integrity": "sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==", "dev": true }, "totalist": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", "dev": true }, "type-check": { "version": "0.4.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-check/-/type-check-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { @@ -4572,20 +5295,26 @@ }, "type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { "version": "0.20.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.20.2.tgz", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typescript": { "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true }, "unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4596,6 +5325,8 @@ }, "union": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dev": true, "requires": { "qs": "^6.4.0" @@ -4603,7 +5334,7 @@ }, "uri-js": { "version": "4.4.1", - "resolved": "https://nexus3.linkurious.net/repository/npm/uri-js/-/uri-js-4.4.1.tgz", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { @@ -4618,10 +5349,14 @@ }, "v8-compile-cache": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -4630,6 +5365,8 @@ }, "vite": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.2.tgz", + "integrity": "sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw==", "dev": true, "requires": { "esbuild": "^0.14.47", @@ -4641,6 +5378,8 @@ }, "vitest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.18.1.tgz", + "integrity": "sha512-4F/1K/Vn4AvJwe7i2YblR02PT5vMKcw9KN4unDq2KD0YcSxX0B/6D6Qu9PJaXwVuxXMFTQ5ovd4+CQaW3bwofA==", "dev": true, "requires": { "@types/chai": "^4.3.1", @@ -4664,7 +5403,9 @@ } }, "which": { - "version": "1.3.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -4672,6 +5413,8 @@ }, "which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -4683,19 +5426,19 @@ }, "word-wrap": { "version": "1.2.3", - "resolved": "https://nexus3.linkurious.net/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrappy": { "version": "1.0.2", - "resolved": "https://nexus3.linkurious.net/repository/npm/wrappy/-/wrappy-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "yallist": { "version": "4.0.0", - "resolved": "https://nexus3.linkurious.net/repository/npm/yallist/-/yallist-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } From 1c084f457e035ccfec8c9bf530f46359409f226c Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Wed, 20 Jul 2022 10:30:35 +0200 Subject: [PATCH 22/38] Dev root --- vite.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/vite.config.js b/vite.config.js index 38fdcb6..d707ec8 100644 --- a/vite.config.js +++ b/vite.config.js @@ -16,6 +16,7 @@ export default defineConfig({ } } }, + root: resolve(__dirname, 'demo'), test: { include: ['test/**/*.test.ts'] } From 36372f0a769a729a1e973cf4672283d049112cf9 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 19:32:42 +0200 Subject: [PATCH 23/38] Tests and demo --- test/divide_segment.test.ts | 2 +- test/featureTypes.test.ts | 12 +++++------- test/genericTestCases.test.ts | 2 +- test/index.test.ts | 2 +- test/sweep_line.test.ts | 2 +- vite.config.js | 5 +++-- web/index.html | 2 +- web/index.ts | 21 ++++++++------------- 8 files changed, 21 insertions(+), 27 deletions(-) diff --git a/test/divide_segment.test.ts b/test/divide_segment.test.ts index c295892..97046fa 100644 --- a/test/divide_segment.test.ts +++ b/test/divide_segment.test.ts @@ -16,7 +16,7 @@ import { BoundingBox, MultiPolygon, Point } from '../src/types'; // GeoJSON Data const shapes = load.sync( - path.join(__dirname, 'fixtures', 'two_shapes.geojson') + path.join(process.cwd(), 'test', 'fixtures', 'two_shapes.geojson') ); const subject = shapes.features[0]; diff --git a/test/featureTypes.test.ts b/test/featureTypes.test.ts index 0921698..d9779d7 100644 --- a/test/featureTypes.test.ts +++ b/test/featureTypes.test.ts @@ -3,10 +3,10 @@ import path from 'path'; import load from 'load-json-file'; import * as martinez from '../src'; -const clipping = load.sync( - path.join(__dirname, 'featureTypes', 'clippingPoly.geojson') -); -const outDir = path.join(__dirname, 'featureTypes', 'out'); +const rootPath = path.join(process.cwd(), 'test', 'featureTypes'); + +const clipping = load.sync(path.join(rootPath, 'clippingPoly.geojson')); +const outDir = path.join(rootPath, 'out'); const testScenarios = [ { @@ -28,9 +28,7 @@ const testScenarios = [ ]; testScenarios.forEach((ts) => { - const subject = load.sync( - path.join(__dirname, 'featureTypes', ts.subjectPoly + '.geojson') - ); + const subject = load.sync(path.join(rootPath, ts.subjectPoly + '.geojson')); const name = ts.testName; test(ts.testName, () => { const expectedIntResult = load.sync( diff --git a/test/genericTestCases.test.ts b/test/genericTestCases.test.ts index 75f82ed..f20b302 100644 --- a/test/genericTestCases.test.ts +++ b/test/genericTestCases.test.ts @@ -37,7 +37,7 @@ function extractExpectedResults(features) { }); } -const caseDir = path.join(__dirname, 'genericTestCases'); +const caseDir = path.join(process.cwd(), 'test', 'genericTestCases'); const testCases = glob.sync(path.join(caseDir, '*.geojson')); if (testCases.length === 0) { throw 'No test cases found, this must not happen'; diff --git a/test/index.test.ts b/test/index.test.ts index e629d9e..cb5fa8d 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -7,7 +7,7 @@ import { FeatureCollection, Polygon as GeoPolygon } from 'geojson'; // GeoJSON Data const data: FeatureCollection = load.sync( - path.join(__dirname, 'fixtures', 'two_triangles.geojson') + path.join(process.cwd(), 'test', 'fixtures', 'two_triangles.geojson') ); const subject = data.features[0]; diff --git a/test/sweep_line.test.ts b/test/sweep_line.test.ts index f9e4aee..cdb2529 100644 --- a/test/sweep_line.test.ts +++ b/test/sweep_line.test.ts @@ -7,7 +7,7 @@ import SweepEvent from '../src/sweep_event'; // GeoJSON Data const data = load.sync( - path.join(__dirname, 'fixtures', 'two_triangles.geojson') + path.join(process.cwd(), 'test', 'fixtures', 'two_triangles.geojson') ); const subject = data.features[0]; diff --git a/vite.config.js b/vite.config.js index d707ec8..8a335f5 100644 --- a/vite.config.js +++ b/vite.config.js @@ -16,8 +16,9 @@ export default defineConfig({ } } }, - root: resolve(__dirname, 'demo'), + root: resolve(__dirname, 'web'), test: { - include: ['test/**/*.test.ts'] + dir: resolve(__dirname, 'test'), + include: ['**/*.test.ts'] } }); diff --git a/web/index.html b/web/index.html index 7ff3b5b..bfec145 100644 --- a/web/index.html +++ b/web/index.html @@ -23,6 +23,6 @@ /> - + diff --git a/web/index.ts b/web/index.ts index b20487a..0bd3010 100644 --- a/web/index.ts +++ b/web/index.ts @@ -1,5 +1,5 @@ import L from 'leaflet'; -import jsts from 'jsts'; +import * as jsts from 'jsts'; import 'leaflet-editable'; import { CoordinatesControl } from './js/coordinates'; import { NewPolygonControl } from './js/polygoncontrol'; @@ -104,14 +104,7 @@ switch (mode) { break; } -console.log(mode); - -var OPERATIONS = { - INTERSECTION: 0, - UNION: 1, - DIFFERENCE: 2, - XOR: 3 -}; +const OPERATIONS = martinez.operations; var div = document.createElement('div'); div.id = 'image-map'; @@ -120,7 +113,7 @@ document.body.appendChild(div); // create the slippy map // @ts-ignore -var map = (globalThis.map = L.map('image-map', { +const map = (globalThis.map = L.map('image-map', { minZoom: 1, maxZoom: 20, center: [0, 0], @@ -170,8 +163,8 @@ function clear() { rawData = null; } -var reader = new jsts.io.GeoJSONReader(); -var writer = new jsts.io.GeoJSONWriter(); +const reader = new jsts.io.GeoJSONReader(); +const writer = new jsts.io.GeoJSONWriter(); function getClippingPoly(layers) { // @ts-ignore @@ -180,7 +173,9 @@ function getClippingPoly(layers) { return layers[1].toGeoJSON(); } -function run(op) { +type valueOf = T[keyof T]; + +function run(op: valueOf) { var layers = drawnItems.getLayers(); if (layers.length < 2) return; // @ts-ignore From 50332334a068564f63a457c0d57a53927cab42fd Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:09:27 +0200 Subject: [PATCH 24/38] Web is working --- .github/workflows/nodejs.yml | 17 +- .gitignore | 1 + demo/css/styles.css | 18 - demo/index.html | 42 - demo/js/booleanopcontrol.js | 47 - demo/js/bundle.js | 2390 ----------------- demo/js/coordinates.js | 20 - demo/js/index.js | 264 -- demo/js/polygoncontrol.js | 35 - demo/orthogonal.html | 21 - package.json | 5 +- vite.config.js | 5 +- web/index-bundle.js | 2189 --------------- web/index.html | 4 + web/index.ts | 8 +- web/orthogonal.html | 30 +- .../booleanopcontrol.ts} | 15 +- web/{js/coordinates.js => src/coordinates.ts} | 0 web/src/index.ts | 3 + web/{js => src}/polygoncontrol.ts | 0 web/styles.css | 15 +- web/vite.config.js | 24 + 22 files changed, 91 insertions(+), 5062 deletions(-) delete mode 100644 demo/css/styles.css delete mode 100644 demo/index.html delete mode 100644 demo/js/booleanopcontrol.js delete mode 100644 demo/js/bundle.js delete mode 100644 demo/js/coordinates.js delete mode 100644 demo/js/index.js delete mode 100644 demo/js/polygoncontrol.js delete mode 100644 demo/orthogonal.html delete mode 100644 web/index-bundle.js rename web/{js/booleanopcontrol.js => src/booleanopcontrol.ts} (82%) rename web/{js/coordinates.js => src/coordinates.ts} (100%) create mode 100644 web/src/index.ts rename web/{js => src}/polygoncontrol.ts (100%) create mode 100644 web/vite.config.js diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index f9ebe9b..61a2b96 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -18,11 +18,18 @@ jobs: node-version: [14.x, 16.x] steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} + - name: Checkout + uses: actions/checkout@v3 + - name: Build ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm run build --if-present - - run: npm test + run: npm ci + run: npm test + run: npm run build --if-present + run: npm run build:demo + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: build + diff --git a/.gitignore b/.gitignore index bac1b14..b4761f3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules .reify-cache npm-debug.log dist +public diff --git a/demo/css/styles.css b/demo/css/styles.css deleted file mode 100644 index b38c48a..0000000 --- a/demo/css/styles.css +++ /dev/null @@ -1,18 +0,0 @@ -html, -body, -#image-map { - width: 100%; - height: 100%; - margin: 0; - padding: 0; -} - -#diff-map, -#union-map, -#intersection-map { - display: none; - width: 400px; - height: 400px; - margin-right: 10px; - float: left; -} diff --git a/demo/index.html b/demo/index.html deleted file mode 100644 index 8d79447..0000000 --- a/demo/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - Martinez Clipping - - - - - - - - - - - - - - - - - diff --git a/demo/js/booleanopcontrol.js b/demo/js/booleanopcontrol.js deleted file mode 100644 index 3b74481..0000000 --- a/demo/js/booleanopcontrol.js +++ /dev/null @@ -1,47 +0,0 @@ -import L from 'leaflet'; - -L.BooleanControl = L.Control.extend({ - options: { - position: 'topright' - }, - - onAdd: function(map) { - var container = this._container = L.DomUtil.create('div', 'leaflet-bar'); - this._container.style.background = '#ffffff'; - this._container.style.padding = '10px'; - container.innerHTML = [ - '
', - '
    ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
', - '', '', - '
'].join(''); - var form = container.querySelector('form'); - L.DomEvent - .on(form, 'submit', function (evt) { - L.DomEvent.stop(evt); - var radios = Array.prototype.slice.call( - form.querySelectorAll('input[type=radio]')); - for (var i = 0, len = radios.length; i < len; i++) { - if (radios[i].checked) { - this.options.callback(parseInt(radios[i].value)); - break; - } - } - }, this) - .on(form['clear'], 'click', function(evt) { - L.DomEvent.stop(evt); - this.options.clear(); - }, this); - - L.DomEvent - .disableClickPropagation(this._container) - .disableScrollPropagation(this._container); - return this._container; - } - -}); diff --git a/demo/js/bundle.js b/demo/js/bundle.js deleted file mode 100644 index df83419..0000000 --- a/demo/js/bundle.js +++ /dev/null @@ -1,2390 +0,0 @@ -(function (L$1) { - 'use strict'; - - L$1 = L$1 && Object.prototype.hasOwnProperty.call(L$1, 'default') ? L$1['default'] : L$1; - - L$1.Coordinates = L$1.Control.extend({ - options: { - position: 'bottomright' - }, - - onAdd: function(map) { - this._container = L$1.DomUtil.create('div', 'leaflet-bar'); - this._container.style.background = '#ffffff'; - map.on('mousemove', this._onMouseMove, this); - return this._container; - }, - - _onMouseMove: function(e) { - this._container.innerHTML = '' + - e.latlng.lng.toFixed(3) + ', ' + e.latlng.lat.toFixed(3) + ''; - } - - }); - - L$1.EditControl = L$1.Control.extend({ - - options: { - position: 'topleft', - callback: null, - kind: '', - html: '' - }, - - onAdd: function (map) { - var container = L$1.DomUtil.create('div', 'leaflet-control leaflet-bar'), - link = L$1.DomUtil.create('a', '', container); - - link.href = '#'; - link.title = 'Create a new ' + this.options.kind; - link.innerHTML = this.options.html; - L$1.DomEvent.on(link, 'click', L$1.DomEvent.stop) - .on(link, 'click', function () { - window.LAYER = this.options.callback.call(map.editTools); - }, this); - - return container; - } - - }); - - L$1.NewPolygonControl = L$1.EditControl.extend({ - options: { - position: 'topleft', - kind: 'polygon', - html: '▰' - } - }); - - L$1.BooleanControl = L$1.Control.extend({ - options: { - position: 'topright' - }, - - onAdd: function(map) { - var container = this._container = L$1.DomUtil.create('div', 'leaflet-bar'); - this._container.style.background = '#ffffff'; - this._container.style.padding = '10px'; - container.innerHTML = [ - '
', - '
    ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
  • ','', '
  • ', - '
', - '', '', - '
'].join(''); - var form = container.querySelector('form'); - L$1.DomEvent - .on(form, 'submit', function (evt) { - L$1.DomEvent.stop(evt); - var radios = Array.prototype.slice.call( - form.querySelectorAll('input[type=radio]')); - for (var i = 0, len = radios.length; i < len; i++) { - if (radios[i].checked) { - this.options.callback(parseInt(radios[i].value)); - break; - } - } - }, this) - .on(form['clear'], 'click', function(evt) { - L$1.DomEvent.stop(evt); - this.options.clear(); - }, this); - - L$1.DomEvent - .disableClickPropagation(this._container) - .disableScrollPropagation(this._container); - return this._container; - } - - }); - - function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; } - - var SplayTree = function SplayTree(compare, noDuplicates) { - if ( compare === void 0 ) compare = DEFAULT_COMPARE; - if ( noDuplicates === void 0 ) noDuplicates = false; - - this._compare = compare; - this._root = null; - this._size = 0; - this._noDuplicates = !!noDuplicates; - }; - - var prototypeAccessors = { size: { configurable: true } }; - - - SplayTree.prototype.rotateLeft = function rotateLeft (x) { - var y = x.right; - if (y) { - x.right = y.left; - if (y.left) { y.left.parent = x; } - y.parent = x.parent; - } - - if (!x.parent) { this._root = y; } - else if (x === x.parent.left) { x.parent.left = y; } - else { x.parent.right = y; } - if (y) { y.left = x; } - x.parent = y; - }; - - - SplayTree.prototype.rotateRight = function rotateRight (x) { - var y = x.left; - if (y) { - x.left = y.right; - if (y.right) { y.right.parent = x; } - y.parent = x.parent; - } - - if (!x.parent) { this._root = y; } - else if(x === x.parent.left) { x.parent.left = y; } - else { x.parent.right = y; } - if (y) { y.right = x; } - x.parent = y; - }; - - - SplayTree.prototype._splay = function _splay (x) { - while (x.parent) { - var p = x.parent; - if (!p.parent) { - if (p.left === x) { this.rotateRight(p); } - else { this.rotateLeft(p); } - } else if (p.left === x && p.parent.left === p) { - this.rotateRight(p.parent); - this.rotateRight(p); - } else if (p.right === x && p.parent.right === p) { - this.rotateLeft(p.parent); - this.rotateLeft(p); - } else if (p.left === x && p.parent.right === p) { - this.rotateRight(p); - this.rotateLeft(p); - } else { - this.rotateLeft(p); - this.rotateRight(p); - } - } - }; - - - SplayTree.prototype.splay = function splay (x) { - var p, gp, ggp, l, r; - - while (x.parent) { - p = x.parent; - gp = p.parent; - - if (gp && gp.parent) { - ggp = gp.parent; - if (ggp.left === gp) { ggp.left= x; } - else { ggp.right = x; } - x.parent = ggp; - } else { - x.parent = null; - this._root = x; - } - - l = x.left; r = x.right; - - if (x === p.left) { // left - if (gp) { - if (gp.left === p) { - /* zig-zig */ - if (p.right) { - gp.left = p.right; - gp.left.parent = gp; - } else { gp.left = null; } - - p.right = gp; - gp.parent = p; - } else { - /* zig-zag */ - if (l) { - gp.right = l; - l.parent = gp; - } else { gp.right = null; } - - x.left = gp; - gp.parent = x; - } - } - if (r) { - p.left = r; - r.parent = p; - } else { p.left = null; } - - x.right= p; - p.parent = x; - } else { // right - if (gp) { - if (gp.right === p) { - /* zig-zig */ - if (p.left) { - gp.right = p.left; - gp.right.parent = gp; - } else { gp.right = null; } - - p.left = gp; - gp.parent = p; - } else { - /* zig-zag */ - if (r) { - gp.left = r; - r.parent = gp; - } else { gp.left = null; } - - x.right = gp; - gp.parent = x; - } - } - if (l) { - p.right = l; - l.parent = p; - } else { p.right = null; } - - x.left = p; - p.parent = x; - } - } - }; - - - SplayTree.prototype.replace = function replace (u, v) { - if (!u.parent) { this._root = v; } - else if (u === u.parent.left) { u.parent.left = v; } - else { u.parent.right = v; } - if (v) { v.parent = u.parent; } - }; - - - SplayTree.prototype.minNode = function minNode (u) { - if ( u === void 0 ) u = this._root; - - if (u) { while (u.left) { u = u.left; } } - return u; - }; - - - SplayTree.prototype.maxNode = function maxNode (u) { - if ( u === void 0 ) u = this._root; - - if (u) { while (u.right) { u = u.right; } } - return u; - }; - - - SplayTree.prototype.insert = function insert (key, data) { - var z = this._root; - var p = null; - var comp = this._compare; - var cmp; - - if (this._noDuplicates) { - while (z) { - p = z; - cmp = comp(z.key, key); - if (cmp === 0) { return; } - else if (comp(z.key, key) < 0) { z = z.right; } - else { z = z.left; } - } - } else { - while (z) { - p = z; - if (comp(z.key, key) < 0) { z = z.right; } - else { z = z.left; } - } - } - - z = { key: key, data: data, left: null, right: null, parent: p }; - - if (!p) { this._root = z; } - else if (comp(p.key, z.key) < 0) { p.right = z; } - else { p.left= z; } - - this.splay(z); - this._size++; - return z; - }; - - - SplayTree.prototype.find = function find (key) { - var z = this._root; - var comp = this._compare; - while (z) { - var cmp = comp(z.key, key); - if (cmp < 0) { z = z.right; } - else if (cmp > 0) { z = z.left; } - else { return z; } - } - return null; - }; - - /** - * Whether the tree contains a node with the given key - * @param{Key} key - * @return {boolean} true/false - */ - SplayTree.prototype.contains = function contains (key) { - var node = this._root; - var comparator = this._compare; - while (node){ - var cmp = comparator(key, node.key); - if (cmp === 0) { return true; } - else if (cmp < 0) { node = node.left; } - else { node = node.right; } - } - - return false; - }; - - - SplayTree.prototype.remove = function remove (key) { - var z = this.find(key); - - if (!z) { return false; } - - this.splay(z); - - if (!z.left) { this.replace(z, z.right); } - else if (!z.right) { this.replace(z, z.left); } - else { - var y = this.minNode(z.right); - if (y.parent !== z) { - this.replace(y, y.right); - y.right = z.right; - y.right.parent = y; - } - this.replace(z, y); - y.left = z.left; - y.left.parent = y; - } - - this._size--; - return true; - }; - - - SplayTree.prototype.removeNode = function removeNode (z) { - if (!z) { return false; } - - this.splay(z); - - if (!z.left) { this.replace(z, z.right); } - else if (!z.right) { this.replace(z, z.left); } - else { - var y = this.minNode(z.right); - if (y.parent !== z) { - this.replace(y, y.right); - y.right = z.right; - y.right.parent = y; - } - this.replace(z, y); - y.left = z.left; - y.left.parent = y; - } - - this._size--; - return true; - }; - - - SplayTree.prototype.erase = function erase (key) { - var z = this.find(key); - if (!z) { return; } - - this.splay(z); - - var s = z.left; - var t = z.right; - - var sMax = null; - if (s) { - s.parent = null; - sMax = this.maxNode(s); - this.splay(sMax); - this._root = sMax; - } - if (t) { - if (s) { sMax.right = t; } - else { this._root = t; } - t.parent = sMax; - } - - this._size--; - }; - - /** - * Removes and returns the node with smallest key - * @return {?Node} - */ - SplayTree.prototype.pop = function pop () { - var node = this._root, returnValue = null; - if (node) { - while (node.left) { node = node.left; } - returnValue = { key: node.key, data: node.data }; - this.remove(node.key); - } - return returnValue; - }; - - - /* eslint-disable class-methods-use-this */ - - /** - * Successor node - * @param{Node} node - * @return {?Node} - */ - SplayTree.prototype.next = function next (node) { - var successor = node; - if (successor) { - if (successor.right) { - successor = successor.right; - while (successor && successor.left) { successor = successor.left; } - } else { - successor = node.parent; - while (successor && successor.right === node) { - node = successor; successor = successor.parent; - } - } - } - return successor; - }; - - - /** - * Predecessor node - * @param{Node} node - * @return {?Node} - */ - SplayTree.prototype.prev = function prev (node) { - var predecessor = node; - if (predecessor) { - if (predecessor.left) { - predecessor = predecessor.left; - while (predecessor && predecessor.right) { predecessor = predecessor.right; } - } else { - predecessor = node.parent; - while (predecessor && predecessor.left === node) { - node = predecessor; - predecessor = predecessor.parent; - } - } - } - return predecessor; - }; - /* eslint-enable class-methods-use-this */ - - - /** - * @param{forEachCallback} callback - * @return {SplayTree} - */ - SplayTree.prototype.forEach = function forEach (callback) { - var current = this._root; - var s = [], done = false, i = 0; - - while (!done) { - // Reach the left most Node of the current Node - if (current) { - // Place pointer to a tree node on the stack - // before traversing the node's left subtree - s.push(current); - current = current.left; - } else { - // BackTrack from the empty subtree and visit the Node - // at the top of the stack; however, if the stack is - // empty you are done - if (s.length > 0) { - current = s.pop(); - callback(current, i++); - - // We have visited the node and its left - // subtree. Now, it's right subtree's turn - current = current.right; - } else { done = true; } - } - } - return this; - }; - - - /** - * Walk key range from `low` to `high`. Stops if `fn` returns a value. - * @param{Key} low - * @param{Key} high - * @param{Function} fn - * @param{*?} ctx - * @return {SplayTree} - */ - SplayTree.prototype.range = function range (low, high, fn, ctx) { - var Q = []; - var compare = this._compare; - var node = this._root, cmp; - - while (Q.length !== 0 || node) { - if (node) { - Q.push(node); - node = node.left; - } else { - node = Q.pop(); - cmp = compare(node.key, high); - if (cmp > 0) { - break; - } else if (compare(node.key, low) >= 0) { - if (fn.call(ctx, node)) { return this; } // stop if smth is returned - } - node = node.right; - } - } - return this; - }; - - /** - * Returns all keys in order - * @return {Array} - */ - SplayTree.prototype.keys = function keys () { - var current = this._root; - var s = [], r = [], done = false; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - r.push(current.key); - current = current.right; - } else { done = true; } - } - } - return r; - }; - - - /** - * Returns `data` fields of all nodes in order. - * @return {Array} - */ - SplayTree.prototype.values = function values () { - var current = this._root; - var s = [], r = [], done = false; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - r.push(current.data); - current = current.right; - } else { done = true; } - } - } - return r; - }; - - - /** - * Returns node at given index - * @param{number} index - * @return {?Node} - */ - SplayTree.prototype.at = function at (index) { - // removed after a consideration, more misleading than useful - // index = index % this.size; - // if (index < 0) index = this.size - index; - - var current = this._root; - var s = [], done = false, i = 0; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - if (i === index) { return current; } - i++; - current = current.right; - } else { done = true; } - } - } - return null; - }; - - /** - * Bulk-load items. Both array have to be same size - * @param{Array} keys - * @param{Array}[values] - * @param{Boolean} [presort=false] Pre-sort keys and values, using - * tree's comparator. Sorting is done - * in-place - * @return {AVLTree} - */ - SplayTree.prototype.load = function load (keys, values, presort) { - if ( keys === void 0 ) keys = []; - if ( values === void 0 ) values = []; - if ( presort === void 0 ) presort = false; - - if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); } - var size = keys.length; - if (presort) { sort(keys, values, 0, size - 1, this._compare); } - this._root = loadRecursive(null, keys, values, 0, size); - this._size = size; - return this; - }; - - - SplayTree.prototype.min = function min () { - var node = this.minNode(this._root); - if (node) { return node.key; } - else { return null; } - }; - - - SplayTree.prototype.max = function max () { - var node = this.maxNode(this._root); - if (node) { return node.key; } - else { return null; } - }; - - SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; }; - prototypeAccessors.size.get = function () { return this._size; }; - - - /** - * Create a tree and load it with items - * @param{Array} keys - * @param{Array?} [values] - - * @param{Function?} [comparator] - * @param{Boolean?} [presort=false] Pre-sort keys and values, using - * tree's comparator. Sorting is done - * in-place - * @param{Boolean?} [noDuplicates=false] Allow duplicates - * @return {SplayTree} - */ - SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) { - return new SplayTree(comparator, noDuplicates).load(keys, values, presort); - }; - - Object.defineProperties( SplayTree.prototype, prototypeAccessors ); - - - function loadRecursive (parent, keys, values, start, end) { - var size = end - start; - if (size > 0) { - var middle = start + Math.floor(size / 2); - var key = keys[middle]; - var data = values[middle]; - var node = { key: key, data: data, parent: parent }; - node.left = loadRecursive(node, keys, values, start, middle); - node.right = loadRecursive(node, keys, values, middle + 1, end); - return node; - } - return null; - } - - - function sort(keys, values, left, right, compare) { - if (left >= right) { return; } - - var pivot = keys[(left + right) >> 1]; - var i = left - 1; - var j = right + 1; - - while (true) { - do { i++; } while (compare(keys[i], pivot) < 0); - do { j--; } while (compare(keys[j], pivot) > 0); - if (i >= j) { break; } - - var tmp = keys[i]; - keys[i] = keys[j]; - keys[j] = tmp; - - tmp = values[i]; - values[i] = values[j]; - values[j] = tmp; - } - - sort(keys, values, left, j, compare); - sort(keys, values, j + 1, right, compare); - } - - var NORMAL = 0; - var NON_CONTRIBUTING = 1; - var SAME_TRANSITION = 2; - var DIFFERENT_TRANSITION = 3; - - var INTERSECTION = 0; - var UNION = 1; - var DIFFERENCE = 2; - var XOR = 3; - - /** - * @param {SweepEvent} event - * @param {SweepEvent} prev - * @param {Operation} operation - */ - function computeFields (event, prev, operation) { - // compute inOut and otherInOut fields - if (prev === null) { - event.inOut = false; - event.otherInOut = true; - - // previous line segment in sweepline belongs to the same polygon - } else { - if (event.isSubject === prev.isSubject) { - event.inOut = !prev.inOut; - event.otherInOut = prev.otherInOut; - - // previous line segment in sweepline belongs to the clipping polygon - } else { - event.inOut = !prev.otherInOut; - event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; - } - - // compute prevInResult field - if (prev) { - event.prevInResult = (!inResult(prev, operation) || prev.isVertical()) - ? prev.prevInResult : prev; - } - } - - // check if the line segment belongs to the Boolean operation - var isInResult = inResult(event, operation); - if (isInResult) { - event.resultTransition = determineResultTransition(event, operation); - } else { - event.resultTransition = 0; - } - } - - - /* eslint-disable indent */ - function inResult(event, operation) { - switch (event.type) { - case NORMAL: - switch (operation) { - case INTERSECTION: - return !event.otherInOut; - case UNION: - return event.otherInOut; - case DIFFERENCE: - // return (event.isSubject && !event.otherInOut) || - // (!event.isSubject && event.otherInOut); - return (event.isSubject && event.otherInOut) || - (!event.isSubject && !event.otherInOut); - case XOR: - return true; - } - break; - case SAME_TRANSITION: - return operation === INTERSECTION || operation === UNION; - case DIFFERENT_TRANSITION: - return operation === DIFFERENCE; - case NON_CONTRIBUTING: - return false; - } - return false; - } - /* eslint-enable indent */ - - - function determineResultTransition(event, operation) { - var thisIn = !event.inOut; - var thatIn = !event.otherInOut; - - var isIn; - switch (operation) { - case INTERSECTION: - isIn = thisIn && thatIn; break; - case UNION: - isIn = thisIn || thatIn; break; - case XOR: - isIn = thisIn ^ thatIn; break; - case DIFFERENCE: - if (event.isSubject) { - isIn = thisIn && !thatIn; - } else { - isIn = thatIn && !thisIn; - } - break; - } - return isIn ? +1 : -1; - } - - var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) { - - /** - * Is left endpoint? - * @type {Boolean} - */ - this.left = left; - - /** - * @type {Array.} - */ - this.point = point; - - /** - * Other edge reference - * @type {SweepEvent} - */ - this.otherEvent = otherEvent; - - /** - * Belongs to source or clipping polygon - * @type {Boolean} - */ - this.isSubject = isSubject; - - /** - * Edge contribution type - * @type {Number} - */ - this.type = edgeType || NORMAL; - - - /** - * In-out transition for the sweepline crossing polygon - * @type {Boolean} - */ - this.inOut = false; - - - /** - * @type {Boolean} - */ - this.otherInOut = false; - - /** - * Previous event in result? - * @type {SweepEvent} - */ - this.prevInResult = null; - - /** - * Type of result transition (0 = not in result, +1 = out-in, -1, in-out) - * @type {Number} - */ - this.resultTransition = 0; - - // connection step - - /** - * @type {Number} - */ - this.otherPos = -1; - - /** - * @type {Number} - */ - this.outputContourId = -1; - - this.isExteriorRing = true; // TODO: Looks unused, remove? - }; - - var prototypeAccessors$1 = { inResult: { configurable: true } }; - - - /** - * @param{Array.}p - * @return {Boolean} - */ - SweepEvent.prototype.isBelow = function isBelow (p) { - var p0 = this.point, p1 = this.otherEvent.point; - return this.left - ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 - // signedArea(this.point, this.otherEvent.point, p) > 0 : - : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; - //signedArea(this.otherEvent.point, this.point, p) > 0; - }; - - - /** - * @param{Array.}p - * @return {Boolean} - */ - SweepEvent.prototype.isAbove = function isAbove (p) { - return !this.isBelow(p); - }; - - - /** - * @return {Boolean} - */ - SweepEvent.prototype.isVertical = function isVertical () { - return this.point[0] === this.otherEvent.point[0]; - }; - - - /** - * Does event belong to result? - * @return {Boolean} - */ - prototypeAccessors$1.inResult.get = function () { - return this.resultTransition !== 0; - }; - - - SweepEvent.prototype.clone = function clone () { - var copy = new SweepEvent( - this.point, this.left, this.otherEvent, this.isSubject, this.type); - - copy.contourId = this.contourId; - copy.resultTransition = this.resultTransition; - copy.prevInResult = this.prevInResult; - copy.isExteriorRing = this.isExteriorRing; - copy.inOut = this.inOut; - copy.otherInOut = this.otherInOut; - - return copy; - }; - - Object.defineProperties( SweepEvent.prototype, prototypeAccessors$1 ); - - function equals(p1, p2) { - if (p1[0] === p2[0]) { - if (p1[1] === p2[1]) { - return true; - } else { - return false; - } - } - return false; - } - - // const EPSILON = 1e-9; - // const abs = Math.abs; - // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164 - // Precision problem. - // - // module.exports = function equals(p1, p2) { - // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON; - // }; - - var epsilon = 1.1102230246251565e-16; - var splitter = 134217729; - var resulterrbound = (3 + 8 * epsilon) * epsilon; - - // fast_expansion_sum_zeroelim routine from oritinal code - function sum(elen, e, flen, f, h) { - var Q, Qnew, hh, bvirt; - var enow = e[0]; - var fnow = f[0]; - var eindex = 0; - var findex = 0; - if ((fnow > enow) === (fnow > -enow)) { - Q = enow; - enow = e[++eindex]; - } else { - Q = fnow; - fnow = f[++findex]; - } - var hindex = 0; - if (eindex < elen && findex < flen) { - if ((fnow > enow) === (fnow > -enow)) { - Qnew = enow + Q; - hh = Q - (Qnew - enow); - enow = e[++eindex]; - } else { - Qnew = fnow + Q; - hh = Q - (Qnew - fnow); - fnow = f[++findex]; - } - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - while (eindex < elen && findex < flen) { - if ((fnow > enow) === (fnow > -enow)) { - Qnew = Q + enow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (enow - bvirt); - enow = e[++eindex]; - } else { - Qnew = Q + fnow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (fnow - bvirt); - fnow = f[++findex]; - } - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - } - } - while (eindex < elen) { - Qnew = Q + enow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (enow - bvirt); - enow = e[++eindex]; - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - } - while (findex < flen) { - Qnew = Q + fnow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (fnow - bvirt); - fnow = f[++findex]; - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - } - if (Q !== 0 || hindex === 0) { - h[hindex++] = Q; - } - return hindex; - } - - function estimate(elen, e) { - var Q = e[0]; - for (var i = 1; i < elen; i++) { Q += e[i]; } - return Q; - } - - function vec(n) { - return new Float64Array(n); - } - - var ccwerrboundA = (3 + 16 * epsilon) * epsilon; - var ccwerrboundB = (2 + 12 * epsilon) * epsilon; - var ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon; - - var B = vec(4); - var C1 = vec(8); - var C2 = vec(12); - var D = vec(16); - var u = vec(4); - - function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) { - var acxtail, acytail, bcxtail, bcytail; - var bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3; - - var acx = ax - cx; - var bcx = bx - cx; - var acy = ay - cy; - var bcy = by - cy; - - s1 = acx * bcy; - c = splitter * acx; - ahi = c - (c - acx); - alo = acx - ahi; - c = splitter * bcy; - bhi = c - (c - bcy); - blo = bcy - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acy * bcx; - c = splitter * acy; - ahi = c - (c - acy); - alo = acy - ahi; - c = splitter * bcx; - bhi = c - (c - bcx); - blo = bcx - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - B[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - B[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - B[2] = _j - (u3 - bvirt) + (_i - bvirt); - B[3] = u3; - - var det = estimate(4, B); - var errbound = ccwerrboundB * detsum; - if (det >= errbound || -det >= errbound) { - return det; - } - - bvirt = ax - acx; - acxtail = ax - (acx + bvirt) + (bvirt - cx); - bvirt = bx - bcx; - bcxtail = bx - (bcx + bvirt) + (bvirt - cx); - bvirt = ay - acy; - acytail = ay - (acy + bvirt) + (bvirt - cy); - bvirt = by - bcy; - bcytail = by - (bcy + bvirt) + (bvirt - cy); - - if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) { - return det; - } - - errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det); - det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail); - if (det >= errbound || -det >= errbound) { return det; } - - s1 = acxtail * bcy; - c = splitter * acxtail; - ahi = c - (c - acxtail); - alo = acxtail - ahi; - c = splitter * bcy; - bhi = c - (c - bcy); - blo = bcy - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acytail * bcx; - c = splitter * acytail; - ahi = c - (c - acytail); - alo = acytail - ahi; - c = splitter * bcx; - bhi = c - (c - bcx); - blo = bcx - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - u[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - u[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - u[2] = _j - (u3 - bvirt) + (_i - bvirt); - u[3] = u3; - var C1len = sum(4, B, 4, u, C1); - - s1 = acx * bcytail; - c = splitter * acx; - ahi = c - (c - acx); - alo = acx - ahi; - c = splitter * bcytail; - bhi = c - (c - bcytail); - blo = bcytail - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acy * bcxtail; - c = splitter * acy; - ahi = c - (c - acy); - alo = acy - ahi; - c = splitter * bcxtail; - bhi = c - (c - bcxtail); - blo = bcxtail - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - u[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - u[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - u[2] = _j - (u3 - bvirt) + (_i - bvirt); - u[3] = u3; - var C2len = sum(C1len, C1, 4, u, C2); - - s1 = acxtail * bcytail; - c = splitter * acxtail; - ahi = c - (c - acxtail); - alo = acxtail - ahi; - c = splitter * bcytail; - bhi = c - (c - bcytail); - blo = bcytail - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acytail * bcxtail; - c = splitter * acytail; - ahi = c - (c - acytail); - alo = acytail - ahi; - c = splitter * bcxtail; - bhi = c - (c - bcxtail); - blo = bcxtail - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - u[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - u[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - u[2] = _j - (u3 - bvirt) + (_i - bvirt); - u[3] = u3; - var Dlen = sum(C2len, C2, 4, u, D); - - return D[Dlen - 1]; - } - - function orient2d(ax, ay, bx, by, cx, cy) { - var detleft = (ay - cy) * (bx - cx); - var detright = (ax - cx) * (by - cy); - var det = detleft - detright; - - if (detleft === 0 || detright === 0 || (detleft > 0) !== (detright > 0)) { return det; } - - var detsum = Math.abs(detleft + detright); - if (Math.abs(det) >= ccwerrboundA * detsum) { return det; } - - return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum); - } - - /** - * Signed area of the triangle (p0, p1, p2) - * @param {Array.} p0 - * @param {Array.} p1 - * @param {Array.} p2 - * @return {Number} - */ - function signedArea(p0, p1, p2) { - var res = orient2d(p0[0], p0[1], p1[0], p1[1], p2[0], p2[1]); - if (res > 0) { return -1; } - if (res < 0) { return 1; } - return 0; - } - - /** - * @param {SweepEvent} e1 - * @param {SweepEvent} e2 - * @return {Number} - */ - function compareEvents(e1, e2) { - var p1 = e1.point; - var p2 = e2.point; - - // Different x-coordinate - if (p1[0] > p2[0]) { return 1; } - if (p1[0] < p2[0]) { return -1; } - - // Different points, but same x-coordinate - // Event with lower y-coordinate is processed first - if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; } - - return specialCases(e1, e2, p1); - } - - - /* eslint-disable no-unused-vars */ - function specialCases(e1, e2, p1, p2) { - // Same coordinates, but one is a left endpoint and the other is - // a right endpoint. The right endpoint is processed first - if (e1.left !== e2.left) - { return e1.left ? 1 : -1; } - - // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; - // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) - // Same coordinates, both events - // are left endpoints or right endpoints. - // not collinear - if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { - // the event associate to the bottom segment is processed first - return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1; - } - - return (!e1.isSubject && e2.isSubject) ? 1 : -1; - } - /* eslint-enable no-unused-vars */ - - /** - * @param {SweepEvent} se - * @param {Array.} p - * @param {Queue} queue - * @return {Queue} - */ - function divideSegment(se, p, queue) { - var r = new SweepEvent(p, false, se, se.isSubject); - var l = new SweepEvent(p, true, se.otherEvent, se.isSubject); - - /* eslint-disable no-console */ - if (equals(se.point, se.otherEvent.point)) { - console.warn('what is that, a collapsed segment?', se); - } - /* eslint-enable no-console */ - - r.contourId = l.contourId = se.contourId; - - // avoid a rounding error. The left event would be processed after the right event - if (compareEvents(l, se.otherEvent) > 0) { - se.otherEvent.left = true; - l.left = false; - } - - // avoid a rounding error. The left event would be processed after the right event - // if (compareEvents(se, r) > 0) {} - - se.otherEvent.otherEvent = l; - se.otherEvent = r; - - queue.push(l); - queue.push(r); - - return queue; - } - - //const EPS = 1e-9; - - /** - * Finds the magnitude of the cross product of two vectors (if we pretend - * they're in three dimensions) - * - * @param {Object} a First vector - * @param {Object} b Second vector - * @private - * @returns {Number} The magnitude of the cross product - */ - function crossProduct(a, b) { - return (a[0] * b[1]) - (a[1] * b[0]); - } - - /** - * Finds the dot product of two vectors. - * - * @param {Object} a First vector - * @param {Object} b Second vector - * @private - * @returns {Number} The dot product - */ - function dotProduct(a, b) { - return (a[0] * b[0]) + (a[1] * b[1]); - } - - /** - * Finds the intersection (if any) between two line segments a and b, given the - * line segments' end points a1, a2 and b1, b2. - * - * This algorithm is based on Schneider and Eberly. - * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - * Page 244. - * - * @param {Array.} a1 point of first line - * @param {Array.} a2 point of first line - * @param {Array.} b1 point of second line - * @param {Array.} b2 point of second line - * @param {Boolean=} noEndpointTouch whether to skip single touchpoints - * (meaning connected segments) as - * intersections - * @returns {Array.>|Null} If the lines intersect, the point of - * intersection. If they overlap, the two end points of the overlapping segment. - * Otherwise, null. - */ - function intersection (a1, a2, b1, b2, noEndpointTouch) { - // The algorithm expects our lines in the form P + sd, where P is a point, - // s is on the interval [0, 1], and d is a vector. - // We are passed two points. P can be the first point of each pair. The - // vector, then, could be thought of as the distance (in x and y components) - // from the first point to the second point. - // So first, let's make our vectors: - var va = [a2[0] - a1[0], a2[1] - a1[1]]; - var vb = [b2[0] - b1[0], b2[1] - b1[1]]; - // We also define a function to convert back to regular point form: - - /* eslint-disable arrow-body-style */ - - function toPoint(p, s, d) { - return [ - p[0] + s * d[0], - p[1] + s * d[1] - ]; - } - - /* eslint-enable arrow-body-style */ - - // The rest is pretty much a straight port of the algorithm. - var e = [b1[0] - a1[0], b1[1] - a1[1]]; - var kross = crossProduct(va, vb); - var sqrKross = kross * kross; - var sqrLenA = dotProduct(va, va); - //const sqrLenB = dotProduct(vb, vb); - - // Check for line intersection. This works because of the properties of the - // cross product -- specifically, two vectors are parallel if and only if the - // cross product is the 0 vector. The full calculation involves relative error - // to account for possible very small line segments. See Schneider & Eberly - // for details. - if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) { - // If they're not parallel, then (because these are line segments) they - // still might not actually intersect. This code checks that the - // intersection point of the lines is actually on both line segments. - var s = crossProduct(e, vb) / kross; - if (s < 0 || s > 1) { - // not on line segment a - return null; - } - var t = crossProduct(e, va) / kross; - if (t < 0 || t > 1) { - // not on line segment b - return null; - } - if (s === 0 || s === 1) { - // on an endpoint of line segment a - return noEndpointTouch ? null : [toPoint(a1, s, va)]; - } - if (t === 0 || t === 1) { - // on an endpoint of line segment b - return noEndpointTouch ? null : [toPoint(b1, t, vb)]; - } - return [toPoint(a1, s, va)]; - } - - // If we've reached this point, then the lines are either parallel or the - // same, but the segments could overlap partially or fully, or not at all. - // So we need to find the overlap, if any. To do that, we can use e, which is - // the (vector) difference between the two initial points. If this is parallel - // with the line itself, then the two lines are the same line, and there will - // be overlap. - //const sqrLenE = dotProduct(e, e); - kross = crossProduct(e, va); - sqrKross = kross * kross; - - if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { - // Lines are just parallel, not the same. No overlap. - return null; - } - - var sa = dotProduct(va, e) / sqrLenA; - var sb = sa + dotProduct(va, vb) / sqrLenA; - var smin = Math.min(sa, sb); - var smax = Math.max(sa, sb); - - // this is, essentially, the FindIntersection acting on floats from - // Schneider & Eberly, just inlined into this function. - if (smin <= 1 && smax >= 0) { - - // overlap on an end point - if (smin === 1) { - return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)]; - } - - if (smax === 0) { - return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)]; - } - - if (noEndpointTouch && smin === 0 && smax === 1) { return null; } - - // There's overlap on a segment -- two points of intersection. Return both. - return [ - toPoint(a1, smin > 0 ? smin : 0, va), - toPoint(a1, smax < 1 ? smax : 1, va) - ]; - } - - return null; - } - - /** - * @param {SweepEvent} se1 - * @param {SweepEvent} se2 - * @param {Queue} queue - * @return {Number} - */ - function possibleIntersection (se1, se2, queue) { - // that disallows self-intersecting polygons, - // did cost us half a day, so I'll leave it - // out of respect - // if (se1.isSubject === se2.isSubject) return; - var inter = intersection( - se1.point, se1.otherEvent.point, - se2.point, se2.otherEvent.point - ); - - var nintersections = inter ? inter.length : 0; - if (nintersections === 0) { return 0; } // no intersection - - // the line segments intersect at an endpoint of both line segments - if ((nintersections === 1) && - (equals(se1.point, se2.point) || - equals(se1.otherEvent.point, se2.otherEvent.point))) { - return 0; - } - - if (nintersections === 2 && se1.isSubject === se2.isSubject) { - // if(se1.contourId === se2.contourId){ - // console.warn('Edges of the same polygon overlap', - // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point); - // } - //throw new Error('Edges of the same polygon overlap'); - return 0; - } - - // The line segments associated to se1 and se2 intersect - if (nintersections === 1) { - - // if the intersection point is not an endpoint of se1 - if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) { - divideSegment(se1, inter[0], queue); - } - - // if the intersection point is not an endpoint of se2 - if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) { - divideSegment(se2, inter[0], queue); - } - return 1; - } - - // The line segments associated to se1 and se2 overlap - var events = []; - var leftCoincide = false; - var rightCoincide = false; - - if (equals(se1.point, se2.point)) { - leftCoincide = true; // linked - } else if (compareEvents(se1, se2) === 1) { - events.push(se2, se1); - } else { - events.push(se1, se2); - } - - if (equals(se1.otherEvent.point, se2.otherEvent.point)) { - rightCoincide = true; - } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { - events.push(se2.otherEvent, se1.otherEvent); - } else { - events.push(se1.otherEvent, se2.otherEvent); - } - - if ((leftCoincide && rightCoincide) || leftCoincide) { - // both line segments are equal or share the left endpoint - se2.type = NON_CONTRIBUTING; - se1.type = (se2.inOut === se1.inOut) - ? SAME_TRANSITION : DIFFERENT_TRANSITION; - - if (leftCoincide && !rightCoincide) { - // honestly no idea, but changing events selection from [2, 1] - // to [0, 1] fixes the overlapping self-intersecting polygons issue - divideSegment(events[1].otherEvent, events[0].point, queue); - } - return 2; - } - - // the line segments share the right endpoint - if (rightCoincide) { - divideSegment(events[0], events[1].point, queue); - return 3; - } - - // no line segment includes totally the other one - if (events[0] !== events[3].otherEvent) { - divideSegment(events[0], events[1].point, queue); - divideSegment(events[1], events[2].point, queue); - return 3; - } - - // one line segment includes the other one - divideSegment(events[0], events[1].point, queue); - divideSegment(events[3].otherEvent, events[2].point, queue); - - return 3; - } - - /** - * @param {SweepEvent} le1 - * @param {SweepEvent} le2 - * @return {Number} - */ - function compareSegments(le1, le2) { - if (le1 === le2) { return 0; } - - // Segments are not collinear - if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || - signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { - - // If they share their left endpoint use the right endpoint to sort - if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; } - - // Different left endpoint: use the left endpoint to sort - if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; } - - // has the line segment associated to e1 been inserted - // into S after the line segment associated to e2 ? - if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; } - - // The line segment associated to e2 has been inserted - // into S after the line segment associated to e1 - return le1.isBelow(le2.point) ? -1 : 1; - } - - if (le1.isSubject === le2.isSubject) { // same polygon - var p1 = le1.point, p2 = le2.point; - if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) { - p1 = le1.otherEvent.point; p2 = le2.otherEvent.point; - if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; } - else { return le1.contourId > le2.contourId ? 1 : -1; } - } - } else { // Segments are collinear, but belong to separate polygons - return le1.isSubject ? -1 : 1; - } - - return compareEvents(le1, le2) === 1 ? 1 : -1; - } - - function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) { - var sweepLine = new SplayTree(compareSegments); - var sortedEvents = []; - - var rightbound = Math.min(sbbox[2], cbbox[2]); - - var prev, next, begin; - - while (eventQueue.length !== 0) { - var event = eventQueue.pop(); - sortedEvents.push(event); - - // optimization by bboxes for intersection and difference goes here - if ((operation === INTERSECTION && event.point[0] > rightbound) || - (operation === DIFFERENCE && event.point[0] > sbbox[2])) { - break; - } - - if (event.left) { - next = prev = sweepLine.insert(event); - begin = sweepLine.minNode(); - - if (prev !== begin) { prev = sweepLine.prev(prev); } - else { prev = null; } - - next = sweepLine.next(next); - - var prevEvent = prev ? prev.key : null; - var prevprevEvent = (void 0); - computeFields(event, prevEvent, operation); - if (next) { - if (possibleIntersection(event, next.key, eventQueue) === 2) { - computeFields(event, prevEvent, operation); - computeFields(next.key, event, operation); - } - } - - if (prev) { - if (possibleIntersection(prev.key, event, eventQueue) === 2) { - var prevprev = prev; - if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); } - else { prevprev = null; } - - prevprevEvent = prevprev ? prevprev.key : null; - computeFields(prevEvent, prevprevEvent, operation); - computeFields(event, prevEvent, operation); - } - } - } else { - event = event.otherEvent; - next = prev = sweepLine.find(event); - - if (prev && next) { - - if (prev !== begin) { prev = sweepLine.prev(prev); } - else { prev = null; } - - next = sweepLine.next(next); - sweepLine.remove(event); - - if (next && prev) { - possibleIntersection(prev.key, next.key, eventQueue); - } - } - } - } - return sortedEvents; - } - - var Contour = function Contour() { - this.points = []; - this.holeIds = []; - this.holeOf = null; - this.depth = null; - }; - - Contour.prototype.isExterior = function isExterior () { - return this.holeOf == null; - }; - - /** - * @param {Array.} sortedEvents - * @return {Array.} - */ - function orderEvents(sortedEvents) { - var event, i, len, tmp; - var resultEvents = []; - for (i = 0, len = sortedEvents.length; i < len; i++) { - event = sortedEvents[i]; - if ((event.left && event.inResult) || - (!event.left && event.otherEvent.inResult)) { - resultEvents.push(event); - } - } - // Due to overlapping edges the resultEvents array can be not wholly sorted - var sorted = false; - while (!sorted) { - sorted = true; - for (i = 0, len = resultEvents.length; i < len; i++) { - if ((i + 1) < len && - compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { - tmp = resultEvents[i]; - resultEvents[i] = resultEvents[i + 1]; - resultEvents[i + 1] = tmp; - sorted = false; - } - } - } - - - for (i = 0, len = resultEvents.length; i < len; i++) { - event = resultEvents[i]; - event.otherPos = i; - } - - // imagine, the right event is found in the beginning of the queue, - // when his left counterpart is not marked yet - for (i = 0, len = resultEvents.length; i < len; i++) { - event = resultEvents[i]; - if (!event.left) { - tmp = event.otherPos; - event.otherPos = event.otherEvent.otherPos; - event.otherEvent.otherPos = tmp; - } - } - - return resultEvents; - } - - - /** - * @param {Number} pos - * @param {Array.} resultEvents - * @param {Object>} processed - * @return {Number} - */ - function nextPos(pos, resultEvents, processed, origPos) { - var newPos = pos + 1, - p = resultEvents[pos].point, - p1; - var length = resultEvents.length; - - if (newPos < length) - { p1 = resultEvents[newPos].point; } - - while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { - if (!processed[newPos]) { - return newPos; - } else { - newPos++; - } - if (newPos < length) { - p1 = resultEvents[newPos].point; - } - } - - newPos = pos - 1; - - while (processed[newPos] && newPos > origPos) { - newPos--; - } - - return newPos; - } - - - function initializeContourFromContext(event, contours, contourId) { - var contour = new Contour(); - if (event.prevInResult != null) { - var prevInResult = event.prevInResult; - // Note that it is valid to query the "previous in result" for its output contour id, - // because we must have already processed it (i.e., assigned an output contour id) - // in an earlier iteration, otherwise it wouldn't be possible that it is "previous in - // result". - var lowerContourId = prevInResult.outputContourId; - var lowerResultTransition = prevInResult.resultTransition; - if (lowerResultTransition > 0) { - // We are inside. Now we have to check if the thing below us is another hole or - // an exterior contour. - var lowerContour = contours[lowerContourId]; - if (lowerContour.holeOf != null) { - // The lower contour is a hole => Connect the new contour as a hole to its parent, - // and use same depth. - var parentContourId = lowerContour.holeOf; - contours[parentContourId].holeIds.push(contourId); - contour.holeOf = parentContourId; - contour.depth = contours[lowerContourId].depth; - } else { - // The lower contour is an exterior contour => Connect the new contour as a hole, - // and increment depth. - contours[lowerContourId].holeIds.push(contourId); - contour.holeOf = lowerContourId; - contour.depth = contours[lowerContourId].depth + 1; - } - } else { - // We are outside => this contour is an exterior contour of same depth. - contour.holeOf = null; - contour.depth = contours[lowerContourId].depth; - } - } else { - // There is no lower/previous contour => this contour is an exterior contour of depth 0. - contour.holeOf = null; - contour.depth = 0; - } - return contour; - } - - /** - * @param {Array.} sortedEvents - * @return {Array.<*>} polygons - */ - function connectEdges(sortedEvents) { - var i, len; - var resultEvents = orderEvents(sortedEvents); - - // "false"-filled array - var processed = {}; - var contours = []; - - var loop = function ( ) { - - if (processed[i]) { - return; - } - - var contourId = contours.length; - var contour = initializeContourFromContext(resultEvents[i], contours, contourId); - - // Helper function that combines marking an event as processed with assigning its output contour ID - var markAsProcessed = function (pos) { - processed[pos] = true; - if (pos < resultEvents.length && resultEvents[pos]) { - resultEvents[pos].outputContourId = contourId; - } - }; - - var pos = i; - var origPos = i; - - var initial = resultEvents[i].point; - contour.points.push(initial); - - /* eslint no-constant-condition: "off" */ - while (true) { - markAsProcessed(pos); - - pos = resultEvents[pos].otherPos; - - markAsProcessed(pos); - contour.points.push(resultEvents[pos].point); - - pos = nextPos(pos, resultEvents, processed, origPos); - - if (pos == origPos || pos >= resultEvents.length || !resultEvents[pos]) { - break; - } - } - - contours.push(contour); - }; - - for (i = 0, len = resultEvents.length; i < len; i++) loop( ); - - return contours; - } - - var tinyqueue = TinyQueue; - var default_1 = TinyQueue; - - function TinyQueue(data, compare) { - if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); } - - this.data = data || []; - this.length = this.data.length; - this.compare = compare || defaultCompare; - - if (this.length > 0) { - for (var i = (this.length >> 1) - 1; i >= 0; i--) { this._down(i); } - } - } - - function defaultCompare(a, b) { - return a < b ? -1 : a > b ? 1 : 0; - } - - TinyQueue.prototype = { - - push: function (item) { - this.data.push(item); - this.length++; - this._up(this.length - 1); - }, - - pop: function () { - if (this.length === 0) { return undefined; } - - var top = this.data[0]; - this.length--; - - if (this.length > 0) { - this.data[0] = this.data[this.length]; - this._down(0); - } - this.data.pop(); - - return top; - }, - - peek: function () { - return this.data[0]; - }, - - _up: function (pos) { - var data = this.data; - var compare = this.compare; - var item = data[pos]; - - while (pos > 0) { - var parent = (pos - 1) >> 1; - var current = data[parent]; - if (compare(item, current) >= 0) { break; } - data[pos] = current; - pos = parent; - } - - data[pos] = item; - }, - - _down: function (pos) { - var data = this.data; - var compare = this.compare; - var halfLength = this.length >> 1; - var item = data[pos]; - - while (pos < halfLength) { - var left = (pos << 1) + 1; - var right = left + 1; - var best = data[left]; - - if (right < this.length && compare(data[right], best) < 0) { - left = right; - best = data[right]; - } - if (compare(best, item) >= 0) { break; } - - data[pos] = best; - pos = left; - } - - data[pos] = item; - } - }; - tinyqueue.default = default_1; - - var max = Math.max; - var min = Math.min; - - var contourId = 0; - - - function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { - var i, len, s1, s2, e1, e2; - for (i = 0, len = contourOrHole.length - 1; i < len; i++) { - s1 = contourOrHole[i]; - s2 = contourOrHole[i + 1]; - e1 = new SweepEvent(s1, false, undefined, isSubject); - e2 = new SweepEvent(s2, false, e1, isSubject); - e1.otherEvent = e2; - - if (s1[0] === s2[0] && s1[1] === s2[1]) { - continue; // skip collapsed edges, or it breaks - } - - e1.contourId = e2.contourId = depth; - if (!isExteriorRing) { - e1.isExteriorRing = false; - e2.isExteriorRing = false; - } - if (compareEvents(e1, e2) > 0) { - e2.left = true; - } else { - e1.left = true; - } - - var x = s1[0], y = s1[1]; - bbox[0] = min(bbox[0], x); - bbox[1] = min(bbox[1], y); - bbox[2] = max(bbox[2], x); - bbox[3] = max(bbox[3], y); - - // Pushing it so the queue is sorted from left to right, - // with object on the left having the highest priority. - Q.push(e1); - Q.push(e2); - } - } - - - function fillQueue(subject, clipping, sbbox, cbbox, operation) { - var eventQueue = new tinyqueue(null, compareEvents); - var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk; - - for (i = 0, ii = subject.length; i < ii; i++) { - polygonSet = subject[i]; - for (j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (isExteriorRing) { contourId++; } - processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); - } - } - - for (i = 0, ii = clipping.length; i < ii; i++) { - polygonSet = clipping[i]; - for (j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (operation === DIFFERENCE) { isExteriorRing = false; } - if (isExteriorRing) { contourId++; } - processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); - } - } - - return eventQueue; - } - - var EMPTY = []; - - - function trivialOperation(subject, clipping, operation) { - var result = null; - if (subject.length * clipping.length === 0) { - if (operation === INTERSECTION) { - result = EMPTY; - } else if (operation === DIFFERENCE) { - result = subject; - } else if (operation === UNION || - operation === XOR) { - result = (subject.length === 0) ? clipping : subject; - } - } - return result; - } - - - function compareBBoxes(subject, clipping, sbbox, cbbox, operation) { - var result = null; - if (sbbox[0] > cbbox[2] || - cbbox[0] > sbbox[2] || - sbbox[1] > cbbox[3] || - cbbox[1] > sbbox[3]) { - if (operation === INTERSECTION) { - result = EMPTY; - } else if (operation === DIFFERENCE) { - result = subject; - } else if (operation === UNION || - operation === XOR) { - result = subject.concat(clipping); - } - } - return result; - } - - - function boolean(subject, clipping, operation) { - if (typeof subject[0][0][0] === 'number') { - subject = [subject]; - } - if (typeof clipping[0][0][0] === 'number') { - clipping = [clipping]; - } - var trivial = trivialOperation(subject, clipping, operation); - if (trivial) { - return trivial === EMPTY ? null : trivial; - } - var sbbox = [Infinity, Infinity, -Infinity, -Infinity]; - var cbbox = [Infinity, Infinity, -Infinity, -Infinity]; - - // console.time('fill queue'); - var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation); - //console.timeEnd('fill queue'); - - trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation); - if (trivial) { - return trivial === EMPTY ? null : trivial; - } - // console.time('subdivide edges'); - var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation); - //console.timeEnd('subdivide edges'); - - // console.time('connect vertices'); - var contours = connectEdges(sortedEvents); - //console.timeEnd('connect vertices'); - - // Convert contours to polygons - var polygons = []; - for (var i = 0; i < contours.length; i++) { - var contour = contours[i]; - if (contour.isExterior()) { - // The exterior ring goes first - var rings = [contour.points]; - // Followed by holes if any - for (var j = 0; j < contour.holeIds.length; j++) { - var holeId = contour.holeIds[j]; - rings.push(contours[holeId].points); - } - polygons.push(rings); - } - } - - return polygons; - } - - function union (subject, clipping) { - return boolean(subject, clipping, UNION); - } - - function diff (subject, clipping) { - return boolean(subject, clipping, DIFFERENCE); - } - - function xor (subject, clipping) { - return boolean(subject, clipping, XOR); - } - - function intersection$1 (subject, clipping) { - return boolean(subject, clipping, INTERSECTION); - } - - // import * as martinez from '../../dist/martinez.min'; - - var mode = window.location.hash.substring(1); - var path = '../test/fixtures/'; - var file; - - switch (mode) { - case 'geo': - file = 'asia.geojson'; - break; - case 'states': - file = 'states_source.geojson'; - break; - case 'trapezoid': - file = 'trapezoid-box.geojson'; - break; - case 'canada': - file = 'canada.geojson'; - break; - case 'horseshoe': - file = 'horseshoe.geojson'; - break; - case 'hourglasses': - file = 'hourglasses.geojson'; - break; - case 'edge_overlap': - file = 'polygon_trapezoid_edge_overlap.geojson'; - break; - case 'touching_boxes': - file = 'touching_boxes.geojson'; - break; - case 'triangles': - file = 'two_pointed_triangles.geojson'; - break; - case 'holecut': - file = 'hole_cut.geojson'; - break; - case 'overlapping_segments': - file = 'overlapping_segments.geojson'; - break; - case 'overlap_loop': - file = 'overlap_loop.geojson'; - break; - case 'overlap_y': - file = 'overlap_y.geojson'; - break; - case 'overlap_two': - file = 'overlap_two.geojson'; - break; - case 'disjoint_boxes': - file = 'disjoint_boxes.geojson'; - break; - case 'polygons_edge_overlap': - file = 'polygons_edge_overlap.geojson'; - break; - case 'vertical_boxes': - file = 'vertical_boxes.geojson'; - break; - case 'collapsed': - file = 'collapsed.geojson'; - break; - case 'fatal1': - file = 'fatal1.geojson'; - break; - case 'fatal2': - file = 'fatal2.geojson'; - break; - case 'fatal3': - file = 'fatal3.geojson'; - break; - case 'fatal4': - file = 'fatal4.geojson'; - break; - case 'rectangles': - file = 'rectangles.geojson'; - break; - default: - file = 'hole_hole.geojson'; - break; - } - - console.log(mode); - - - var OPERATIONS = { - INTERSECTION: 0, - UNION: 1, - DIFFERENCE: 2, - XOR: 3 - }; - - var div = document.createElement('div'); - div.id = 'image-map'; - div.style.width = div.style.height = '100%'; - document.body.appendChild(div); - - // create the slippy map - var map = window.map = L.map('image-map', { - minZoom: 1, - maxZoom: 20, - center: [0, 0], - zoom: 2, - crs: mode === 'geo' ? L.CRS.EPSG4326 : L.extend({}, L.CRS.Simple, { - transformation: new L.Transformation(1/8, 0, -1/8, 0) - }), - editable: true - }); - - map.addControl(new L.NewPolygonControl({ - callback: map.editTools.startPolygon - })); - map.addControl(new L.Coordinates()); - map.addControl(new L.BooleanControl({ - callback: run, - clear: clear - })); - - var drawnItems = window.drawnItems = L.geoJson().addTo(map); - var rawData = null; - function loadData(path) { - console.log(path); - fetch(path) - .then(function (r) { return r.json(); }) - .then(function (json) { - drawnItems.addData(json); - rawData = json; - map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); - }); - } - - function clear() { - drawnItems.clearLayers(); - results.clearLayers(); - rawData = null; - } - - var reader = new jsts.io.GeoJSONReader(); - var writer = new jsts.io.GeoJSONWriter(); - - function getClippingPoly (layers) { - if (rawData !== null && rawData.features.length > 1) { return rawData.features[1]; } - return layers[1].toGeoJSON(); - } - - function run (op) { - var layers = drawnItems.getLayers(); - if (layers.length < 2) { return; } - var subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); - var clipping = getClippingPoly(layers); - - //console.log('input', subject, clipping, op); - - // subject = JSON.parse(JSON.stringify(subject)); - // clipping = JSON.parse(JSON.stringify(clipping)); - - var operation; - if (op === OPERATIONS.INTERSECTION) { - operation = intersection$1; - } else if (op === OPERATIONS.UNION) { - operation = union; - } else if (op === OPERATIONS.DIFFERENCE) { - operation = diff; - } else if (op === 5) { // B - A - operation = diff; - - var temp = subject; - subject = clipping; - clipping = temp; - } else { - operation = xor; - } - - console.time('martinez'); - var result = operation(subject.geometry.coordinates, clipping.geometry.coordinates); - console.timeEnd('martinez'); - - console.log('result', result); - // console.log(JSON.stringify(result)); - results.clearLayers(); - - if (result !== null) { - results.addData({ - 'type': 'Feature', - 'geometry': { - 'type': 'MultiPolygon', - 'coordinates': result - } - }); - - setTimeout(function() { - console.time('jsts'); - var s = reader.read(subject); - var c = reader.read(clipping); - var res; - if (op === OPERATIONS.INTERSECTION) { - res = s.geometry.intersection(c.geometry); - } else if (op === OPERATIONS.UNION) { - res = s.geometry.union(c.geometry); - } else if (op === OPERATIONS.DIFFERENCE) { - res = s.geometry.difference(c.geometry); - } else { - res = s.geometry.symDifference(c.geometry); - } - res = writer.write(res); - console.timeEnd('jsts'); - // console.log('JSTS result', res); - }, 500); - } - } - - map.on('editable:created', function(evt) { - drawnItems.addLayer(evt.layer); - evt.layer.on('click', function(e) { - if ((e.originalEvent.ctrlKey || e.originalEvent.metaKey) && this.editEnabled()) { - this.editor.newHole(e.latlng); - } - }); - }); - - var results = window.results = L.geoJson(null, { - style: function(feature) { - return { - color: 'red', - weight: 1 - }; - } - }).addTo(map); - - loadData(path + file); - -}(L)); diff --git a/demo/js/coordinates.js b/demo/js/coordinates.js deleted file mode 100644 index 2b4c367..0000000 --- a/demo/js/coordinates.js +++ /dev/null @@ -1,20 +0,0 @@ -import L from 'leaflet'; - -L.Coordinates = L.Control.extend({ - options: { - position: 'bottomright' - }, - - onAdd: function(map) { - this._container = L.DomUtil.create('div', 'leaflet-bar'); - this._container.style.background = '#ffffff'; - map.on('mousemove', this._onMouseMove, this); - return this._container; - }, - - _onMouseMove: function(e) { - this._container.innerHTML = '' + - e.latlng.lng.toFixed(3) + ', ' + e.latlng.lat.toFixed(3) + ''; - } - -}); diff --git a/demo/js/index.js b/demo/js/index.js deleted file mode 100644 index 721492f..0000000 --- a/demo/js/index.js +++ /dev/null @@ -1,264 +0,0 @@ -import './coordinates'; -import './polygoncontrol'; -import './booleanopcontrol'; -import * as martinez from '../../src'; -// import * as martinez from '../../dist/martinez.min'; - -let mode = window.location.hash.substring(1); -let path = '../test/fixtures/'; -const ext = '.geojson'; -let file; - -let files = [ - 'asia', - 'trapezoid-box', - 'canada', - 'horseshoe', - 'hourglasses', - 'overlap_y', - 'polygon_trapezoid_edge_overlap', - 'touching_boxes', - 'two_pointed_triangles', - 'hole_cut', - 'overlapping_segments', - 'overlap_loop', - 'disjoint_boxes' -]; - -switch (mode) { - case 'geo': - file = 'asia.geojson'; - break; - case 'states': - file = 'states_source.geojson'; - break; - case 'trapezoid': - file = 'trapezoid-box.geojson'; - break; - case 'canada': - file = 'canada.geojson'; - break; - case 'horseshoe': - file = 'horseshoe.geojson'; - break; - case 'hourglasses': - file = 'hourglasses.geojson'; - break; - case 'edge_overlap': - file = 'polygon_trapezoid_edge_overlap.geojson'; - break; - case 'touching_boxes': - file = 'touching_boxes.geojson'; - break; - case 'triangles': - file = 'two_pointed_triangles.geojson'; - break; - case 'holecut': - file = 'hole_cut.geojson'; - break; - case 'overlapping_segments': - file = 'overlapping_segments.geojson'; - break; - case 'overlap_loop': - file = 'overlap_loop.geojson'; - break; - case 'overlap_y': - file = 'overlap_y.geojson'; - break; - case 'overlap_two': - file = 'overlap_two.geojson'; - break; - case 'disjoint_boxes': - file = 'disjoint_boxes.geojson'; - break; - case 'polygons_edge_overlap': - file = 'polygons_edge_overlap.geojson'; - break; - case 'vertical_boxes': - file = 'vertical_boxes.geojson'; - break; - case 'collapsed': - file = 'collapsed.geojson'; - break; - case 'fatal1': - file = 'fatal1.geojson'; - break; - case 'fatal2': - file = 'fatal2.geojson'; - break; - case 'fatal3': - file = 'fatal3.geojson'; - break; - case 'fatal4': - file = 'fatal4.geojson'; - break; - case 'rectangles': - file = 'rectangles.geojson'; - break; - default: - file = 'hole_hole.geojson'; - break; -} - -console.log(mode); - -var OPERATIONS = { - INTERSECTION: 0, - UNION: 1, - DIFFERENCE: 2, - XOR: 3 -}; - -var div = document.createElement('div'); -div.id = 'image-map'; -div.style.width = div.style.height = '100%'; -document.body.appendChild(div); - -// create the slippy map -var map = (window.map = L.map('image-map', { - minZoom: 1, - maxZoom: 20, - center: [0, 0], - zoom: 2, - crs: - mode === 'geo' - ? L.CRS.EPSG4326 - : L.extend({}, L.CRS.Simple, { - transformation: new L.Transformation(1 / 8, 0, -1 / 8, 0) - }), - editable: true -})); - -map.addControl( - new L.NewPolygonControl({ - callback: map.editTools.startPolygon - }) -); -map.addControl(new L.Coordinates()); -map.addControl( - new L.BooleanControl({ - callback: run, - clear: clear - }) -); - -var drawnItems = (window.drawnItems = L.geoJson().addTo(map)); -var rawData = null; -function loadData(path) { - console.log(path); - fetch(path) - .then((r) => r.json()) - .then((json) => { - drawnItems.addData(json); - rawData = json; - map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); - }); -} - -function clear() { - drawnItems.clearLayers(); - results.clearLayers(); - rawData = null; -} - -var reader = new jsts.io.GeoJSONReader(); -var writer = new jsts.io.GeoJSONWriter(); - -function getClippingPoly(layers) { - if (rawData !== null && rawData.features.length > 1) - return rawData.features[1]; - return layers[1].toGeoJSON(); -} - -function run(op) { - var layers = drawnItems.getLayers(); - if (layers.length < 2) return; - var subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); - var clipping = getClippingPoly(layers); - - //console.log('input', subject, clipping, op); - - // subject = JSON.parse(JSON.stringify(subject)); - // clipping = JSON.parse(JSON.stringify(clipping)); - - var operation; - if (op === OPERATIONS.INTERSECTION) { - operation = martinez.intersection; - } else if (op === OPERATIONS.UNION) { - operation = martinez.union; - } else if (op === OPERATIONS.DIFFERENCE) { - operation = martinez.diff; - } else if (op === 5) { - // B - A - operation = martinez.diff; - - var temp = subject; - subject = clipping; - clipping = temp; - } else { - operation = martinez.xor; - } - - console.time('martinez'); - var result = operation( - subject.geometry.coordinates, - clipping.geometry.coordinates - ); - console.timeEnd('martinez'); - - console.log('result', result); - // console.log(JSON.stringify(result)); - results.clearLayers(); - - if (result !== null) { - results.addData({ - type: 'Feature', - geometry: { - type: 'MultiPolygon', - coordinates: result - } - }); - - setTimeout(() => { - console.time('jsts'); - var s = reader.read(subject); - var c = reader.read(clipping); - var res; - if (op === OPERATIONS.INTERSECTION) { - res = s.geometry.intersection(c.geometry); - } else if (op === OPERATIONS.UNION) { - res = s.geometry.union(c.geometry); - } else if (op === OPERATIONS.DIFFERENCE) { - res = s.geometry.difference(c.geometry); - } else { - res = s.geometry.symDifference(c.geometry); - } - res = writer.write(res); - console.timeEnd('jsts'); - // console.log('JSTS result', res); - }, 500); - } -} - -map.on('editable:created', (evt) => { - drawnItems.addLayer(evt.layer); - evt.layer.on('click', function (e) { - if ( - (e.originalEvent.ctrlKey || e.originalEvent.metaKey) && - this.editEnabled() - ) { - this.editor.newHole(e.latlng); - } - }); -}); - -var results = (window.results = L.geoJson(null, { - style: function (feature) { - return { - color: 'red', - weight: 1 - }; - } -}).addTo(map)); - -loadData(path + file); diff --git a/demo/js/polygoncontrol.js b/demo/js/polygoncontrol.js deleted file mode 100644 index 70a2623..0000000 --- a/demo/js/polygoncontrol.js +++ /dev/null @@ -1,35 +0,0 @@ -import L from 'leaflet'; - -L.EditControl = L.Control.extend({ - - options: { - position: 'topleft', - callback: null, - kind: '', - html: '' - }, - - onAdd: function (map) { - var container = L.DomUtil.create('div', 'leaflet-control leaflet-bar'), - link = L.DomUtil.create('a', '', container); - - link.href = '#'; - link.title = 'Create a new ' + this.options.kind; - link.innerHTML = this.options.html; - L.DomEvent.on(link, 'click', L.DomEvent.stop) - .on(link, 'click', function () { - window.LAYER = this.options.callback.call(map.editTools); - }, this); - - return container; - } - -}); - -L.NewPolygonControl = L.EditControl.extend({ - options: { - position: 'topleft', - kind: 'polygon', - html: '▰' - } -}); diff --git a/demo/orthogonal.html b/demo/orthogonal.html deleted file mode 100644 index 5956622..0000000 --- a/demo/orthogonal.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - Martinez Clipping - - - - - - - - diff --git a/package.json b/package.json index fefecfc..b20da12 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,10 @@ "dist/" ], "scripts": { - "start": "vite", + "start": "vite web", "build": "tsc && vite build", - "preview": "vite preview", + "build:demo": "vite build web", + "preview": "vite preview web", "test": "vitest run", "test:ui": "vitest --ui", "test:watch": "vitest", diff --git a/vite.config.js b/vite.config.js index 8a335f5..1adb32c 100644 --- a/vite.config.js +++ b/vite.config.js @@ -11,12 +11,11 @@ export default defineConfig({ }, rollupOptions: { input: { - main: resolve(__dirname, 'demo/index.html') - //orthogonal: resolve(__dirname, 'demo/orthogonal.html') + main: resolve(__dirname, 'web/index.html'), + orthogonal: resolve(__dirname, 'web/orthogonal.html') } } }, - root: resolve(__dirname, 'web'), test: { dir: resolve(__dirname, 'test'), include: ['**/*.test.ts'] diff --git a/web/index-bundle.js b/web/index-bundle.js deleted file mode 100644 index 90b6e2d..0000000 --- a/web/index-bundle.js +++ /dev/null @@ -1,2189 +0,0 @@ -(function (L, jsts) { - 'use strict'; - - L = L && L.hasOwnProperty('default') ? L['default'] : L; - jsts = jsts && jsts.hasOwnProperty('default') ? jsts['default'] : jsts; - - const CoordinatesControl = L.Control.extend({ - options: { - position: 'bottomright' - }, - - onAdd: function (map) { - this._container = L.DomUtil.create('div', 'leaflet-bar'); - this._container.style.background = '#ffffff'; - map.on('mousemove', this._onMouseMove, this); - return this._container; - }, - - _onMouseMove: function (e) { - this._container.innerHTML = - '' + - e.latlng.lng.toFixed(3) + - ', ' + - e.latlng.lat.toFixed(3) + - ''; - } - }); - - const EditControl = L.Control.extend({ - options: { - position: 'topleft', - callback: null, - kind: '', - html: '' - }, - onAdd: function (map) { - const container = L.DomUtil.create('div', 'leaflet-control leaflet-bar'); - const link = L.DomUtil.create('a', '', container); - link.href = '#'; - link.title = 'Create a new ' + this.options.kind; - link.innerHTML = this.options.html; - L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', function () { - // @ts-ignore - globalThis.LAYER = this.options.callback.call(map.editTools); - }, this); - return container; - } - }); - const NewPolygonControl = EditControl.extend({ - options: { - position: 'topleft', - kind: 'polygon', - html: '▰', - callback: () => undefined - } - }); - - const BooleanControl = L.Control.extend({ - options: { - position: 'topright', - callback: () => undefined - }, - - onAdd: function () { - var container = (this._container = L.DomUtil.create('div', 'leaflet-bar')); - this._container.style.background = '#ffffff'; - this._container.style.padding = '10px'; - container.innerHTML = ` -
-
    -
  • -
  • -
  • -
  • -
  • -
- - -
`; - var form = container.querySelector('form'); - L.DomEvent.on( - form, - 'submit', - function (evt) { - L.DomEvent.stop(evt); - var radios = Array.prototype.slice.call( - form.querySelectorAll('input[type=radio]') - ); - for (var i = 0, len = radios.length; i < len; i++) { - if (radios[i].checked) { - this.options.callback(parseInt(radios[i].value)); - break; - } - } - }, - this - ).on( - form.clear, - 'click', - function (evt) { - L.DomEvent.stop(evt); - this.options.clear(); - }, - this - ); - - L.DomEvent.disableClickPropagation( - this._container - ).disableScrollPropagation(this._container); - return this._container; - } - }); - - function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; } - - class SplayTree { - - constructor(compare = DEFAULT_COMPARE, noDuplicates = false) { - this._compare = compare; - this._root = null; - this._size = 0; - this._noDuplicates = !!noDuplicates; - } - - - rotateLeft(x) { - var y = x.right; - if (y) { - x.right = y.left; - if (y.left) y.left.parent = x; - y.parent = x.parent; - } - - if (!x.parent) this._root = y; - else if (x === x.parent.left) x.parent.left = y; - else x.parent.right = y; - if (y) y.left = x; - x.parent = y; - } - - - rotateRight(x) { - var y = x.left; - if (y) { - x.left = y.right; - if (y.right) y.right.parent = x; - y.parent = x.parent; - } - - if (!x.parent) this._root = y; - else if(x === x.parent.left) x.parent.left = y; - else x.parent.right = y; - if (y) y.right = x; - x.parent = y; - } - - - _splay(x) { - while (x.parent) { - var p = x.parent; - if (!p.parent) { - if (p.left === x) this.rotateRight(p); - else this.rotateLeft(p); - } else if (p.left === x && p.parent.left === p) { - this.rotateRight(p.parent); - this.rotateRight(p); - } else if (p.right === x && p.parent.right === p) { - this.rotateLeft(p.parent); - this.rotateLeft(p); - } else if (p.left === x && p.parent.right === p) { - this.rotateRight(p); - this.rotateLeft(p); - } else { - this.rotateLeft(p); - this.rotateRight(p); - } - } - } - - - splay(x) { - var p, gp, ggp, l, r; - - while (x.parent) { - p = x.parent; - gp = p.parent; - - if (gp && gp.parent) { - ggp = gp.parent; - if (ggp.left === gp) ggp.left = x; - else ggp.right = x; - x.parent = ggp; - } else { - x.parent = null; - this._root = x; - } - - l = x.left; r = x.right; - - if (x === p.left) { // left - if (gp) { - if (gp.left === p) { - /* zig-zig */ - if (p.right) { - gp.left = p.right; - gp.left.parent = gp; - } else gp.left = null; - - p.right = gp; - gp.parent = p; - } else { - /* zig-zag */ - if (l) { - gp.right = l; - l.parent = gp; - } else gp.right = null; - - x.left = gp; - gp.parent = x; - } - } - if (r) { - p.left = r; - r.parent = p; - } else p.left = null; - - x.right = p; - p.parent = x; - } else { // right - if (gp) { - if (gp.right === p) { - /* zig-zig */ - if (p.left) { - gp.right = p.left; - gp.right.parent = gp; - } else gp.right = null; - - p.left = gp; - gp.parent = p; - } else { - /* zig-zag */ - if (r) { - gp.left = r; - r.parent = gp; - } else gp.left = null; - - x.right = gp; - gp.parent = x; - } - } - if (l) { - p.right = l; - l.parent = p; - } else p.right = null; - - x.left = p; - p.parent = x; - } - } - } - - - replace(u, v) { - if (!u.parent) this._root = v; - else if (u === u.parent.left) u.parent.left = v; - else u.parent.right = v; - if (v) v.parent = u.parent; - } - - - minNode(u = this._root) { - if (u) while (u.left) u = u.left; - return u; - } - - - maxNode(u = this._root) { - if (u) while (u.right) u = u.right; - return u; - } - - - insert(key, data) { - var z = this._root; - var p = null; - var comp = this._compare; - var cmp; - - if (this._noDuplicates) { - while (z) { - p = z; - cmp = comp(z.key, key); - if (cmp === 0) return; - else if (comp(z.key, key) < 0) z = z.right; - else z = z.left; - } - } else { - while (z) { - p = z; - if (comp(z.key, key) < 0) z = z.right; - else z = z.left; - } - } - - z = { key, data, left: null, right: null, parent: p }; - - if (!p) this._root = z; - else if (comp(p.key, z.key) < 0) p.right = z; - else p.left = z; - - this.splay(z); - this._size++; - return z; - } - - - find (key) { - var z = this._root; - var comp = this._compare; - while (z) { - var cmp = comp(z.key, key); - if (cmp < 0) z = z.right; - else if (cmp > 0) z = z.left; - else return z; - } - return null; - } - - /** - * Whether the tree contains a node with the given key - * @param {Key} key - * @return {boolean} true/false - */ - contains (key) { - var node = this._root; - var comparator = this._compare; - while (node) { - var cmp = comparator(key, node.key); - if (cmp === 0) return true; - else if (cmp < 0) node = node.left; - else node = node.right; - } - - return false; - } - - - remove (key) { - var z = this.find(key); - - if (!z) return false; - - this.splay(z); - - if (!z.left) this.replace(z, z.right); - else if (!z.right) this.replace(z, z.left); - else { - var y = this.minNode(z.right); - if (y.parent !== z) { - this.replace(y, y.right); - y.right = z.right; - y.right.parent = y; - } - this.replace(z, y); - y.left = z.left; - y.left.parent = y; - } - - this._size--; - return true; - } - - - removeNode(z) { - if (!z) return false; - - this.splay(z); - - if (!z.left) this.replace(z, z.right); - else if (!z.right) this.replace(z, z.left); - else { - var y = this.minNode(z.right); - if (y.parent !== z) { - this.replace(y, y.right); - y.right = z.right; - y.right.parent = y; - } - this.replace(z, y); - y.left = z.left; - y.left.parent = y; - } - - this._size--; - return true; - } - - - erase (key) { - var z = this.find(key); - if (!z) return; - - this.splay(z); - - var s = z.left; - var t = z.right; - - var sMax = null; - if (s) { - s.parent = null; - sMax = this.maxNode(s); - this.splay(sMax); - this._root = sMax; - } - if (t) { - if (s) sMax.right = t; - else this._root = t; - t.parent = sMax; - } - - this._size--; - } - - /** - * Removes and returns the node with smallest key - * @return {?Node} - */ - pop () { - var node = this._root, returnValue = null; - if (node) { - while (node.left) node = node.left; - returnValue = { key: node.key, data: node.data }; - this.remove(node.key); - } - return returnValue; - } - - - /* eslint-disable class-methods-use-this */ - - /** - * Successor node - * @param {Node} node - * @return {?Node} - */ - next (node) { - var successor = node; - if (successor) { - if (successor.right) { - successor = successor.right; - while (successor && successor.left) successor = successor.left; - } else { - successor = node.parent; - while (successor && successor.right === node) { - node = successor; successor = successor.parent; - } - } - } - return successor; - } - - - /** - * Predecessor node - * @param {Node} node - * @return {?Node} - */ - prev (node) { - var predecessor = node; - if (predecessor) { - if (predecessor.left) { - predecessor = predecessor.left; - while (predecessor && predecessor.right) predecessor = predecessor.right; - } else { - predecessor = node.parent; - while (predecessor && predecessor.left === node) { - node = predecessor; - predecessor = predecessor.parent; - } - } - } - return predecessor; - } - /* eslint-enable class-methods-use-this */ - - - /** - * @param {forEachCallback} callback - * @return {SplayTree} - */ - forEach(callback) { - var current = this._root; - var s = [], done = false, i = 0; - - while (!done) { - // Reach the left most Node of the current Node - if (current) { - // Place pointer to a tree node on the stack - // before traversing the node's left subtree - s.push(current); - current = current.left; - } else { - // BackTrack from the empty subtree and visit the Node - // at the top of the stack; however, if the stack is - // empty you are done - if (s.length > 0) { - current = s.pop(); - callback(current, i++); - - // We have visited the node and its left - // subtree. Now, it's right subtree's turn - current = current.right; - } else done = true; - } - } - return this; - } - - - /** - * Walk key range from `low` to `high`. Stops if `fn` returns a value. - * @param {Key} low - * @param {Key} high - * @param {Function} fn - * @param {*?} ctx - * @return {SplayTree} - */ - range(low, high, fn, ctx) { - const Q = []; - const compare = this._compare; - let node = this._root, cmp; - - while (Q.length !== 0 || node) { - if (node) { - Q.push(node); - node = node.left; - } else { - node = Q.pop(); - cmp = compare(node.key, high); - if (cmp > 0) { - break; - } else if (compare(node.key, low) >= 0) { - if (fn.call(ctx, node)) return this; // stop if smth is returned - } - node = node.right; - } - } - return this; - } - - /** - * Returns all keys in order - * @return {Array} - */ - keys () { - var current = this._root; - var s = [], r = [], done = false; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - r.push(current.key); - current = current.right; - } else done = true; - } - } - return r; - } - - - /** - * Returns `data` fields of all nodes in order. - * @return {Array} - */ - values () { - var current = this._root; - var s = [], r = [], done = false; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - r.push(current.data); - current = current.right; - } else done = true; - } - } - return r; - } - - - /** - * Returns node at given index - * @param {number} index - * @return {?Node} - */ - at (index) { - // removed after a consideration, more misleading than useful - // index = index % this.size; - // if (index < 0) index = this.size - index; - - var current = this._root; - var s = [], done = false, i = 0; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - if (i === index) return current; - i++; - current = current.right; - } else done = true; - } - } - return null; - } - - /** - * Bulk-load items. Both array have to be same size - * @param {Array} keys - * @param {Array} [values] - * @param {Boolean} [presort=false] Pre-sort keys and values, using - * tree's comparator. Sorting is done - * in-place - * @return {AVLTree} - */ - load(keys = [], values = [], presort = false) { - if (this._size !== 0) throw new Error('bulk-load: tree is not empty'); - const size = keys.length; - if (presort) sort(keys, values, 0, size - 1, this._compare); - this._root = loadRecursive(null, keys, values, 0, size); - this._size = size; - return this; - } - - - min() { - var node = this.minNode(this._root); - if (node) return node.key; - else return null; - } - - - max() { - var node = this.maxNode(this._root); - if (node) return node.key; - else return null; - } - - isEmpty() { return this._root === null; } - get size() { return this._size; } - - - /** - * Create a tree and load it with items - * @param {Array} keys - * @param {Array?} [values] - - * @param {Function?} [comparator] - * @param {Boolean?} [presort=false] Pre-sort keys and values, using - * tree's comparator. Sorting is done - * in-place - * @param {Boolean?} [noDuplicates=false] Allow duplicates - * @return {SplayTree} - */ - static createTree(keys, values, comparator, presort, noDuplicates) { - return new SplayTree(comparator, noDuplicates).load(keys, values, presort); - } - } - - - function loadRecursive (parent, keys, values, start, end) { - const size = end - start; - if (size > 0) { - const middle = start + Math.floor(size / 2); - const key = keys[middle]; - const data = values[middle]; - const node = { key, data, parent }; - node.left = loadRecursive(node, keys, values, start, middle); - node.right = loadRecursive(node, keys, values, middle + 1, end); - return node; - } - return null; - } - - - function sort(keys, values, left, right, compare) { - if (left >= right) return; - - const pivot = keys[(left + right) >> 1]; - let i = left - 1; - let j = right + 1; - - while (true) { - do i++; while (compare(keys[i], pivot) < 0); - do j--; while (compare(keys[j], pivot) > 0); - if (i >= j) break; - - let tmp = keys[i]; - keys[i] = keys[j]; - keys[j] = tmp; - - tmp = values[i]; - values[i] = values[j]; - values[j] = tmp; - } - - sort(keys, values, left, j, compare); - sort(keys, values, j + 1, right, compare); - } - - const NORMAL = 0; - const NON_CONTRIBUTING = 1; - const SAME_TRANSITION = 2; - const DIFFERENT_TRANSITION = 3; - - const INTERSECTION = 0; - const UNION = 1; - const DIFFERENCE = 2; - const XOR = 3; - - function computeFields(event, prev, operation) { - // compute inOut and otherInOut fields - if (prev === null) { - event.inOut = false; - event.otherInOut = true; - // previous line segment in sweepline belongs to the same polygon - } - else { - if (event.isSubject === prev.isSubject) { - event.inOut = !prev.inOut; - event.otherInOut = prev.otherInOut; - // previous line segment in sweepline belongs to the clipping polygon - } - else { - event.inOut = !prev.otherInOut; - event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; - } - // compute prevInResult field - if (prev) { - event.prevInResult = - !inResult(prev, operation) || prev.isVertical() - ? prev.prevInResult - : prev; - } - } - // check if the line segment belongs to the Boolean operation - let isInResult = inResult(event, operation); - if (isInResult) { - event.resultTransition = determineResultTransition(event, operation); - } - else { - event.resultTransition = 0; - } - } - function inResult(event, operation) { - switch (event.type) { - case NORMAL: - switch (operation) { - case INTERSECTION: - return !event.otherInOut; - case UNION: - return event.otherInOut; - case DIFFERENCE: - // return (event.isSubject && !event.otherInOut) || - // (!event.isSubject && event.otherInOut); - return ((event.isSubject && event.otherInOut) || - (!event.isSubject && !event.otherInOut)); - case XOR: - return true; - } - break; - case SAME_TRANSITION: - return operation === INTERSECTION || operation === UNION; - case DIFFERENT_TRANSITION: - return operation === DIFFERENCE; - case NON_CONTRIBUTING: - return false; - } - return false; - } - /* eslint-enable indent */ - function determineResultTransition(event, operation) { - let thisIn = !event.inOut; - let thatIn = !event.otherInOut; - let isIn; - switch (operation) { - case INTERSECTION: - isIn = thisIn && thatIn; - break; - case UNION: - isIn = thisIn || thatIn; - break; - case XOR: - isIn = thisIn !== thatIn; - break; - case DIFFERENCE: - if (event.isSubject) - isIn = thisIn && !thatIn; - else - isIn = thatIn && !thisIn; - break; - } - return isIn ? +1 : -1; - } - - class SweepEvent { - /** - * Sweepline event - * - * @class {SweepEvent} - * @param {Array.} point - * @param {Boolean} left - * @param {SweepEvent=} otherEvent - * @param {Boolean} isSubject - * @param {Number} edgeType - */ - constructor(point, left, otherEvent, isSubject) { - // transition flags - // In-out transition for the sweepline crossing polygon - this.inOut = false; - this.otherInOut = false; - this.prevInResult = null; - // Does event belong to result? - //public inResult: boolean = false; - // connection step - this.resultInOut = false; - this.isExteriorRing = true; - this.contourId = -1; - this.resultTransition = 0; - this.outputContourId = 0; - this.otherPos = 0; - this.left = left; - this.point = point; - this.otherEvent = otherEvent; - this.isSubject = isSubject; - this.type = NORMAL; - this.inOut = false; - this.otherInOut = false; - /** - * Previous event in result? - * @type {SweepEvent} - */ - this.prevInResult = null; - /** - * Type of result transition (0 = not in result, +1 = out-in, -1, in-out) - * @type {Number} - */ - this.resultTransition = 0; - // connection step - /** - * @type {Number} - */ - this.otherPos = -1; - /** - * @type {Number} - */ - this.outputContourId = -1; - this.isExteriorRing = true; // TODO: Looks unused, remove? - } - isBelow(p) { - return isBelow(this, p); - } - isAbove(p) { - return !isBelow(this, p); - } - /** - * @return {Boolean} - */ - isVertical() { - return this.point[0] === this.otherEvent.point[0]; - } - /** - * Does event belong to result? - * TODO: make it static - * @return {Boolean} - */ - get inResult() { - return this.resultTransition !== 0; - } - clone() { - const copy = new SweepEvent(this.point, this.left, this.otherEvent, this.isSubject); - copy.type = this.type; - copy.resultTransition = this.resultTransition; - //copy.inResult = this.inResult; - copy.prevInResult = this.prevInResult; - copy.isExteriorRing = this.isExteriorRing; - copy.inOut = this.inOut; - copy.otherInOut = this.otherInOut; - return copy; - } - } - function isBelow(e, p) { - const p0 = e.point, p1 = e.otherEvent.point; - return e.left - ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 - : // signedArea(this.point, this.otherEvent.point, p) > 0 : - (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; - //signedArea(this.otherEvent.point, this.point, p) > 0; - } - - function equals(p1, p2) { - if (p1[0] === p2[0]) { - if (p1[1] === p2[1]) - return true; - return false; - } - return false; - } - // const EPSILON = 1e-9; - // const abs = Math.abs; - // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164 - // Precision problem. - // - // module.exports = function equals(p1, p2) { - // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON; - // }; - - const epsilon = 1.1102230246251565e-16; - const splitter = 134217729; - const resulterrbound = (3 + 8 * epsilon) * epsilon; - - // fast_expansion_sum_zeroelim routine from oritinal code - function sum(elen, e, flen, f, h) { - let Q, Qnew, hh, bvirt; - let enow = e[0]; - let fnow = f[0]; - let eindex = 0; - let findex = 0; - if ((fnow > enow) === (fnow > -enow)) { - Q = enow; - enow = e[++eindex]; - } else { - Q = fnow; - fnow = f[++findex]; - } - let hindex = 0; - if (eindex < elen && findex < flen) { - if ((fnow > enow) === (fnow > -enow)) { - Qnew = enow + Q; - hh = Q - (Qnew - enow); - enow = e[++eindex]; - } else { - Qnew = fnow + Q; - hh = Q - (Qnew - fnow); - fnow = f[++findex]; - } - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - while (eindex < elen && findex < flen) { - if ((fnow > enow) === (fnow > -enow)) { - Qnew = Q + enow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (enow - bvirt); - enow = e[++eindex]; - } else { - Qnew = Q + fnow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (fnow - bvirt); - fnow = f[++findex]; - } - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - } - } - while (eindex < elen) { - Qnew = Q + enow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (enow - bvirt); - enow = e[++eindex]; - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - } - while (findex < flen) { - Qnew = Q + fnow; - bvirt = Qnew - Q; - hh = Q - (Qnew - bvirt) + (fnow - bvirt); - fnow = f[++findex]; - Q = Qnew; - if (hh !== 0) { - h[hindex++] = hh; - } - } - if (Q !== 0 || hindex === 0) { - h[hindex++] = Q; - } - return hindex; - } - - function estimate(elen, e) { - let Q = e[0]; - for (let i = 1; i < elen; i++) Q += e[i]; - return Q; - } - - function vec(n) { - return new Float64Array(n); - } - - const ccwerrboundA = (3 + 16 * epsilon) * epsilon; - const ccwerrboundB = (2 + 12 * epsilon) * epsilon; - const ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon; - - const B = vec(4); - const C1 = vec(8); - const C2 = vec(12); - const D = vec(16); - const u = vec(4); - - function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) { - let acxtail, acytail, bcxtail, bcytail; - let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3; - - const acx = ax - cx; - const bcx = bx - cx; - const acy = ay - cy; - const bcy = by - cy; - - s1 = acx * bcy; - c = splitter * acx; - ahi = c - (c - acx); - alo = acx - ahi; - c = splitter * bcy; - bhi = c - (c - bcy); - blo = bcy - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acy * bcx; - c = splitter * acy; - ahi = c - (c - acy); - alo = acy - ahi; - c = splitter * bcx; - bhi = c - (c - bcx); - blo = bcx - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - B[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - B[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - B[2] = _j - (u3 - bvirt) + (_i - bvirt); - B[3] = u3; - - let det = estimate(4, B); - let errbound = ccwerrboundB * detsum; - if (det >= errbound || -det >= errbound) { - return det; - } - - bvirt = ax - acx; - acxtail = ax - (acx + bvirt) + (bvirt - cx); - bvirt = bx - bcx; - bcxtail = bx - (bcx + bvirt) + (bvirt - cx); - bvirt = ay - acy; - acytail = ay - (acy + bvirt) + (bvirt - cy); - bvirt = by - bcy; - bcytail = by - (bcy + bvirt) + (bvirt - cy); - - if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) { - return det; - } - - errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det); - det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail); - if (det >= errbound || -det >= errbound) return det; - - s1 = acxtail * bcy; - c = splitter * acxtail; - ahi = c - (c - acxtail); - alo = acxtail - ahi; - c = splitter * bcy; - bhi = c - (c - bcy); - blo = bcy - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acytail * bcx; - c = splitter * acytail; - ahi = c - (c - acytail); - alo = acytail - ahi; - c = splitter * bcx; - bhi = c - (c - bcx); - blo = bcx - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - u[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - u[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - u[2] = _j - (u3 - bvirt) + (_i - bvirt); - u[3] = u3; - const C1len = sum(4, B, 4, u, C1); - - s1 = acx * bcytail; - c = splitter * acx; - ahi = c - (c - acx); - alo = acx - ahi; - c = splitter * bcytail; - bhi = c - (c - bcytail); - blo = bcytail - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acy * bcxtail; - c = splitter * acy; - ahi = c - (c - acy); - alo = acy - ahi; - c = splitter * bcxtail; - bhi = c - (c - bcxtail); - blo = bcxtail - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - u[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - u[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - u[2] = _j - (u3 - bvirt) + (_i - bvirt); - u[3] = u3; - const C2len = sum(C1len, C1, 4, u, C2); - - s1 = acxtail * bcytail; - c = splitter * acxtail; - ahi = c - (c - acxtail); - alo = acxtail - ahi; - c = splitter * bcytail; - bhi = c - (c - bcytail); - blo = bcytail - bhi; - s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); - t1 = acytail * bcxtail; - c = splitter * acytail; - ahi = c - (c - acytail); - alo = acytail - ahi; - c = splitter * bcxtail; - bhi = c - (c - bcxtail); - blo = bcxtail - bhi; - t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); - _i = s0 - t0; - bvirt = s0 - _i; - u[0] = s0 - (_i + bvirt) + (bvirt - t0); - _j = s1 + _i; - bvirt = _j - s1; - _0 = s1 - (_j - bvirt) + (_i - bvirt); - _i = _0 - t1; - bvirt = _0 - _i; - u[1] = _0 - (_i + bvirt) + (bvirt - t1); - u3 = _j + _i; - bvirt = u3 - _j; - u[2] = _j - (u3 - bvirt) + (_i - bvirt); - u[3] = u3; - const Dlen = sum(C2len, C2, 4, u, D); - - return D[Dlen - 1]; - } - - function orient2d(ax, ay, bx, by, cx, cy) { - const detleft = (ay - cy) * (bx - cx); - const detright = (ax - cx) * (by - cy); - const det = detleft - detright; - - if (detleft === 0 || detright === 0 || (detleft > 0) !== (detright > 0)) return det; - - const detsum = Math.abs(detleft + detright); - if (Math.abs(det) >= ccwerrboundA * detsum) return det; - - return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum); - } - - /** - * Signed area of the triangle (p0, p1, p2) - * @param {Array.} p0 - * @param {Array.} p1 - * @param {Array.} p2 - * @return {Number} - */ - function signedArea(p0, p1, p2) { - const res = orient2d(p0[0], p0[1], p1[0], p1[1], p2[0], p2[1]); - if (res > 0) - return -1; - if (res < 0) - return 1; - return 0; - } - - /** - * @param {SweepEvent} e1 - * @param {SweepEvent} e2 - * @return {Number} - */ - function compareEvents(e1, e2) { - const p1 = e1.point; - const p2 = e2.point; - // Different x-coordinate - if (p1[0] > p2[0]) - return 1; - if (p1[0] < p2[0]) - return -1; - // Different points, but same x-coordinate - // Event with lower y-coordinate is processed first - if (p1[1] !== p2[1]) - return p1[1] > p2[1] ? 1 : -1; - return specialCases(e1, e2, p1 /*, p2 */); - } - /* eslint-disable no-unused-vars */ - function specialCases(e1, e2, p1 /*, p2: Point */) { - // Same coordinates, but one is a left endpoint and the other is - // a right endpoint. The right endpoint is processed first - if (e1.left !== e2.left) - return e1.left ? 1 : -1; - // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; - // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) - // Same coordinates, both events - // are left endpoints or right endpoints. - // not collinear - if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { - // the event associate to the bottom segment is processed first - return !isBelow(e1, e2.otherEvent.point) ? 1 : -1; - } - return !e1.isSubject && e2.isSubject ? 1 : -1; - } - /* eslint-enable no-unused-vars */ - - function divideSegment(se, p, queue) { - const r = new SweepEvent(p, false, se, se.isSubject); - const l = new SweepEvent(p, true, se.otherEvent, se.isSubject); - /* eslint-disable no-console */ - if (equals(se.point, se.otherEvent.point)) { - console.warn('what is that, a collapsed segment?', se); - } - /* eslint-enable no-console */ - r.contourId = l.contourId = se.contourId; - // avoid a rounding error. The left event would be processed after the right event - if (compareEvents(l, se.otherEvent) > 0) { - se.otherEvent.left = true; - l.left = false; - } - // avoid a rounding error. The left event would be processed after the right event - // if (compareEvents(se, r) > 0) {} - se.otherEvent.otherEvent = l; - se.otherEvent = r; - queue.push(l); - queue.push(r); - return queue; - } - - //const EPS = 1e-9; - /** - * Finds the magnitude of the cross product of two vectors (if we pretend - * they're in three dimensions) - */ - const crossProduct = (ax, ay, bx, by) => ax * by - ay * bx; - /** - * Finds the dot product of two vectors. - */ - const dotProduct = (ax, ay, bx, by) => ax * bx + ay * by; - const toPoint = (px, py, s, dx, dy) => [ - px + s * dx, - py + s * dy - ]; - /** - * Finds the intersection (if any) between two line segments a and b, given the - * line segments' end points a1, a2 and b1, b2. - * - * This algorithm is based on Schneider and Eberly. - * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - * Page 244. - * - * @param {Array.} a1 point of first line - * @param {Array.} a2 point of first line - * @param {Array.} b1 point of second line - * @param {Array.} b2 point of second line - * @param {Boolean=} noEndpointTouch whether to skip single touchpoints - * (meaning connected segments) as - * intersections - * @returns {Array.>|Null} If the lines intersect, the point of - * intersection. If they overlap, the two end points of the overlapping segment. - * Otherwise, null. - */ - function intersection (a1, a2, b1, b2, noEndpointTouch) { - // The algorithm expects our lines in the form P + sd, where P is a point, - // s is on the interval [0, 1], and d is a vector. - // We are passed two points. P can be the first point of each pair. The - // vector, then, could be thought of as the distance (in x and y components) - // from the first point to the second point. - // So first, let's make our vectors: - const vax = a2[0] - a1[0]; - const vay = a2[1] - a1[1]; - const vbx = b2[0] - b1[0]; - const vby = b2[1] - b1[1]; - // We also define a function to convert back to regular point form: - // The rest is pretty much a straight port of the algorithm. - const ex = b1[0] - a1[0]; - const ey = b1[1] - a1[1]; - let kross = crossProduct(vax, vay, vbx, vby); - let sqrKross = kross * kross; - const sqrLenA = dotProduct(vax, vay, vax, vay); - //const sqrLenB = dotProduct(vb, vb); - // Check for line intersection. This works because of the properties of the - // cross product -- specifically, two vectors are parallel if and only if the - // cross product is the 0 vector. The full calculation involves relative error - // to account for possible very small line segments. See Schneider & Eberly - // for details. - if (sqrKross > 0 /* EPS * sqrLenB * sqLenA */) { - // If they're not parallel, then (because these are line segments) they - // still might not actually intersect. This code checks that the - // intersection point of the lines is actually on both line segments. - const s = crossProduct(ex, ey, vbx, vby) / kross; - if (s < 0 || s > 1) { - // not on line segment a - return null; - } - const t = crossProduct(ex, ey, vax, vay) / kross; - if (t < 0 || t > 1) { - // not on line segment b - return null; - } - if (s === 0 || s === 1) { - // on an endpoint of line segment a - return noEndpointTouch ? null : [toPoint(a1[0], a1[1], s, vax, vay)]; - } - if (t === 0 || t === 1) { - // on an endpoint of line segment b - return noEndpointTouch ? null : [toPoint(b1[0], b1[1], t, vbx, vby)]; - } - return [toPoint(a1[0], a1[1], s, vax, vay)]; - } - // If we've reached this point, then the lines are either parallel or the - // same, but the segments could overlap partially or fully, or not at all. - // So we need to find the overlap, if any. To do that, we can use e, which is - // the (vector) difference between the two initial points. If this is parallel - // with the line itself, then the two lines are the same line, and there will - // be overlap. - //const sqrLenE = dotProduct(e, e); - kross = crossProduct(ex, ey, vax, vay); - sqrKross = kross * kross; - if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { - // Lines are just parallel, not the same. No overlap. - return null; - } - const sa = dotProduct(vax, vay, ex, ey) / sqrLenA; - const sb = sa + dotProduct(vax, vay, vbx, vby) / sqrLenA; - const smin = Math.min(sa, sb); - const smax = Math.max(sa, sb); - // this is, essentially, the FindIntersection acting on floats from - // Schneider & Eberly, just inlined into this function. - if (smin <= 1 && smax >= 0) { - // overlap on an end point - if (smin === 1) { - return noEndpointTouch - ? null - : [toPoint(a1[0], a1[1], smin > 0 ? smin : 0, vax, vay)]; - } - if (smax === 0) { - return noEndpointTouch - ? null - : [toPoint(a1[0], a1[1], smax < 1 ? smax : 1, vax, vay)]; - } - if (noEndpointTouch && smin === 0 && smax === 1) - return null; - // There's overlap on a segment -- two points of intersection. Return both. - return [ - toPoint(a1[0], a1[1], smin > 0 ? smin : 0, vax, vay), - toPoint(a1[0], a1[1], smax < 1 ? smax : 1, vax, vay) - ]; - } - return null; - } - - /** - * @param {SweepEvent} se1 - * @param {SweepEvent} se2 - * @param {Queue} queue - * @return {Number} - */ - function possibleIntersection(se1, se2, queue) { - // that disallows self-intersecting polygons, - // did cost us half a day, so I'll leave it - // out of respect - // if (se1.isSubject === se2.isSubject) return; - const inter = intersection(se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point, false); - // simplify intersection result type - const nintersections = inter ? inter.length : 0; - if (nintersections === 0) - return 0; // no intersection - // the line segments intersect at an endpoint of both line segments - if (nintersections === 1 && - (equals(se1.point, se2.point) || - equals(se1.otherEvent.point, se2.otherEvent.point))) - return 0; - if (nintersections === 2 && se1.isSubject === se2.isSubject) { - // if(se1.contourId === se2.contourId){ - // console.warn('Edges of the same polygon overlap', - // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point); - // } - //throw new Error('Edges of the same polygon overlap'); - return 0; - } - // The line segments associated to se1 and se2 intersect - if (nintersections === 1) { - // @ts-ignore; - const i0 = inter[0]; - // if the intersection point is not an endpoint of se1 - if (!equals(se1.point, i0) && !equals(se1.otherEvent.point, i0)) { - divideSegment(se1, i0, queue); - } - // if the intersection point is not an endpoint of se2 - if (!equals(se2.point, i0) && !equals(se2.otherEvent.point, i0)) { - divideSegment(se2, i0, queue); - } - return 1; - } - // The line segments associated to se1 and se2 overlap - const events = []; - let leftCoincide = false; - let rightCoincide = false; - // linked - if (equals(se1.point, se2.point)) - leftCoincide = true; - else if (compareEvents(se1, se2) === 1) - events.push(se2, se1); - else - events.push(se1, se2); - if (equals(se1.otherEvent.point, se2.otherEvent.point)) - rightCoincide = true; - else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { - events.push(se2.otherEvent, se1.otherEvent); - } - else { - events.push(se1.otherEvent, se2.otherEvent); - } - if ((leftCoincide && rightCoincide) || leftCoincide) { - // both line segments are equal or share the left endpoint - se2.type = NON_CONTRIBUTING; - se1.type = se2.inOut === se1.inOut ? SAME_TRANSITION : DIFFERENT_TRANSITION; - if (leftCoincide && !rightCoincide) { - // honestly no idea, but changing events selection from [2, 1] - // to [0, 1] fixes the overlapping self-intersecting polygons issue - divideSegment(events[1].otherEvent, events[0].point, queue); - } - return 2; - } - // the line segments share the right endpoint - if (rightCoincide) { - divideSegment(events[0], events[1].point, queue); - return 3; - } - // no line segment includes totally the other one - if (events[0] !== events[3].otherEvent) { - divideSegment(events[0], events[1].point, queue); - divideSegment(events[1], events[2].point, queue); - return 3; - } - // one line segment includes the other one - divideSegment(events[0], events[1].point, queue); - divideSegment(events[3].otherEvent, events[2].point, queue); - return 3; - } - - /** - * @param {SweepEvent} le1 - * @param {SweepEvent} le2 - * @return {Number} - */ - function compareSegments(le1, le2) { - if (le1 === le2) - return 0; - // Segments are not collinear - if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || - signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { - // If they share their left endpoint use the right endpoint to sort - if (equals(le1.point, le2.point)) - return isBelow(le1, le2.otherEvent.point) ? -1 : 1; - // Different left endpoint: use the left endpoint to sort - if (le1.point[0] === le2.point[0]) - return le1.point[1] < le2.point[1] ? -1 : 1; - // has the line segment associated to e1 been inserted - // into S after the line segment associated to e2 ? - if (compareEvents(le1, le2) === 1) - return le2.isAbove(le1.point) ? -1 : 1; - // The line segment associated to e2 has been inserted - // into S after the line segment associated to e1 - return isBelow(le1, le2.point) ? -1 : 1; - } - if (le1.isSubject === le2.isSubject) { - // same polygon - let p1 = le1.point, p2 = le2.point; - if (p1[0] === p2[0] && p1[1] === p2[1] /*equals(le1.point, le2.point)*/) { - p1 = le1.otherEvent.point; - p2 = le2.otherEvent.point; - if (p1[0] === p2[0] && p1[1] === p2[1]) - return 0; - else - return le1.contourId > le2.contourId ? 1 : -1; - } - } - else { - // Segments are collinear, but belong to separate polygons - return le1.isSubject ? -1 : 1; - } - return compareEvents(le1, le2) === 1 ? 1 : -1; - } - - function subdivide(eventQueue, sbbox, cbbox, operation) { - const sweepLine = new SplayTree(compareSegments); - const sortedEvents = []; - const rightbound = Math.min(sbbox[2], cbbox[2]); - let prev, next, begin = sweepLine.minNode(); - while (eventQueue.length !== 0) { - let event = eventQueue.pop(); - sortedEvents.push(event); - // optimization by bboxes for intersection and difference goes here - if ((operation === INTERSECTION && event.point[0] > rightbound) || - (operation === DIFFERENCE && event.point[0] > sbbox[2])) { - break; - } - if (event.left) { - next = prev = sweepLine.insert(event); - begin = sweepLine.minNode(); - if (prev !== begin) - prev = sweepLine.prev(prev); - else - prev = null; - next = sweepLine.next(next); - const prevEvent = prev ? prev.key : null; - let prevprevEvent; - computeFields(event, prevEvent, operation); - if (next) { - if (possibleIntersection(event, next.key, eventQueue) === 2) { - computeFields(event, prevEvent, operation); - computeFields(event, next.key, operation); - } - } - if (prev) { - if (possibleIntersection(prev.key, event, eventQueue) === 2) { - let prevprev = prev; - if (prevprev !== begin) - prevprev = sweepLine.prev(prevprev); - else - prevprev = null; - prevprevEvent = prevprev ? prevprev.key : null; - computeFields(prevEvent, prevprevEvent, operation); - computeFields(event, prevEvent, operation); - } - } - } - else { - event = event.otherEvent; - next = prev = sweepLine.find(event); - if (prev && next) { - if (prev !== begin) - prev = sweepLine.prev(prev); - else - prev = null; - next = sweepLine.next(next); - sweepLine.remove(event); - if (next && prev) { - possibleIntersection(prev.key, next.key, eventQueue); - } - } - } - } - return sortedEvents; - } - - class Contour { - constructor() { - this.points = []; - this.holeIds = []; - this.holeOf = null; - this.depth = 0; - } - isExterior() { - return this.holeOf === null; - } - } - - const EmptyPoint = [0, 0]; - function orderEvents(sortedEvents) { - const resultEvents = []; - for (let i = 0, len = sortedEvents.length; i < len; i++) { - const event = sortedEvents[i]; - if ((event.left && event.inResult) || - (!event.left && event.otherEvent.inResult)) { - resultEvents.push(event); - } - } - // Due to overlapping edges the resultEvents array can be not wholly sorted - let sorted = false; - while (!sorted) { - sorted = true; - for (let i = 0, len = resultEvents.length; i < len; i++) { - if (i + 1 < len && - compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { - const tmp = resultEvents[i]; - resultEvents[i] = resultEvents[i + 1]; - resultEvents[i + 1] = tmp; - sorted = false; - } - } - } - for (let i = 0, len = resultEvents.length; i < len; i++) { - resultEvents[i].otherPos = i; - } - // imagine, the right event is found in the beginning of the queue, - // when his left counterpart is not marked yet - for (let i = 0, len = resultEvents.length; i < len; i++) { - const event = resultEvents[i]; - if (!event.left) { - const tmp = event.otherPos; - event.otherPos = event.otherEvent.otherPos; - event.otherEvent.otherPos = tmp; - } - } - return resultEvents; - } - function nextPos(pos, resultEvents, processed, origPos) { - let newPos = pos + 1; - const p = resultEvents[pos].point; - let p1 = EmptyPoint; - const length = resultEvents.length; - if (newPos < length) - p1 = resultEvents[newPos].point; - while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { - if (!processed.has(newPos)) - return newPos; - else - newPos++; - p1 = resultEvents[newPos].point; - } - newPos = pos - 1; - while (processed.has(newPos) && newPos > origPos) - newPos--; - return newPos; - } - function initializeContourFromContext(event, contours, contourId) { - const contour = new Contour(); - if (event.prevInResult != null) { - const prevInResult = event.prevInResult; - // Note that it is valid to query the "previous in result" for its output contour id, - // because we must have already processed it (i.e., assigned an output contour id) - // in an earlier iteration, otherwise it wouldn't be possible that it is "previous in - // result". - const lowerContourId = prevInResult.outputContourId; - const lowerResultTransition = prevInResult.resultTransition; - if (lowerResultTransition > 0) { - // We are inside. Now we have to check if the thing below us is another hole or - // an exterior contour. - const lowerContour = contours[lowerContourId]; - if (lowerContour.holeOf != null) { - // The lower contour is a hole => Connect the new contour as a hole to its parent, - // and use same depth. - const parentContourId = lowerContour.holeOf; - contours[parentContourId].holeIds.push(contourId); - contour.holeOf = parentContourId; - contour.depth = contours[lowerContourId].depth; - } - else { - // The lower contour is an exterior contour => Connect the new contour as a hole, - // and increment depth. - contours[lowerContourId].holeIds.push(contourId); - contour.holeOf = lowerContourId; - contour.depth = contours[lowerContourId].depth + 1; - } - } - else { - // We are outside => this contour is an exterior contour of same depth. - contour.holeOf = null; - contour.depth = contours[lowerContourId].depth; - } - } - else { - // There is no lower/previous contour => this contour is an exterior contour of depth 0. - contour.holeOf = null; - contour.depth = 0; - } - return contour; - } - /** - * @return {Array.<*>} polygons - */ - function connectEdges(sortedEvents) { - const resultEvents = orderEvents(sortedEvents); - // "false"-filled array - const processed = new Set(); - const contours = []; - for (let i = 0, len = resultEvents.length; i < len; i++) { - if (processed.has(i)) - continue; - const contourId = contours.length; - const contour = initializeContourFromContext(resultEvents[i], contours, contourId); - // Helper function that combines marking an event as processed with assigning its output contour ID - const markAsProcessed = (pos) => { - processed.add(pos); - resultEvents[pos].outputContourId = contourId; - }; - let pos = i; - let origPos = i; - const initial = resultEvents[i].point; - contour.points.push(initial); - /* eslint no-constant-condition: "off" */ - while (true) { - markAsProcessed(pos); - pos = resultEvents[pos].otherPos; - markAsProcessed(pos); - contour.points.push(resultEvents[pos].point); - pos = nextPos(pos, resultEvents, processed, origPos); - if (pos === origPos) - break; - } - contours.push(contour); - } - return contours; - } - - class TinyQueue { - constructor(data = [], compare = defaultCompare) { - this.data = data; - this.length = this.data.length; - this.compare = compare; - - if (this.length > 0) { - for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i); - } - } - - push(item) { - this.data.push(item); - this.length++; - this._up(this.length - 1); - } - - pop() { - if (this.length === 0) return undefined; - - const top = this.data[0]; - const bottom = this.data.pop(); - this.length--; - - if (this.length > 0) { - this.data[0] = bottom; - this._down(0); - } - - return top; - } - - peek() { - return this.data[0]; - } - - _up(pos) { - const {data, compare} = this; - const item = data[pos]; - - while (pos > 0) { - const parent = (pos - 1) >> 1; - const current = data[parent]; - if (compare(item, current) >= 0) break; - data[pos] = current; - pos = parent; - } - - data[pos] = item; - } - - _down(pos) { - const {data, compare} = this; - const halfLength = this.length >> 1; - const item = data[pos]; - - while (pos < halfLength) { - let left = (pos << 1) + 1; - let best = data[left]; - const right = left + 1; - - if (right < this.length && compare(data[right], best) < 0) { - left = right; - best = data[right]; - } - if (compare(best, item) >= 0) break; - - data[pos] = best; - pos = left; - } - - data[pos] = item; - } - } - - function defaultCompare(a, b) { - return a < b ? -1 : a > b ? 1 : 0; - } - - const max = Math.max; - const min = Math.min; - let contourId = 0; - function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { - for (let i = 0, len = contourOrHole.length - 1; i < len; i++) { - const s1 = contourOrHole[i]; - const s2 = contourOrHole[i + 1]; - const e1 = new SweepEvent(s1, false, null, isSubject); - const e2 = new SweepEvent(s2, false, e1, isSubject); - e1.otherEvent = e2; - // skip collapsed edges, or it breaks - if (s1[0] === s2[0] && s1[1] === s2[1]) - continue; - e1.contourId = e2.contourId = depth; - if (!isExteriorRing) { - e1.isExteriorRing = false; - e2.isExteriorRing = false; - } - if (compareEvents(e1, e2) > 0) - e2.left = true; - else - e1.left = true; - const [x, y] = s1; - bbox[0] = min(bbox[0], x); - bbox[1] = min(bbox[1], y); - bbox[2] = max(bbox[2], x); - bbox[3] = max(bbox[3], y); - // Pushing it so the queue is sorted from left to right, - // with object on the left having the highest priority. - Q.push(e1); - Q.push(e2); - } - } - function fillQueue(subject, clipping, sbbox, cbbox, operation) { - const eventQueue = new TinyQueue(undefined, compareEvents); - let polygonSet, isExteriorRing; //, k, kk; - for (let i = 0, ii = subject.length; i < ii; i++) { - polygonSet = subject[i]; - for (let j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (isExteriorRing) - contourId++; - processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); - } - } - for (let i = 0, ii = clipping.length; i < ii; i++) { - polygonSet = clipping[i]; - for (let j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (operation === DIFFERENCE) - isExteriorRing = false; - if (isExteriorRing) - contourId++; - processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); - } - } - return eventQueue; - } - - const EMPTY = []; - - function trivialOperation(subject, clipping, operation) { - if (subject.length * clipping.length === 0) { - if (operation === INTERSECTION) - return EMPTY; - if (operation === DIFFERENCE) - return subject; - if (operation === UNION || operation === XOR) { - return subject.length === 0 ? clipping : subject; - } - } - return null; - } - function checkOverlap(subject, clipping, sbbox, cbbox, operation) { - if (sbbox[0] > cbbox[2] || - cbbox[0] > sbbox[2] || - sbbox[1] > cbbox[3] || - cbbox[1] > sbbox[3]) { - if (operation === INTERSECTION) - return EMPTY; - if (operation === DIFFERENCE) - return subject; - if (operation === UNION || operation === XOR) - return subject.concat(clipping); - } - return null; - } - function boolean(subject, clipping, operation) { - const s = typeof subject[0][0][0] === 'number' - ? [subject] - : subject; - const c = typeof clipping[0][0][0] === 'number' - ? [clipping] - : clipping; - let trivial = trivialOperation(s, c, operation); - if (trivial) - return trivial === EMPTY ? null : trivial; - const sbbox = [Infinity, Infinity, -Infinity, -Infinity]; - const cbbox = [Infinity, Infinity, -Infinity, -Infinity]; - // console.time('fill queue'); - const eventQueue = fillQueue(s, c, sbbox, cbbox, operation); - //console.timeEnd('fill queue'); - trivial = checkOverlap(s, c, sbbox, cbbox, operation); - if (trivial) - return trivial === EMPTY ? null : trivial; - // console.time('subdivide edges'); - const sortedEvents = subdivide(eventQueue, sbbox, cbbox, operation); - //console.timeEnd('subdivide edges'); - // console.time('connect vertices'); - const contours = connectEdges(sortedEvents); - //console.timeEnd('connect vertices'); - // Convert contours to polygons - const polygons = []; - for (let i = 0; i < contours.length; i++) { - const contour = contours[i]; - if (contour.isExterior()) { - // The exterior ring goes first - const rings = [contour.points]; - // Followed by holes if any - for (let j = 0; j < contour.holeIds.length; j++) { - const holeId = contour.holeIds[j]; - rings.push(contours[holeId].points); - } - polygons.push(rings); - } - } - return polygons; - } - - const union = (subject, clipping) => boolean(subject, clipping, UNION); - const diff = (subject, clipping) => boolean(subject, clipping, DIFFERENCE); - const xor = (subject, clipping) => boolean(subject, clipping, XOR); - const intersection$1 = (subject, clipping) => boolean(subject, clipping, INTERSECTION); - - // import * as martinez from '../../dist/martinez.min'; - let mode = globalThis.location.hash.substring(1); - let path = 'data/'; - let file; - switch (mode) { - case 'geo': - file = 'asia.geojson'; - break; - case 'states': - file = 'states_source.geojson'; - break; - case 'trapezoid': - file = 'trapezoid-box.geojson'; - break; - case 'canada': - file = 'canada.geojson'; - break; - case 'horseshoe': - file = 'horseshoe.geojson'; - break; - case 'hourglasses': - file = 'hourglasses.geojson'; - break; - case 'edge_overlap': - file = 'polygon_trapezoid_edge_overlap.geojson'; - break; - case 'touching_boxes': - file = 'touching_boxes.geojson'; - break; - case 'triangles': - file = 'two_pointed_triangles.geojson'; - break; - case 'holecut': - file = 'hole_cut.geojson'; - break; - case 'overlapping_segments': - file = 'overlapping_segments.geojson'; - break; - case 'overlap_loop': - file = 'overlap_loop.geojson'; - break; - case 'overlap_y': - file = 'overlap_y.geojson'; - break; - case 'overlap_two': - file = 'overlap_two.geojson'; - break; - case 'disjoint_boxes': - file = 'disjoint_boxes.geojson'; - break; - case 'polygons_edge_overlap': - file = 'polygons_edge_overlap.geojson'; - break; - case 'vertical_boxes': - file = 'vertical_boxes.geojson'; - break; - case 'collapsed': - file = 'collapsed.geojson'; - break; - case 'fatal1': - file = 'fatal1.geojson'; - break; - case 'fatal2': - file = 'fatal2.geojson'; - break; - case 'fatal3': - file = 'fatal3.geojson'; - break; - case 'fatal4': - file = 'fatal4.geojson'; - break; - case 'rectangles': - file = 'rectangles.geojson'; - break; - default: - file = 'hole_hole.geojson'; - break; - } - console.log(mode); - var OPERATIONS = { - INTERSECTION: 0, - UNION: 1, - DIFFERENCE: 2, - XOR: 3 - }; - var div = document.createElement('div'); - div.id = 'image-map'; - div.style.width = div.style.height = '100%'; - document.body.appendChild(div); - // create the slippy map - // @ts-ignore - var map = (globalThis.map = L.map('image-map', { - minZoom: 1, - maxZoom: 20, - center: [0, 0], - zoom: 2, - crs: mode === 'geo' - ? L.CRS.EPSG4326 - : L.extend({}, L.CRS.Simple, { - transformation: new L.Transformation(1 / 8, 0, -1 / 8, 0) - }), - editable: true - })); - map.addControl(new NewPolygonControl({ - // @ts-ignore - callback: map.editTools.startPolygon - })); - // @ts-ignore - map.addControl(new CoordinatesControl()); - map.addControl(new BooleanControl({ - // @ts-ignore - callback: run, - clear - })); - // @ts-ignore - var drawnItems = (globalThis.drawnItems = L.geoJSON().addTo(map)); - var rawData = null; - function loadData(path) { - console.log(path); - fetch(path) - .then((r) => r.json()) - .then((json) => { - drawnItems.addData(json); - rawData = json; - map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); - }); - } - function clear() { - drawnItems.clearLayers(); - results.clearLayers(); - rawData = null; - } - var reader = new jsts.io.GeoJSONReader(); - var writer = new jsts.io.GeoJSONWriter(); - function getClippingPoly(layers) { - // @ts-ignore - if (rawData && rawData.features && rawData.features.length > 1) - return rawData.features[1]; - return layers[1].toGeoJSON(); - } - function run(op) { - var layers = drawnItems.getLayers(); - if (layers.length < 2) - return; - // @ts-ignore - var subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); - var clipping = getClippingPoly(layers); - //console.log('input', subject, clipping, op); - // subject = JSON.parse(JSON.stringify(subject)); - // clipping = JSON.parse(JSON.stringify(clipping)); - var operation; - if (op === OPERATIONS.INTERSECTION) { - operation = intersection$1; - } - else if (op === OPERATIONS.UNION) { - operation = union; - } - else if (op === OPERATIONS.DIFFERENCE) { - operation = diff; - } - else if (op === 5) { - // B - A - operation = diff; - var temp = subject; - subject = clipping; - clipping = temp; - } - else { - operation = xor; - } - console.time('martinez'); - var result = operation(subject.geometry.coordinates, clipping.geometry.coordinates); - console.timeEnd('martinez'); - console.log('result', result); - // console.log(JSON.stringify(result)); - results.clearLayers(); - if (result !== null) { - results.addData({ - type: 'Feature', - geometry: { - type: 'MultiPolygon', - coordinates: result - } - }); - setTimeout(function () { - console.time('jsts'); - var s = reader.read(subject); - var c = reader.read(clipping); - var res; - if (op === OPERATIONS.INTERSECTION) { - // @ts-ignore - res = s.geometry.intersection(c.geometry); - } - else if (op === OPERATIONS.UNION) { - // @ts-ignore - res = s.geometry.union(c.geometry); - } - else if (op === OPERATIONS.DIFFERENCE) { - // @ts-ignore - res = s.geometry.difference(c.geometry); - } - else { - // @ts-ignore - res = s.geometry.symDifference(c.geometry); - } - res = writer.write(res); - console.timeEnd('jsts'); - // console.log('JSTS result', res); - }, 500); - } - } - map.on('editable:created', function (evt) { - drawnItems.addLayer(evt.layer); - evt.layer.on('click', function (e) { - if ( - // @ts-ignore - (e.originalEvent.ctrlKey || e.originalEvent.metaKey) && - this.editEnabled()) { - // @ts-ignore - this.editor.newHole(e.latlng); - } - }); - }); - // @ts-ignore - var results = (globalThis.results = L.geoJson(null, { - style: function () { - return { - color: 'red', - weight: 1 - }; - } - }).addTo(map)); - loadData(path + file); - -}(L, jsts)); diff --git a/web/index.html b/web/index.html index bfec145..8129f38 100644 --- a/web/index.html +++ b/web/index.html @@ -8,6 +8,10 @@ rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.7.1/dist/leaflet.css" /> + diff --git a/web/index.ts b/web/index.ts index 0bd3010..9ce00f5 100644 --- a/web/index.ts +++ b/web/index.ts @@ -1,15 +1,13 @@ import L from 'leaflet'; import * as jsts from 'jsts'; import 'leaflet-editable'; -import { CoordinatesControl } from './js/coordinates'; -import { NewPolygonControl } from './js/polygoncontrol'; -import { BooleanControl } from './js/booleanopcontrol'; -import * as martinez from '../src/'; +import { CoordinatesControl, NewPolygonControl, BooleanControl } from './src'; import { FeatureCollection, GeometryObject } from 'geojson'; +import * as martinez from '../src/'; // import * as martinez from '../../dist/martinez.min'; let mode = globalThis.location.hash.substring(1); -let path = 'data/'; +let path = '/'; const ext = '.geojson'; let file; diff --git a/web/orthogonal.html b/web/orthogonal.html index 14206be..2efa371 100644 --- a/web/orthogonal.html +++ b/web/orthogonal.html @@ -1,15 +1,31 @@ - + - - + + Martinez Clipping - - - + + + + + + + + + + - + diff --git a/web/js/booleanopcontrol.js b/web/src/booleanopcontrol.ts similarity index 82% rename from web/js/booleanopcontrol.js rename to web/src/booleanopcontrol.ts index 18ef50b..4e3d28a 100644 --- a/web/js/booleanopcontrol.js +++ b/web/src/booleanopcontrol.ts @@ -7,7 +7,10 @@ export const BooleanControl = L.Control.extend({ }, onAdd: function () { - var container = (this._container = L.DomUtil.create('div', 'leaflet-bar')); + const container = (this._container = L.DomUtil.create( + 'div', + 'leaflet-bar' + )) as HTMLDivElement; this._container.style.background = '#ffffff'; this._container.style.padding = '10px'; container.innerHTML = ` @@ -22,16 +25,16 @@ export const BooleanControl = L.Control.extend({ `; - var form = container.querySelector('form'); + const form = container.querySelector('form') as HTMLFormElement; L.DomEvent.on( form, 'submit', - function (evt) { + (evt) => { L.DomEvent.stop(evt); - var radios = Array.prototype.slice.call( + const radios = Array.prototype.slice.call( form.querySelectorAll('input[type=radio]') ); - for (var i = 0, len = radios.length; i < len; i++) { + for (let i = 0, len = radios.length; i < len; i++) { if (radios[i].checked) { this.options.callback(parseInt(radios[i].value)); break; @@ -42,7 +45,7 @@ export const BooleanControl = L.Control.extend({ ).on( form.clear, 'click', - function (evt) { + (evt) => { L.DomEvent.stop(evt); this.options.clear(); }, diff --git a/web/js/coordinates.js b/web/src/coordinates.ts similarity index 100% rename from web/js/coordinates.js rename to web/src/coordinates.ts diff --git a/web/src/index.ts b/web/src/index.ts new file mode 100644 index 0000000..823d328 --- /dev/null +++ b/web/src/index.ts @@ -0,0 +1,3 @@ +export * from './booleanopcontrol'; +export * from './coordinates'; +export * from './polygoncontrol'; diff --git a/web/js/polygoncontrol.ts b/web/src/polygoncontrol.ts similarity index 100% rename from web/js/polygoncontrol.ts rename to web/src/polygoncontrol.ts diff --git a/web/styles.css b/web/styles.css index 8f01df1..b38c48a 100644 --- a/web/styles.css +++ b/web/styles.css @@ -1,4 +1,5 @@ -html, body, +html, +body, #image-map { width: 100%; height: 100%; @@ -9,11 +10,9 @@ html, body, #diff-map, #union-map, #intersection-map { - display: none; - width: 400px; - height: 400px; - margin-right: 10px; - float: left; + display: none; + width: 400px; + height: 400px; + margin-right: 10px; + float: left; } - -@import url("../../node_modules/leaflet-draw/dist/leaflet.draw.css") screen; diff --git a/web/vite.config.js b/web/vite.config.js new file mode 100644 index 0000000..d99b73c --- /dev/null +++ b/web/vite.config.js @@ -0,0 +1,24 @@ +// vite.config.js +import { resolve } from 'path'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + build: { + rollupOptions: { + input: { + main: resolve(__dirname, 'index.html') + }, + external: ['jsts', 'leaflet'], + output: { + inlineDynamicImports: true, + format: 'iife', + globals: { + leaflet: 'L' + } + } + }, + outDir: resolve(__dirname, '..', 'public'), + emptyOutDir: true + }, + publicDir: resolve(__dirname, 'data') +}); From 4e69237bacfa9f88d7055ccdfc59e4c428d6d2b2 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:12:38 +0200 Subject: [PATCH 25/38] gh actions syntax --- .github/workflows/nodejs.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 61a2b96..e0fb2d3 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -20,16 +20,17 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + - name: Build ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - run: npm ci - run: npm test - run: npm run build --if-present - run: npm run build:demo + - run: npm ci + - run: npm test + - run: npm run build --if-present + - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 with: folder: build - + - run: npm run build:demo From f3be9e9735be44af292fb51578b7e5898e643872 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:13:54 +0200 Subject: [PATCH 26/38] gh actions syntax --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index e0fb2d3..31a96c4 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -32,5 +32,5 @@ jobs: - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 with: - folder: build + folder: public - run: npm run build:demo From 921738f2ddb1532bd22e98752e9d43c008237fee Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:14:36 +0200 Subject: [PATCH 27/38] Separated jobs --- .github/workflows/nodejs.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 31a96c4..af28583 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -29,8 +29,9 @@ jobs: - run: npm test - run: npm run build --if-present - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4 - with: - folder: public - - run: npm run build:demo + deploy: + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: public + - run: npm run build:demo From abd691eff2cf826b36f8eb3cb85c54f0c8a36dd8 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:15:45 +0200 Subject: [PATCH 28/38] gh actions syntax --- .github/workflows/nodejs.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index af28583..b2d2d80 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -30,8 +30,9 @@ jobs: - run: npm run build --if-present deploy: - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4 - with: - folder: public - - run: npm run build:demo + steps: + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: public + - run: npm run build:demo From f683db06f04bb741d64a01fdbd4078222b8bfa7f Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:16:49 +0200 Subject: [PATCH 29/38] gh actions syntax --- .github/workflows/nodejs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index b2d2d80..69c30fe 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -30,6 +30,8 @@ jobs: - run: npm run build --if-present deploy: + runs-on: ubuntu-latest + steps: - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 From bdc267f955dfd8b15434e35b0fdd56f7b80be14d Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:19:34 +0200 Subject: [PATCH 30/38] gh actions syntax --- .github/workflows/nodejs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 69c30fe..2c686d2 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -30,6 +30,7 @@ jobs: - run: npm run build --if-present deploy: + if: success() runs-on: ubuntu-latest steps: From 2778097ebe20ba1bbbbe9050c6071ada56ec493c Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:24:03 +0200 Subject: [PATCH 31/38] gh actions syntax --- .github/workflows/nodejs.yml | 2 +- package.json | 6 +++--- src/types/robust-predicates/index.d.ts | 10 ---------- 3 files changed, 4 insertions(+), 14 deletions(-) delete mode 100644 src/types/robust-predicates/index.d.ts diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 2c686d2..b8169f3 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -34,8 +34,8 @@ jobs: runs-on: ubuntu-latest steps: + - run: npm run build:demo - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 with: folder: public - - run: npm run build:demo diff --git a/package.json b/package.json index b20da12..e729dda 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,8 @@ "name": "martinez-polygon-clipping", "version": "0.7.2", "description": "Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor", - "main": "dist/martinex.esm.js", - "module": "dist/martinez.esm.js", + "main": "dist/martinex.es.js", + "module": "dist/martinez.es.js", "types": "dist/types/index.d.ts", "browser": "dist/matinez.umd.js", "jsdelivr": "dist/martinex.umd.js", @@ -14,7 +14,7 @@ ], "scripts": { "start": "vite web", - "build": "tsc && vite build", + "build": "tsc && vite build && npm run types", "build:demo": "vite build web", "preview": "vite preview web", "test": "vitest run", diff --git a/src/types/robust-predicates/index.d.ts b/src/types/robust-predicates/index.d.ts deleted file mode 100644 index 1a056c8..0000000 --- a/src/types/robust-predicates/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -declare module 'robust-predicates/umd/orient2d' { - export default function orient2d( - x1: number, - y1: number, - x2: number, - y2: number, - x3: number, - y3: number - ): number; -} From 1f7055289414201fbf29d68c85fecebfb3ed2f2c Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:28:57 +0200 Subject: [PATCH 32/38] gh actions syntax --- .github/workflows/deploy.yml | 31 +++++++++++++++++++++++++++++++ .github/workflows/nodejs.yml | 11 ----------- 2 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..457caca --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,31 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Node.js CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + deploy: + if: success() + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Build ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run build:demo + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: public diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index b8169f3..2f3fea8 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -28,14 +28,3 @@ jobs: - run: npm ci - run: npm test - run: npm run build --if-present - - deploy: - if: success() - runs-on: ubuntu-latest - - steps: - - run: npm run build:demo - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4 - with: - folder: public From eb6f2ead8a1936ba207a300e94a7e7c8a226e109 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 21:31:07 +0200 Subject: [PATCH 33/38] Only deploy from master --- .github/workflows/deploy.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 457caca..bcf6852 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,8 +6,6 @@ name: Node.js CI on: push: branches: [master] - pull_request: - branches: [master] jobs: deploy: From bb381ca60678e38ee7e082ae55cbebf2a391a48b Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Sun, 24 Jul 2022 23:47:54 +0200 Subject: [PATCH 34/38] Replaced the boolean op control withj DAT.gui --- package-lock.json | 28 +++++++++++ package.json | 2 + src/index.ts | 2 +- web/index.ts | 92 +++++++++++++++++++++++++++---------- web/src/booleanopcontrol.ts | 60 ------------------------ web/src/index.ts | 1 - 6 files changed, 99 insertions(+), 86 deletions(-) delete mode 100644 web/src/booleanopcontrol.ts diff --git a/package-lock.json b/package-lock.json index 3fcda56..0103f5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ }, "devDependencies": { "@turf/union": "^4.6.0", + "@types/dat.gui": "^0.7.7", "@types/geojson": "^1.0.6", "@types/jsts": "^0.17.9", "@types/leaflet": "^1.7.8", @@ -22,6 +23,7 @@ "@types/node": "^17.0.8", "@vitest/ui": "^0.18.1", "benchmark": "^2.1.4", + "dat.gui": "^0.7.9", "eslint": "^8.20.0", "eslint-plugin-import-order": "^2.1.4", "eslint-plugin-jsdoc": "^39.3.3", @@ -123,6 +125,13 @@ "@types/chai": "*" } }, + "node_modules/@types/dat.gui": { + "version": "0.7.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/dat.gui/-/dat.gui-0.7.7.tgz", + "integrity": "sha512-CxLCme0He5Jk3uQwfO/fGZMyNhb/ypANzqX0yU9lviBQMlen5SOvQTBQ/Cd9x5mFlUAK5Tk8RgvTyLj1nYkz+w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/geojson": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", @@ -430,6 +439,13 @@ "node": ">= 8" } }, + "node_modules/dat.gui": { + "version": "0.7.9", + "resolved": "https://nexus3.linkurious.net/repository/npm/dat.gui/-/dat.gui-0.7.9.tgz", + "integrity": "sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3274,6 +3290,12 @@ "@types/chai": "*" } }, + "@types/dat.gui": { + "version": "0.7.7", + "resolved": "https://nexus3.linkurious.net/repository/npm/@types/dat.gui/-/dat.gui-0.7.7.tgz", + "integrity": "sha512-CxLCme0He5Jk3uQwfO/fGZMyNhb/ypANzqX0yU9lviBQMlen5SOvQTBQ/Cd9x5mFlUAK5Tk8RgvTyLj1nYkz+w==", + "dev": true + }, "@types/geojson": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", @@ -3521,6 +3543,12 @@ "which": "^2.0.1" } }, + "dat.gui": { + "version": "0.7.9", + "resolved": "https://nexus3.linkurious.net/repository/npm/dat.gui/-/dat.gui-0.7.9.tgz", + "integrity": "sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", diff --git a/package.json b/package.json index e729dda..3aa9ed2 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "license": "MIT", "devDependencies": { "@turf/union": "^4.6.0", + "@types/dat.gui": "^0.7.7", "@types/geojson": "^1.0.6", "@types/jsts": "^0.17.9", "@types/leaflet": "^1.7.8", @@ -52,6 +53,7 @@ "@types/node": "^17.0.8", "@vitest/ui": "^0.18.1", "benchmark": "^2.1.4", + "dat.gui": "^0.7.9", "eslint": "^8.20.0", "eslint-plugin-import-order": "^2.1.4", "eslint-plugin-jsdoc": "^39.3.3", diff --git a/src/index.ts b/src/index.ts index af53f38..096e9ae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,4 +14,4 @@ export const xor = (subject: MultiPolygon, clipping: MultiPolygon) => export const intersection = (subject: MultiPolygon, clipping: MultiPolygon) => boolean(subject, clipping, INTERSECTION); -export const operations = { UNION, DIFFERENCE, INTERSECTION, XOR }; +export const operations = { INTERSECTION, DIFFERENCE, UNION, XOR }; diff --git a/web/index.ts b/web/index.ts index 9ce00f5..f885d1c 100644 --- a/web/index.ts +++ b/web/index.ts @@ -1,10 +1,10 @@ import L from 'leaflet'; import * as jsts from 'jsts'; import 'leaflet-editable'; -import { CoordinatesControl, NewPolygonControl, BooleanControl } from './src'; +import { GUI } from 'dat.gui'; +import { CoordinatesControl, NewPolygonControl } from './src'; import { FeatureCollection, GeometryObject } from 'geojson'; import * as martinez from '../src/'; -// import * as martinez from '../../dist/martinez.min'; let mode = globalThis.location.hash.substring(1); let path = '/'; @@ -13,18 +13,36 @@ let file; let files = [ 'asia', - 'trapezoid-box', + //'asia_unionPoly', 'canada', - 'horseshoe', - 'hourglasses', - 'overlap_y', - 'polygon_trapezoid_edge_overlap', - 'touching_boxes', - 'two_pointed_triangles', + 'collapsed', + //'crash_overlap', + 'disjoint_boxes', 'hole_cut', + 'hole_hole', + 'horseshoe', + 'indonesia', + 'issue100', + 'issue102', + 'issue110', + 'issue90', + 'issue99', + 'one_inside', + 'overlap_loop_x10', + 'overlap_self_intersect', + 'overlap_two', 'overlapping_segments', - 'overlap_loop', - 'disjoint_boxes' + 'overlapping_segments_complex', + 'polygons_edge_overlap', + 'saw_rect', + 'self_intersecting', + 'shape_border', + 'states_source', + 'trapezoid-box', + 'two_pointed_triangles', + 'two_shapes', + 'two_triangles' + //'vertical_boxes' ]; switch (mode) { @@ -133,22 +151,48 @@ map.addControl( ); // @ts-ignore map.addControl(new CoordinatesControl()); -map.addControl( - new BooleanControl({ - // @ts-ignore - callback: run, - clear - }) -); + +// add GUI +const state = { + operations: { + INTERSECTION: () => run(OPERATIONS.INTERSECTION), + UNION: () => run(OPERATIONS.UNION), + 'A - B': () => run(OPERATIONS.DIFFERENCE), + 'B - A': () => run(5), + XOR: () => run(OPERATIONS.XOR) + }, + files: files[0], + clear +}; +const gui = new GUI({ name: 'martinez' }); +const operationsFolder = gui.addFolder('Operation'); +operationsFolder.open(); +Object.keys(state.operations).forEach((operation) => { + operationsFolder + .add(state.operations, operation) + .onChange((e) => run(e)) + .name(operation); +}); +gui + .add(state, 'files', files) + .name('Source') + .onChange((e) => { + clear(); + loadData(path + e + '.geojson'); + }); +gui.add(state, 'clear').name('Clear'); // @ts-ignore -var drawnItems = (globalThis.drawnItems = L.geoJSON().addTo(map)); -var rawData: GeometryObject | FeatureCollection | null = null; -function loadData(path) { - console.log(path); +const drawnItems = (globalThis.drawnItems = L.geoJSON().addTo(map)); +let rawData: GeometryObject | FeatureCollection | null = null; + +function loadData(path: string) { + console.log('request', path); fetch(path) .then((r) => r.json()) + .catch((e) => console.log({ e })) .then((json) => { + console.log(json); drawnItems.addData(json); rawData = json; map.fitBounds(drawnItems.getBounds().pad(0.05), { animate: false }); @@ -177,8 +221,8 @@ function run(op: valueOf) { var layers = drawnItems.getLayers(); if (layers.length < 2) return; // @ts-ignore - var subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); - var clipping = getClippingPoly(layers); + let subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON(); + let clipping = getClippingPoly(layers); //console.log('input', subject, clipping, op); diff --git a/web/src/booleanopcontrol.ts b/web/src/booleanopcontrol.ts deleted file mode 100644 index 4e3d28a..0000000 --- a/web/src/booleanopcontrol.ts +++ /dev/null @@ -1,60 +0,0 @@ -import L from 'leaflet'; - -export const BooleanControl = L.Control.extend({ - options: { - position: 'topright', - callback: () => undefined - }, - - onAdd: function () { - const container = (this._container = L.DomUtil.create( - 'div', - 'leaflet-bar' - )) as HTMLDivElement; - this._container.style.background = '#ffffff'; - this._container.style.padding = '10px'; - container.innerHTML = ` -
-
    -
  • -
  • -
  • -
  • -
  • -
- - -
`; - const form = container.querySelector('form') as HTMLFormElement; - L.DomEvent.on( - form, - 'submit', - (evt) => { - L.DomEvent.stop(evt); - const radios = Array.prototype.slice.call( - form.querySelectorAll('input[type=radio]') - ); - for (let i = 0, len = radios.length; i < len; i++) { - if (radios[i].checked) { - this.options.callback(parseInt(radios[i].value)); - break; - } - } - }, - this - ).on( - form.clear, - 'click', - (evt) => { - L.DomEvent.stop(evt); - this.options.clear(); - }, - this - ); - - L.DomEvent.disableClickPropagation( - this._container - ).disableScrollPropagation(this._container); - return this._container; - } -}); diff --git a/web/src/index.ts b/web/src/index.ts index 823d328..1ae09bc 100644 --- a/web/src/index.ts +++ b/web/src/index.ts @@ -1,3 +1,2 @@ -export * from './booleanopcontrol'; export * from './coordinates'; export * from './polygoncontrol'; From 2596716fee847731b28c3ec48a8e5ce8901fcc51 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 25 Jul 2022 20:13:40 +0200 Subject: [PATCH 35/38] Proper npm links --- package-lock.json | 437 ---------------------------------------------- 1 file changed, 437 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0103f5e..90779f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -607,38 +607,6 @@ "esbuild-windows-arm64": "0.14.49" } }, - "node_modules/esbuild-android-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", - "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", - "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/esbuild-darwin-64": { "version": "0.14.49", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", @@ -655,278 +623,6 @@ "node": ">=12" } }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", - "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", - "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", - "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", - "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", - "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", - "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", - "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", - "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", - "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", - "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", - "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", - "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", - "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", - "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", - "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", - "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", - "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3671,20 +3367,6 @@ "esbuild-windows-arm64": "0.14.49" } }, - "esbuild-android-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", - "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", - "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", - "dev": true, - "optional": true - }, "esbuild-darwin-64": { "version": "0.14.49", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", @@ -3692,125 +3374,6 @@ "dev": true, "optional": true }, - "esbuild-darwin-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", - "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", - "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", - "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", - "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", - "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", - "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", - "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", - "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", - "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", - "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", - "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", - "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", - "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", - "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", - "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", - "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", - "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", - "dev": true, - "optional": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", From d3213dcd202d60e1ca348ee2fffe84a080d39268 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 25 Jul 2022 20:22:21 +0200 Subject: [PATCH 36/38] Cleanup --- Makefile | 21 --------------------- bench.js | 34 +++++++++++++++++++++------------- index.d.ts | 9 --------- test/types.ts | 45 --------------------------------------------- 4 files changed, 21 insertions(+), 88 deletions(-) delete mode 100644 Makefile delete mode 100644 index.d.ts delete mode 100644 test/types.ts diff --git a/Makefile b/Makefile deleted file mode 100644 index 67b8b6d..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -SOURCES = dist/martinez.js -COMPILED = dist/martinez.min.js -QS = compilation_level=ADVANCED_OPTIMIZATIONS&output_format=text -URL = http://closure-compiler.appspot.com/compile - -all: clean sources compile - -clean: - @rm -rf dist/* - -dist/martinez.js: - @npm run build - -sources: ${SOURCES} - -compile: ${COMPILED} - -%.min.js: %.js - @echo " - $(<) -> $(@)"; - @curl --silent --show-error --data-urlencode "js_code@$(<)" --data-urlencode "js_externs@src/externs.js" \ - --data "${QS}&output_info=warnings" ${URL} -o $(@) diff --git a/bench.js b/bench.js index ca906ae..340e3a2 100644 --- a/bench.js +++ b/bench.js @@ -1,8 +1,8 @@ -import load from 'load-json-file'; +/* eslint-disable no-console */ +import load from 'load-json-file'; import Benchmark from 'benchmark'; import jstsUnion from '@turf/union'; -import martinez from './dist/martinez.umd'; - +import * as martinez from './dist/martinez.es.js'; /** * Benmark Results @@ -12,25 +12,31 @@ import martinez from './dist/martinez.umd'; * Asia x 6.32 ops/sec ±3.16% (20 runs sampled) * Asia - JSTS x 6.62 ops/sec ±2.74% (21 runs sampled) */ - const options = { - onStart (event) { console.log(this.name); }, - onError (event) { console.log(event.target.error); }, - onCycle (event) { console.log(String(event.target)); }, + onStart() { + console.log(this.name); + }, + onError(event) { + console.log(event.target.error); + }, + onCycle(event) { + console.log(String(event.target)); + }, onComplete() { console.log('- Fastest is ' + this.filter('fastest').map('name') + '\n'); } }; -const hole_hole = load.sync('./test/fixtures/hole_hole.geojson'); +const holeHole = load.sync('./test/fixtures/hole_hole.geojson'); new Benchmark.Suite('Hole_Hole', options) .add('Martinez', () => { martinez.union( - hole_hole.features[0].geometry.coordinates, - hole_hole.features[1].geometry.coordinates); + holeHole.features[0].geometry.coordinates, + holeHole.features[1].geometry.coordinates + ); }) .add('JSTS', () => { - jstsUnion(hole_hole.features[0], hole_hole.features[1]); + jstsUnion(holeHole.features[0], holeHole.features[1]); }) .run(); @@ -40,7 +46,8 @@ new Benchmark.Suite('Asia union', options) .add('Martinez', () => { martinez.union( asia.features[0].geometry.coordinates, - unionPoly.geometry.coordinates); + unionPoly.geometry.coordinates + ); }) .add('JSTS', () => jstsUnion(asia.features[0], unionPoly)) .run(); @@ -50,7 +57,8 @@ new Benchmark.Suite('States clip', options) .add('Martinez', () => { martinez.union( states.features[0].geometry.coordinates, - states.features[1].geometry.coordinates); + states.features[1].geometry.coordinates + ); }) .add('JSTS', () => { jstsUnion(states.features[0], states.features[1]); diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 4e9ae8f..0000000 --- a/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -type Position = number[] -type Polygon = Position[][] -type MultiPolygon = Position[][][] -type Geometry = Polygon | MultiPolygon - -export function union(subject: Geometry, clipping: Geometry): Geometry; -export function diff(subject: Geometry, clipping: Geometry): Geometry; -export function xor(subject: Geometry, clipping: Geometry): Geometry; -export function intersection(subject: Geometry, clipping: Geometry): Geometry; diff --git a/test/types.ts b/test/types.ts deleted file mode 100644 index bf658aa..0000000 --- a/test/types.ts +++ /dev/null @@ -1,45 +0,0 @@ -import * as martinez from '../' - -// Fixtures -const poly1 = { - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [[[22, 24], [38, 24], [38, 37], [22, 37], [22, 24]]] - } -} -const poly2 = { - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [[[32, 34], [48, 34], [48, 47], [32, 47], [32, 34]]] - } -} -const multiPoly = { - "type": "Feature", - "properties": {}, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [[[22, 24], [38, 24], [38, 37], [22, 37], [22, 24]]], - [[[32, 34], [48, 34], [48, 47], [32, 47], [32, 34]]] - ] - } -} -const poly1Coords = poly1.geometry.coordinates -const poly2Coords = poly2.geometry.coordinates -const multiPolyCoords = multiPoly.geometry.coordinates - -// (Polygon, Polygon) -martinez.xor(poly1Coords, poly2Coords) -martinez.diff(poly1Coords, poly2Coords) -martinez.union(poly1Coords, poly2Coords) -martinez.intersection(poly1Coords, poly2Coords) - -// (Poly, MultiPoly) -martinez.xor(poly1Coords, multiPolyCoords) -martinez.diff(poly1Coords, multiPolyCoords) -martinez.union(poly1Coords, multiPolyCoords) -martinez.intersection(poly1Coords, multiPolyCoords) From fd23bf63e22d2a3841f743f594bc02fb4a1b9766 Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 25 Jul 2022 20:29:46 +0200 Subject: [PATCH 37/38] Cleanup deprecated --- .eslintrc | 2 +- package-lock.json | 511 ++++++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 3 files changed, 456 insertions(+), 59 deletions(-) diff --git a/.eslintrc b/.eslintrc index e0fe57c..389be42 100644 --- a/.eslintrc +++ b/.eslintrc @@ -21,7 +21,7 @@ "Worker": true, "URL": true }, - "plugins": ["promise", "import-order", "jsdoc"], + "plugins": ["promise", "jsdoc"], "rules": { "indent": 0, // "prefer-const": "error", diff --git a/package-lock.json b/package-lock.json index 90779f3..d229801 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "benchmark": "^2.1.4", "dat.gui": "^0.7.9", "eslint": "^8.20.0", - "eslint-plugin-import-order": "^2.1.4", + "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsdoc": "^39.3.3", "eslint-plugin-promise": "^3.8.0", "geojson-project": "^1.0.0", @@ -138,6 +138,12 @@ "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", "dev": true }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/jsts": { "version": "0.17.12", "resolved": "https://registry.npmjs.org/@types/jsts/-/jsts-0.17.12.tgz", @@ -253,6 +259,43 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -309,15 +352,6 @@ "concat-map": "0.0.1" } }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -555,6 +589,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -687,24 +730,101 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-import-order": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-order/-/eslint-plugin-import-order-2.1.4.tgz", - "integrity": "sha512-cHThJ45zFx5UtRZ+Jd6XO89bLriKkdckAHZoSxknlK3BELmAO6Gqe74A7j8rvL+1PEyNJF3Fsil/Rjwx8cqOow==", - "deprecated": "Use eslint-plugin-import instead (order rule)", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "builtin-modules": "^1.1.1", - "lodash.cond": "^4.2.0", - "lodash.find": "^4.2.0" + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" }, "peerDependencies": { - "eslint": ">=2" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/eslint-plugin-jsdoc": { "version": "39.3.3", "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.3.tgz", @@ -876,6 +996,18 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1527,6 +1659,18 @@ "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", "dev": true }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/jsts": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsts/-/jsts-1.3.0.tgz", @@ -1588,24 +1732,25 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", - "dev": true - }, - "node_modules/lodash.find": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -1952,6 +2097,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1987,6 +2149,39 @@ "node": ">= 0.8.0" } }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2011,6 +2206,15 @@ "node": ">=0.10.0" } }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2650,6 +2854,18 @@ "node": ">=6" } }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2998,6 +3214,12 @@ "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "@types/jsts": { "version": "0.17.12", "resolved": "https://registry.npmjs.org/@types/jsts/-/jsts-0.17.12.tgz", @@ -3092,6 +3314,31 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -3142,12 +3389,6 @@ "concat-map": "0.0.1" } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -3328,6 +3569,15 @@ "unbox-primitive": "^1.0.2" } }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3423,15 +3673,93 @@ "v8-compile-cache": "^2.0.3" } }, - "eslint-plugin-import-order": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-order/-/eslint-plugin-import-order-2.1.4.tgz", - "integrity": "sha512-cHThJ45zFx5UtRZ+Jd6XO89bLriKkdckAHZoSxknlK3BELmAO6Gqe74A7j8rvL+1PEyNJF3Fsil/Rjwx8cqOow==", + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, "requires": { - "builtin-modules": "^1.1.1", - "lodash.cond": "^4.2.0", - "lodash.find": "^4.2.0" + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } } }, "eslint-plugin-jsdoc": { @@ -3562,6 +3890,15 @@ "flat-cache": "^3.0.4" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -4024,6 +4361,15 @@ "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", "dev": true }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "jsts": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsts/-/jsts-1.3.0.tgz", @@ -4070,24 +4416,22 @@ "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", "dev": true }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", - "dev": true - }, - "lodash.find": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4355,6 +4699,17 @@ "object-keys": "^1.1.1" } }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4384,6 +4739,30 @@ "word-wrap": "^1.2.3" } }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4402,6 +4781,12 @@ "error-ex": "^1.2.0" } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -4875,6 +5260,18 @@ "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", "dev": true }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 3aa9ed2..400d389 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "benchmark": "^2.1.4", "dat.gui": "^0.7.9", "eslint": "^8.20.0", - "eslint-plugin-import-order": "^2.1.4", + "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsdoc": "^39.3.3", "eslint-plugin-promise": "^3.8.0", "geojson-project": "^1.0.0", From 47ac0ac143a241e419fc9e3f803f6cde55cbf41f Mon Sep 17 00:00:00 2001 From: Alexander Milevski Date: Mon, 25 Jul 2022 21:48:16 +0200 Subject: [PATCH 38/38] Added more perf tests --- bench.js | 21 ++++++++++- package-lock.json | 45 ++++++++++++++++++++---- package.json | 1 + src/externs.js | 78 ----------------------------------------- test/sweep_line.test.ts | 4 +-- vite.config.js | 13 +++---- web/index.ts | 22 ++++++++---- web/styles.css | 4 +++ 8 files changed, 87 insertions(+), 101 deletions(-) delete mode 100644 src/externs.js diff --git a/bench.js b/bench.js index 340e3a2..582e177 100644 --- a/bench.js +++ b/bench.js @@ -2,7 +2,8 @@ import load from 'load-json-file'; import Benchmark from 'benchmark'; import jstsUnion from '@turf/union'; -import * as martinez from './dist/martinez.es.js'; +import mfogel from 'polygon-clipping'; +import * as martinez from './dist/martinez.esm.js'; /** * Benmark Results @@ -38,6 +39,12 @@ new Benchmark.Suite('Hole_Hole', options) .add('JSTS', () => { jstsUnion(holeHole.features[0], holeHole.features[1]); }) + .add('mfogel', () => { + mfogel.union( + holeHole.features[0].geometry.coordinates, + holeHole.features[1].geometry.coordinates + ); + }) .run(); const asia = load.sync('./test/fixtures/asia.geojson'); @@ -50,6 +57,12 @@ new Benchmark.Suite('Asia union', options) ); }) .add('JSTS', () => jstsUnion(asia.features[0], unionPoly)) + .add('mfogel', () => + mfogel.union( + asia.features[0].geometry.coordinates, + unionPoly.geometry.coordinates + ) + ) .run(); const states = load.sync('./test/fixtures/states_source.geojson'); @@ -63,4 +76,10 @@ new Benchmark.Suite('States clip', options) .add('JSTS', () => { jstsUnion(states.features[0], states.features[1]); }) + .add('mfogel', () => { + mfogel.union( + states.features[0].geometry.coordinates, + states.features[1].geometry.coordinates + ); + }) .run(); diff --git a/package-lock.json b/package-lock.json index d229801..2996686 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", "npm-run-all": "^4.1.5", + "polygon-clipping": "^0.15.3", "reify": "^0.20.12", "typescript": "^4.6.4", "vite": "^3.0.0", @@ -102,9 +103,9 @@ "dev": true }, "node_modules/@turf/union": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-4.7.3.tgz", - "integrity": "sha512-6mF3CJKJXGEUa9lNNM3yWc1dqEjEsoB92UoJPa0yr8zQOhgd4va1MoLh9QXHnWsGlevRa74Ob1e12mZxffcfdA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-4.6.0.tgz", + "integrity": "sha512-LtSZzItfpfa1aodnzEfIG5D+d8dVUXu1exclBX+l8XOnmN3h+8McKPUueNLmxQJ1pkEM4ipPkAxPpAf/5+1O7Q==", "dev": true, "dependencies": { "jsts": "1.3.0" @@ -2302,6 +2303,21 @@ "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true }, + "node_modules/polygon-clipping": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", + "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", + "dev": true, + "dependencies": { + "splaytree": "^3.1.0" + } + }, + "node_modules/polygon-clipping/node_modules/splaytree": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.1.tgz", + "integrity": "sha512-9FaQ18FF0+sZc/ieEeXHt+Jw2eSpUgUtTLDYB/HXKWvhYVyOc7h1hzkn5MMO3GPib9MmXG1go8+OsBBzs/NMww==", + "dev": true + }, "node_modules/portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -3179,9 +3195,9 @@ "dev": true }, "@turf/union": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-4.7.3.tgz", - "integrity": "sha512-6mF3CJKJXGEUa9lNNM3yWc1dqEjEsoB92UoJPa0yr8zQOhgd4va1MoLh9QXHnWsGlevRa74Ob1e12mZxffcfdA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-4.6.0.tgz", + "integrity": "sha512-LtSZzItfpfa1aodnzEfIG5D+d8dVUXu1exclBX+l8XOnmN3h+8McKPUueNLmxQJ1pkEM4ipPkAxPpAf/5+1O7Q==", "dev": true, "requires": { "jsts": "1.3.0" @@ -4852,6 +4868,23 @@ "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true }, + "polygon-clipping": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", + "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", + "dev": true, + "requires": { + "splaytree": "^3.1.0" + }, + "dependencies": { + "splaytree": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.1.tgz", + "integrity": "sha512-9FaQ18FF0+sZc/ieEeXHt+Jw2eSpUgUtTLDYB/HXKWvhYVyOc7h1hzkn5MMO3GPib9MmXG1go8+OsBBzs/NMww==", + "dev": true + } + } + }, "portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", diff --git a/package.json b/package.json index 400d389..6072d45 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "leaflet-editable": "^1.2.0", "load-json-file": "^2.0.0", "npm-run-all": "^4.1.5", + "polygon-clipping": "^0.15.3", "reify": "^0.20.12", "typescript": "^4.6.4", "vite": "^3.0.0", diff --git a/src/externs.js b/src/externs.js deleted file mode 100644 index 4695558..0000000 --- a/src/externs.js +++ /dev/null @@ -1,78 +0,0 @@ -/* eslint-disable */ -/** - * Externs file for google closure compiler - */ -// this makes GCC play with browserify - -/* eslint-disable no-unused-vars */ - -/** - * @param {*=}o - * @param {*=}u - */ -window.require = function (o, u) {}; - -/** - * @type {Object} - */ -window.module = { - exports: {} -}; - -/** - * @api - * @static - * @param {Array>>} polygonA - * @param {Array>>} polygonB - * @return {Array>>|Null} - */ -window.martinez = function (polygonA, polygonB, operation) {}; - - -/** - * @enum {Number} - */ -window.martinez.operations = { - INTERSECTION: 0, - DIFFERENCE: 1, - UNION: 2, - XOR: 3 -}; - -/** - * @api - * @static - * @param {Array>>} polygonA - * @param {Array>>} polygonB - * @return {Array>>|Null} - */ -window.martinez.intersection = function (polygonA, polygonB) {}; - -/** - * @api - * @static - * @param {Array>>} polygonA - * @param {Array>>} polygonB - * @return {Array>>|Null} - */ -window.martinez.diff = function (polygonA, polygonB) {}; - -/** - * @api - * @static - * @param {Array>>} polygonA - * @param {Array>>} polygonB - * @return {Array>>|Null} - */ -window.martinez.union = function (polygonA, polygonB) {}; - -/** - * @api - * @static - * @param {Array>>} polygonA - * @param {Array>>} polygonB - * @return {Array>>|Null} - */ -window.martinez.intersection = function (polygonA, polygonB) {}; - -/* eslint-enable */ diff --git a/test/sweep_line.test.ts b/test/sweep_line.test.ts index cdb2529..dc2f149 100644 --- a/test/sweep_line.test.ts +++ b/test/sweep_line.test.ts @@ -44,11 +44,11 @@ test('sweep line', () => { let iter = tree.find(EF); - assert.equal(tree.next(iter).key, EG); + assert.equal(tree.next(iter)!.key, EG); iter = tree.find(EG); - assert.equal(tree.prev(iter).key, EF); + assert.equal(tree.prev(iter)!.key, EF); const DA = new SweepEvent( c[0][0], diff --git a/vite.config.js b/vite.config.js index 1adb32c..12b70fd 100644 --- a/vite.config.js +++ b/vite.config.js @@ -7,17 +7,14 @@ export default defineConfig({ lib: { entry: resolve(__dirname, 'src/index.ts'), name: 'martinez', - fileName: (format) => `martinez.${format}.js` + fileName: (format) => `martinez.${format}.js`, + formats: ['umd', 'cjs', 'esm'] }, - rollupOptions: { - input: { - main: resolve(__dirname, 'web/index.html'), - orthogonal: resolve(__dirname, 'web/orthogonal.html') - } - } + target: 'es2015' }, test: { dir: resolve(__dirname, 'test'), include: ['**/*.test.ts'] - } + }, + mode: 'development' }); diff --git a/web/index.ts b/web/index.ts index f885d1c..81498b4 100644 --- a/web/index.ts +++ b/web/index.ts @@ -5,6 +5,7 @@ import { GUI } from 'dat.gui'; import { CoordinatesControl, NewPolygonControl } from './src'; import { FeatureCollection, GeometryObject } from 'geojson'; import * as martinez from '../src/'; +import mfogel from 'polygon-clipping'; let mode = globalThis.location.hash.substring(1); let path = '/'; @@ -168,10 +169,7 @@ const gui = new GUI({ name: 'martinez' }); const operationsFolder = gui.addFolder('Operation'); operationsFolder.open(); Object.keys(state.operations).forEach((operation) => { - operationsFolder - .add(state.operations, operation) - .onChange((e) => run(e)) - .name(operation); + operationsFolder.add(state.operations, operation).name(operation); }); gui .add(state, 'files', files) @@ -218,6 +216,7 @@ function getClippingPoly(layers) { type valueOf = T[keyof T]; function run(op: valueOf) { + console.trace('run run'); var layers = drawnItems.getLayers(); if (layers.length < 2) return; // @ts-ignore @@ -267,7 +266,7 @@ function run(op: valueOf) { } }); - setTimeout(function () { + setTimeout(() => { console.time('jsts'); var s = reader.read(subject); var c = reader.read(clipping); @@ -289,6 +288,16 @@ function run(op: valueOf) { console.timeEnd('jsts'); // console.log('JSTS result', res); }, 500); + + setTimeout(() => { + console.time('mfogel'); + var result = mfogel.union( + subject.geometry.coordinates, + clipping.geometry.coordinates + ); + console.timeEnd('mfogel'); + // console.log('martinez result', result); + }); } } @@ -316,4 +325,5 @@ var results = (globalThis.results = L.geoJson(null, { } }).addTo(map)); -loadData(path + file); +// @ts-ignore +loadData(path + gui.__controllers[0].object.files + '.geojson'); diff --git a/web/styles.css b/web/styles.css index b38c48a..cf7f3f7 100644 --- a/web/styles.css +++ b/web/styles.css @@ -16,3 +16,7 @@ body, margin-right: 10px; float: left; } + +.dg.ac { + z-index: 900 !important; +}