diff --git a/.eslintrc b/.eslintrc
index 355a3d0..389be42 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", "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/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..bcf6852
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,29 @@
+# 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]
+
+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 e772a1c..2f3fea8 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -5,25 +5,26 @@ 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
+ - 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
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/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..582e177 100644
--- a/bench.js
+++ b/bench.js
@@ -1,8 +1,9 @@
-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 mfogel from 'polygon-clipping';
+import * as martinez from './dist/martinez.esm.js';
/**
* Benmark Results
@@ -12,25 +13,37 @@ 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]);
+ })
+ .add('mfogel', () => {
+ mfogel.union(
+ holeHole.features[0].geometry.coordinates,
+ holeHole.features[1].geometry.coordinates
+ );
})
.run();
@@ -40,9 +53,16 @@ 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))
+ .add('mfogel', () =>
+ mfogel.union(
+ asia.features[0].geometry.coordinates,
+ unionPoly.geometry.coordinates
+ )
+ )
.run();
const states = load.sync('./test/fixtures/states_source.geojson');
@@ -50,9 +70,16 @@ 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]);
})
+ .add('mfogel', () => {
+ mfogel.union(
+ states.features[0].geometry.coordinates,
+ states.features[1].geometry.coordinates
+ );
+ })
.run();
diff --git a/demo/css/styles.css b/demo/css/styles.css
deleted file mode 100644
index 8f01df1..0000000
--- a/demo/css/styles.css
+++ /dev/null
@@ -1,19 +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;
-}
-
-@import url("../../node_modules/leaflet-draw/dist/leaflet.draw.css") screen;
diff --git a/demo/index.html b/demo/index.html
deleted file mode 100644
index 310208b..0000000
--- a/demo/index.html
+++ /dev/null
@@ -1,23 +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/index.js b/demo/js/index.js
deleted file mode 100644
index 4af1f22..0000000
--- a/demo/js/index.js
+++ /dev/null
@@ -1,240 +0,0 @@
-import './coordinates';
-import './polygoncontrol';
-import './booleanopcontrol';
-import * as martinez from '../../index';
-// 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(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);
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 14206be..0000000
--- a/demo/orthogonal.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
- Martinez Clipping
-
-
-
-
-
-
-
-
-
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/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 af978f5..2996686 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,131 +1,203 @@
{
"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/dat.gui": "^0.7.7",
+ "@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",
+ "dat.gui": "^0.7.9",
+ "eslint": "^8.20.0",
+ "eslint-plugin-import": "^2.26.0",
+ "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.1.0",
+ "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",
- "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"
- }
- },
- "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==",
+ "typescript": "^4.6.4",
+ "vite": "^3.0.0",
+ "vitest": "^0.18.1"
+ }
+ },
+ "node_modules/@es-joy/jsdoccomment": {
+ "version": "0.31.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz",
+ "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.16.7"
+ "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.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==",
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.3.0",
+ "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",
+ "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.16.10",
- "resolved": "https://nexus3.linkurious.net/repository/npm/@babel/highlight/-/highlight-7.16.10.tgz",
- "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "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://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@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
+ },
"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=",
+ "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,
- "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",
+ "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,
+ "dependencies": {
+ "@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://nexus3.linkurious.net/repository/npm/@types/geojson/-/geojson-1.0.6.tgz",
+ "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/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",
+ "integrity": "sha512-CVRlGD914G8Lce/r6PBDCNX5KSfdI5ZXCJ4cefy09/5gZBMEy3rcv5prjJuSHusfDaKMnqWc9Asz4I08q/YrAQ==",
"dev": true,
- "license": "MIT"
+ "dependencies": {
+ "@types/openlayers": "*"
+ }
},
- "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==",
+ "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/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/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,
+ "dependencies": {
+ "@types/leaflet": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "17.0.45",
+ "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",
+ "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": {
- "@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": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
"dev": true,
- "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -133,32 +205,20 @@
"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",
+ "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",
@@ -170,76 +230,80 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "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==",
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "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 OR CC0-1.0)",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "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": {
- "node": ">=6"
- }
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
},
- "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==",
+ "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,
- "license": "MIT",
"dependencies": {
- "color-convert": "^1.9.0"
+ "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": ">=4"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "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==",
+ "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,
- "license": "MIT",
"dependencies": {
- "sprintf-js": "~1.0.2"
+ "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/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==",
+ "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": ">=4"
+ "node": "*"
}
},
"node_modules/async": {
@@ -253,27 +317,27 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"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=",
+ "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": {
"version": "2.1.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/benchmark/-/benchmark-2.1.4.tgz",
- "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=",
+ "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"
@@ -281,58 +345,19 @@
},
"node_modules/brace-expansion": {
"version": "1.1.11",
- "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "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"
}
},
- "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": {
- "node": ">=0.10.0"
- }
- },
"node_modules/call-bind": {
"version": "1.0.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/call-bind/-/call-bind-1.0.2.tgz",
+ "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"
@@ -343,153 +368,124 @@
},
"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/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==",
+ "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": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "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/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/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==",
+ "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": {
- "restore-cursor": "^3.1.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "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==",
+ "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": "ISC",
"engines": {
- "node": ">= 10"
+ "node": "*"
}
},
"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==",
+ "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",
- "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": {
- "node": ">=0.1.90"
- }
+ "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": "0.7.6",
- "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-0.7.6.tgz",
- "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/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": {
"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"
+ "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://nexus3.linkurious.net/repository/npm/corser/-/corser-2.0.1.tgz",
- "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "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": ">= 8"
}
},
- "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==",
+ "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": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
+ "license": "Apache-2.0"
},
"node_modules/debug": {
"version": "4.3.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/debug/-/debug-4.3.4.tgz",
+ "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"
},
@@ -502,57 +498,45 @@
}
}
},
- "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",
+ "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": {
- "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",
+ "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.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",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"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",
+ "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"
},
@@ -560,87 +544,44 @@
"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==",
+ "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": {
- "minimatch": "^3.0.4"
- },
- "bin": {
- "ignored": "bin/ignored"
+ "is-arrayish": "^0.2.1"
}
},
- "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.",
+ "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": {
- "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",
- "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": {
- "is-arrayish": "^0.2.1"
- }
- },
- "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==",
- "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"
@@ -649,12 +590,20 @@
"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://nexus3.linkurious.net/repository/npm/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "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",
@@ -667,58 +616,108 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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,
+ "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",
+ "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,
+ "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=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
- "license": "MIT",
"engines": {
- "node": ">=0.8.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint": {
- "version": "6.8.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "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": {
- "@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"
},
@@ -726,149 +725,205 @@
"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"
}
},
- "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)",
+ "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": {
+ "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,
- "license": "MIT",
"dependencies": {
- "builtin-modules": "^1.1.1",
- "lodash.cond": "^4.2.0",
- "lodash.find": "^4.2.0"
+ "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": "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==",
+ "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": "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-promise": {
"version": "3.8.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz",
"integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==",
"dev": true,
- "license": "ISC",
"engines": {
"node": ">=4"
}
},
"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==",
+ "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": "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "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": "MIT",
"dependencies": {
- "eslint-visitor-keys": "^1.1.0"
+ "eslint-visitor-keys": "^2.0.0"
},
"engines": {
- "node": ">=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": {
- "node": ">=4"
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
}
},
- "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==",
+ "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,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- },
"engines": {
- "node": ">=6.0.0"
+ "node": ">=10"
}
},
- "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==",
+ "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,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
"engines": {
- "node": ">=0.4.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.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==",
+ "node_modules/espree": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
+ "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
"dev": true,
- "license": "BSD-2-Clause",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
+ "dependencies": {
+ "acorn": "^8.7.1",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
- "node": ">=4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/esquery": {
"version": "1.4.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/esquery/-/esquery-1.4.0.tgz",
+ "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"
},
@@ -876,22 +931,11 @@
"node": ">=0.10"
}
},
- "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": {
- "node": ">=4.0"
- }
- },
"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"
},
@@ -899,148 +943,95 @@
"node": ">=4.0"
}
},
- "node_modules/esrecurse/node_modules/estraverse": {
+ "node_modules/estraverse": {
"version": "5.3.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/estraverse/-/estraverse-5.3.0.tgz",
+ "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"
}
},
- "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",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "resolved": "https://registry.npmjs.org/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": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- },
- "engines": {
- "node": ">=4"
- }
+ "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",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
},
- "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==",
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "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": {
- "escape-string-regexp": "^1.0.5"
+ "flat-cache": "^3.0.4"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "^10.12.0 || >=12.0.0"
}
},
- "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==",
+ "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,
- "license": "MIT",
"dependencies": {
- "flat-cache": "^2.0.1"
+ "locate-path": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"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==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-2.0.2.tgz",
- "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
- "dev": true,
- "license": "ISC"
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
+ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
+ "dev": true
},
"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",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
+ "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
"dev": true,
"funding": [
{
@@ -1048,7 +1039,6 @@
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
- "license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -1058,54 +1048,89 @@
}
}
},
- "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=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/function-bind/-/function-bind-1.1.1.tgz",
+ "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",
+ "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=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/geojson-project/-/geojson-project-1.0.1.tgz",
- "integrity": "sha1-qpNGWGVYo2XETWaY/80L/FffRAY=",
+ "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.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "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",
- "has-symbols": "^1.0.1"
+ "has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1113,10 +1138,9 @@
},
"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",
+ "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"
@@ -1129,16 +1153,15 @@
}
},
"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",
+ "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",
"inherits": "2",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
@@ -1150,26 +1173,24 @@
}
},
"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==",
+ "version": "6.0.2",
+ "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.1"
+ "is-glob": "^4.0.3"
},
"engines": {
- "node": ">= 6"
+ "node": ">=10.13.0"
}
},
"node_modules/globals": {
- "version": "12.4.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "version": "13.16.0",
+ "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.8.1"
+ "type-fest": "^0.20.2"
},
"engines": {
"node": ">=8"
@@ -1179,18 +1200,16 @@
}
},
"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==",
- "dev": true,
- "license": "ISC"
+ "version": "4.2.10",
+ "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://nexus3.linkurious.net/repository/npm/has/-/has-1.0.3.tgz",
+ "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,55 +1217,41 @@
"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=",
+ "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",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "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=",
+ "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": ">=0.10.0"
+ "node": ">=8"
}
},
- "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==",
+ "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"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "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-symbols": {
"version": "1.0.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.3.tgz",
+ "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"
},
@@ -1256,10 +1261,9 @@
},
"node_modules/has-tostringtag": {
"version": "1.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "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"
},
@@ -1272,27 +1276,36 @@
},
"node_modules/he": {
"version": "1.2.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/he/-/he-1.2.0.tgz",
+ "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"
}
},
"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",
+ "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",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
"dev": true,
- "license": "ISC"
+ "dependencies": {
+ "whatwg-encoding": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/http-proxy": {
"version": "1.18.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/http-proxy/-/http-proxy-1.18.1.tgz",
+ "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",
@@ -1303,60 +1316,58 @@
}
},
"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==",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "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": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"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==",
+ "version": "5.2.0",
+ "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"
@@ -1370,20 +1381,18 @@
},
"node_modules/imurmurhash": {
"version": "0.1.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "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",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "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"
@@ -1391,141 +1400,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"
- },
- "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": {
- "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"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "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": {
- "node": ">=8"
- }
- },
- "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": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "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": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "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": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "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": {
- "node": ">=8"
- }
- },
- "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": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
+ "dev": true
},
"node_modules/internal-slot": {
"version": "1.0.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/internal-slot/-/internal-slot-1.0.3.tgz",
+ "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",
@@ -1535,36 +1418,17 @@
"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"
+ "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://nexus3.linkurious.net/repository/npm/is-bigint/-/is-bigint-1.0.4.tgz",
+ "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"
},
@@ -1574,10 +1438,9 @@
},
"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",
+ "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"
@@ -1591,10 +1454,9 @@
},
"node_modules/is-callable": {
"version": "1.2.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-callable/-/is-callable-1.2.4.tgz",
+ "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"
},
@@ -1603,11 +1465,10 @@
}
},
"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",
+ "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"
},
@@ -1617,10 +1478,9 @@
},
"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",
+ "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"
},
@@ -1633,43 +1493,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": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "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-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": {
- "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",
+ "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"
},
@@ -1677,19 +1512,11 @@
"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",
+ "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"
},
@@ -1698,11 +1525,10 @@
}
},
"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",
+ "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"
},
@@ -1713,22 +1539,11 @@
"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",
+ "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"
@@ -1741,21 +1556,22 @@
}
},
"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",
+ "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"
+ },
"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",
+ "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"
},
@@ -1768,10 +1584,9 @@
},
"node_modules/is-symbol": {
"version": "1.0.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-symbol/-/is-symbol-1.0.4.tgz",
+ "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"
},
@@ -1784,10 +1599,9 @@
},
"node_modules/is-weakref": {
"version": "1.0.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakref/-/is-weakref-1.0.2.tgz",
+ "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"
},
@@ -1795,124 +1609,98 @@
"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"
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
},
"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==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz",
- "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==",
+ "node_modules/jsdoc-type-pratt-parser": {
+ "version": "3.1.0",
+ "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",
- "bin": {
- "jsdoctypeparser": "bin/jsdoctypeparser"
- },
"engines": {
- "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": ">=12.0.0"
}
},
"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",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true,
- "license": "MIT"
+ "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",
- "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"
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz",
+ "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/json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"dev": true,
- "license": "MIT"
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
},
"node_modules/jsts": {
"version": "1.3.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/jsts/-/jsts-1.3.0.tgz",
- "integrity": "sha1-6Tp2+XrJvafUYl2dZHDw1grIDkU=",
+ "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.7.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/leaflet/-/leaflet-1.7.1.tgz",
- "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==",
- "dev": true,
- "license": "BSD-2-Clause"
+ "version": "1.8.0",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/leaflet-editable/-/leaflet-editable-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/leaflet-editable/-/leaflet-editable-1.2.0.tgz",
"integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==",
- "dev": true,
- "license": "WTFPL"
+ "dev": true
},
"node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "version": "0.4.1",
+ "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.1.2",
- "type-check": "~0.3.2"
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
},
"engines": {
"node": ">= 0.8.0"
@@ -1920,10 +1708,9 @@
},
"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=",
+ "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",
@@ -1934,41 +1721,77 @@
"node": ">=4"
}
},
- "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=",
+ "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"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
},
- "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=",
+ "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,
- "license": "MIT"
+ "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.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "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,
+ "dependencies": {
+ "get-func-name": "^2.0.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/magic-string": {
"version": "0.25.9",
- "resolved": "https://nexus3.linkurious.net/repository/npm/magic-string/-/magic-string-0.25.9.tgz",
+ "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://nexus3.linkurious.net/repository/npm/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
"dev": true,
"engines": {
"node": ">= 0.10.0"
@@ -1976,10 +1799,9 @@
},
"node_modules/mime": {
"version": "1.6.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/mime/-/mime-1.6.0.tgz",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true,
- "license": "MIT",
"bin": {
"mime": "cli.js"
},
@@ -1987,22 +1809,11 @@
"node": ">=4"
}
},
- "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": {
- "node": ">=6"
- }
- },
"node_modules/minimatch": {
"version": "3.1.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/minimatch/-/minimatch-3.1.2.tgz",
+ "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"
},
@@ -2012,58 +1823,66 @@
},
"node_modules/minimist": {
"version": "1.2.6",
- "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.6.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"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",
+ "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.5"
+ "minimist": "^1.2.6"
},
"bin": {
"mkdirp": "bin/cmd.js"
}
},
+ "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,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
- "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==",
+ "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": "ISC"
+ "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"
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/nice-try/-/nice-try-1.0.5.tgz",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"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",
+ "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",
@@ -2073,20 +1892,18 @@
},
"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",
+ "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://nexus3.linkurious.net/repository/npm/npm-run-all/-/npm-run-all-4.1.5.tgz",
+ "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",
@@ -2107,59 +1924,167 @@
"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=",
+ "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,
- "license": "MIT",
+ "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/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==",
+ "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,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "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==",
+ "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,
- "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
+ "has-flag": "^3.0.0"
},
"engines": {
- "node": ">= 0.4"
+ "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,
"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",
+ "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://nexus3.linkurious.net/repository/npm/object.assign/-/object.assign-4.1.2.tgz",
+ "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",
@@ -2173,93 +2098,96 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "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": {
- "wrappy": "1"
- }
- },
- "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==",
+ "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,
- "license": "MIT",
"dependencies": {
- "mimic-fn": "^2.1.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
},
"engines": {
- "node": ">=6"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
}
},
"node_modules/opener": {
"version": "1.5.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/opener/-/opener-1.5.2.tgz",
+ "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.8.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "version": "0.9.1",
+ "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",
- "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-homedir": {
+ "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://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.",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
"dev": true,
- "license": "MIT",
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
- "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=",
+ "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,
- "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"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"
},
@@ -2269,10 +2197,9 @@
},
"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=",
+ "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"
},
@@ -2280,49 +2207,44 @@
"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=",
+ "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,
- "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"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=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/path-parse/-/path-parse-1.0.7.tgz",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/path-type": {
"version": "3.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/path-type/-/path-type-3.0.0.tgz",
+ "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"
},
@@ -2332,20 +2254,33 @@
},
"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=",
+ "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,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "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://nexus3.linkurious.net/repository/npm/pidtree/-/pidtree-0.3.1.tgz",
+ "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"
},
@@ -2355,37 +2290,39 @@
},
"node_modules/pify": {
"version": "2.3.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/platform/-/platform-1.3.6.tgz",
+ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
"integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
- "node_modules/plur": {
- "version": "1.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/plur/-/plur-1.0.0.tgz",
- "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=",
+ "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,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
+ "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://nexus3.linkurious.net/repository/npm/portfinder/-/portfinder-1.0.28.tgz",
+ "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",
@@ -2397,71 +2334,60 @@
},
"node_modules/portfinder/node_modules/debug": {
"version": "3.2.7",
- "resolved": "https://nexus3.linkurious.net/repository/npm/debug/-/debug-3.2.7.tgz",
+ "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/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",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
"dev": true,
- "license": "MIT",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
"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=",
- "dev": true,
- "license": "MIT"
- },
- "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==",
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "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.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",
+ "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.10.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "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"
},
@@ -2472,19 +2398,11 @@
"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=",
+ "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",
@@ -2496,10 +2414,9 @@
},
"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=",
+ "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",
@@ -2512,10 +2429,9 @@
},
"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=",
+ "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"
@@ -2526,59 +2442,22 @@
},
"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==",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"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",
+ "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"
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
},
"engines": {
"node": ">= 0.4"
@@ -2588,69 +2467,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==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
"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"
+ "node": ">=8"
},
- "bin": {
- "regjsparser": "bin/parser"
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
}
},
"node_modules/reify": {
"version": "0.20.12",
- "resolved": "https://nexus3.linkurious.net/repository/npm/reify/-/reify-0.20.12.tgz",
+ "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",
@@ -2661,41 +2493,49 @@
"node": ">=4"
}
},
+ "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,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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,
+ "peerDependencies": {
+ "acorn": "^6.0.0"
+ }
+ },
"node_modules/reify/node_modules/semver": {
"version": "5.7.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz",
+ "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/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,
- "license": "MIT",
- "engines": {
- "node": ">=0.10"
- }
- },
"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"
+ "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.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/resolve/-/resolve-1.22.0.tgz",
- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "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.8.1",
+ "is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -2708,246 +2548,113 @@
},
"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/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": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "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==",
+ "version": "3.0.2",
+ "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"
},
"bin": {
"rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"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==",
- "license": "Unlicense"
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
+ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
},
"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",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz",
+ "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==",
"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"
},
"engines": {
- "node": ">=0.4.0"
- }
- },
- "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": {
- "node": ">=0.12.0"
- }
- },
- "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": {
- "tslib": "^1.9.0"
+ "node": ">=10.0.0"
},
- "engines": {
- "npm": ">=2.0.0"
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/safer-buffer": {
"version": "2.1.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"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"
+ "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
+ "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
+ "dev": true
},
"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==",
+ "version": "7.3.7",
+ "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"
+ },
"bin": {
"semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"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=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/shell-quote/-/shell-quote-1.7.3.tgz",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
"integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/side-channel": {
"version": "1.0.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/side-channel/-/side-channel-1.0.4.tgz",
+ "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",
@@ -2957,51 +2664,40 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "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/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==",
+ "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": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
+ "@polka/url": "^1.0.0-next.20",
+ "mrmime": "^1.0.0",
+ "totalist": "^3.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">= 10"
}
},
- "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=",
+ "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": "MIT",
"engines": {
- "node": ">=4"
+ "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",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/spdx-correct": {
"version": "3.1.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "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"
@@ -3009,17 +2705,15 @@
},
"node_modules/spdx-exceptions": {
"version": "2.3.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true,
- "license": "CC-BY-3.0"
+ "dev": true
},
"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",
+ "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"
@@ -3027,178 +2721,86 @@
},
"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",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
"integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
- "dev": true,
- "license": "CC0-1.0"
+ "dev": true
},
"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"
+ "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz",
+ "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ=="
},
- "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=",
+ "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": {
- "through": "2"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
},
"engines": {
- "node": "*"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "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=",
+ "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": "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==",
- "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",
- "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/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": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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": {
- "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.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,
- "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",
+ "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.3"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"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==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/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": {
"version": "3.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "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"
},
@@ -3207,24 +2809,22 @@
}
},
"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==",
+ "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://nexus3.linkurious.net/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "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"
},
@@ -3232,427 +2832,120 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "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": {
- "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",
- "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": {
- "node": ">=4"
- }
- },
- "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": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "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/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
},
- "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=",
+ "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": ">=0.10.0"
+ "node": ">=14.0.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/tinyqueue": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
+ "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
},
- "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=",
+ "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",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=14.0.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=",
+ "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": ">=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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "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": ">=6"
}
},
- "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/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,
- "license": "MIT",
"dependencies": {
- "safe-buffer": "~5.1.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": {
- "os-tmpdir": "~1.0.2"
- },
- "engines": {
- "node": ">=0.6.0"
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.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/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=",
+ "version": "0.4.0",
+ "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.1.2"
+ "prelude-ls": "^1.2.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
- "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": {
- "node": ">=8"
- }
- },
- "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==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "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==",
+ "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": "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "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==",
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "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",
- "dependencies": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- },
"engines": {
- "node": ">=4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "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==",
+ "node_modules/typescript": {
+ "version": "4.7.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
+ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
"dev": true,
- "license": "MIT",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
"engines": {
- "node": ">=4"
+ "node": ">=4.2.0"
}
},
- "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==",
+ "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",
- "engines": {
- "node": ">=4"
+ "dependencies": {
+ "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/union": {
"version": "0.5.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/union/-/union-0.5.0.tgz",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
"integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
"dev": true,
"dependencies": {
@@ -3664,65 +2957,158 @@
},
"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"
}
},
"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"
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"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",
+ "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"
}
},
+ "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,
+ "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",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.18.1.tgz",
+ "integrity": "sha512-4F/1K/Vn4AvJwe7i2YblR02PT5vMKcw9KN4unDq2KD0YcSxX0B/6D6Qu9PJaXwVuxXMFTQ5ovd4+CQaW3bwofA==",
+ "dev": true,
+ "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/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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "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://nexus3.linkurious.net/repository/npm/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "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",
@@ -3736,131 +3122,184 @@
},
"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",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
},
- "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==",
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ },
+ "dependencies": {
+ "@es-joy/jsdoccomment": {
+ "version": "0.31.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz",
+ "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "mkdirp": "^0.5.1"
- },
- "engines": {
- "node": ">=4"
+ "requires": {
+ "comment-parser": "1.3.1",
+ "esquery": "^1.4.0",
+ "jsdoc-type-pratt-parser": "~3.1.0"
}
},
- "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==",
+ "@eslint/eslintrc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4"
+ "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"
}
- }
- },
- "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==",
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.16.7"
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
}
},
- "@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==",
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "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
},
- "@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==",
+ "@turf/union": {
+ "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": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
+ "jsts": "1.3.0"
}
},
- "@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=",
+ "@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": {
- "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==",
+ "@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://nexus3.linkurious.net/repository/npm/@types/geojson/-/geojson-1.0.6.tgz",
+ "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/node": {
- "version": "17.0.23",
- "resolved": "https://nexus3.linkurious.net/repository/npm/@types/node/-/node-17.0.23.tgz",
- "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==",
+ "@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/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==",
+ "@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/node": "*"
+ "@types/openlayers": "*"
}
},
- "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==",
+ "@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": "*"
+ }
+ },
+ "@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": "*"
+ }
+ },
+ "@types/node": {
+ "version": "17.0.45",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
"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==",
+ "@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": {}
+ "requires": {
+ "sirv": "^2.0.2"
+ }
+ },
+ "acorn": {
+ "version": "8.7.1",
+ "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": {
@@ -3870,51 +3309,56 @@
"uri-js": "^4.2.2"
}
},
- "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==",
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "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": {
- "type-fest": "^0.21.3"
- },
- "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
- }
+ "color-convert": "^2.0.1"
}
},
- "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==",
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"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==",
+ "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": {
- "color-convert": "^1.9.0"
+ "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"
}
},
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://nexus3.linkurious.net/repository/npm/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "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": {
- "sprintf-js": "~1.0.2"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
}
},
- "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==",
+ "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": {
@@ -3928,20 +3372,23 @@
},
"balanced-match": {
"version": "1.0.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/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
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/benchmark/-/benchmark-2.1.4.tgz",
- "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=",
+ "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",
@@ -3950,7 +3397,7 @@
},
"brace-expansion": {
"version": "1.1.11",
- "resolved": "https://nexus3.linkurious.net/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
@@ -3958,37 +3405,9 @@
"concat-map": "0.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-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",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
"requires": {
@@ -3998,197 +3417,137 @@
},
"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
},
- "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==",
+ "chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "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"
}
},
- "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
- },
- "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==",
+ "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": {
- "restore-cursor": "^3.1.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
}
},
- "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==",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "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",
- "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==",
+ "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": "0.7.6",
- "resolved": "https://nexus3.linkurious.net/repository/npm/comment-parser/-/comment-parser-0.7.6.tgz",
- "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==",
+ "version": "1.3.1",
+ "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://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==",
+ "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://nexus3.linkurious.net/repository/npm/corser/-/corser-2.0.1.tgz",
- "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=",
- "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",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "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
- }
+ "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": "7.0.3",
+ "resolved": "https://registry.npmjs.org/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"
}
},
+ "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://nexus3.linkurious.net/repository/npm/debug/-/debug-4.3.4.tgz",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"requires": {
"ms": "2.1.2"
}
},
- "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==",
+ "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": {
- "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"
}
},
"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.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",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"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
- },
"doctrine": {
"version": "3.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/doctrine/-/doctrine-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/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",
- "mime": "^1.6.0",
- "minimist": "^1.1.0",
- "url-join": "^2.0.5"
- }
- },
- "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",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"requires": {
@@ -4196,36 +3555,48 @@
}
},
"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",
+ "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-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"
+ }
+ },
+ "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://nexus3.linkurious.net/repository/npm/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
"requires": {
@@ -4234,321 +3605,407 @@
"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-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
+ },
"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": "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": "6.8.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/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"
}
},
- "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=",
+ "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": {
- "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==",
+ "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,
"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"
}
},
"eslint-plugin-promise": {
"version": "3.8.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz",
+ "resolved": "https://registry.npmjs.org/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==",
+ "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,
"requires": {
"esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
+ "estraverse": "^5.2.0"
}
},
"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==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/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",
- "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==",
+ "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
},
"espree": {
- "version": "6.2.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/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"
- },
- "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
- }
+ "acorn": "^8.7.1",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
}
},
- "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",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
"dev": true,
"requires": {
"estraverse": "^5.1.0"
- },
- "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",
+ "resolved": "https://registry.npmjs.org/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",
- "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==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
},
"esutils": {
"version": "2.0.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/esutils/-/esutils-2.0.3.tgz",
+ "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://nexus3.linkurious.net/repository/npm/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "resolved": "https://registry.npmjs.org/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",
- "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",
+ "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",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"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==",
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
"requires": {
- "escape-string-regexp": "^1.0.5"
+ "flat-cache": "^3.0.4"
}
},
- "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==",
+ "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": {
- "flat-cache": "^2.0.1"
+ "locate-path": "^2.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==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/flatted/-/flatted-2.0.2.tgz",
- "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+ "version": "3.2.6",
+ "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.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",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
+ "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
"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"
- }
- },
"fs.realpath": {
"version": "1.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "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://nexus3.linkurious.net/repository/npm/function-bind/-/function-bind-1.1.1.tgz",
+ "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",
+ "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=",
+ "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://nexus3.linkurious.net/repository/npm/geojson-project/-/geojson-project-1.0.1.tgz",
- "integrity": "sha1-qpNGWGVYo2XETWaY/80L/FffRAY=",
+ "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.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "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",
"has": "^1.0.3",
- "has-symbols": "^1.0.1"
+ "has-symbols": "^1.0.3"
}
},
"get-symbol-description": {
"version": "1.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
"integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
"dev": true,
"requires": {
@@ -4557,90 +4014,82 @@
}
},
"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",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"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==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "version": "13.16.0",
+ "resolved": "https://registry.npmjs.org/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": {
- "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",
+ "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://nexus3.linkurious.net/repository/npm/has/-/has-1.0.3.tgz",
+ "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"
}
},
- "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",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "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"
+ }
+ },
"has-symbols": {
"version": "1.0.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/has-symbols/-/has-symbols-1.0.3.tgz",
+ "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://nexus3.linkurious.net/repository/npm/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dev": true,
"requires": {
@@ -4649,19 +4098,28 @@
},
"he": {
"version": "1.2.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/he/-/he-1.2.0.tgz",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "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": {
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/http-proxy/-/http-proxy-1.18.1.tgz",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
"integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
"dev": true,
"requires": {
@@ -4671,160 +4129,76 @@
}
},
"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==",
+ "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"
+ "union": "~0.5.0",
+ "url-join": "^4.0.1"
}
},
"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"
- }
- },
- "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",
- "resolve-from": "^4.0.0"
- }
- },
- "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",
- "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
- },
- "inquirer": {
- "version": "7.3.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/inquirer/-/inquirer-7.3.3.tgz",
- "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "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": {
- "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",
- "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"
- }
- },
- "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
- },
- "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"
- }
- },
- "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"
- }
- }
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "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://registry.npmjs.org/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",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/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://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://nexus3.linkurious.net/repository/npm/internal-slot/-/internal-slot-1.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
"integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
"dev": true,
"requires": {
@@ -4833,25 +4207,15 @@
"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=",
+ "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://nexus3.linkurious.net/repository/npm/is-bigint/-/is-bigint-1.0.4.tgz",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"dev": true,
"requires": {
@@ -4860,7 +4224,7 @@
},
"is-boolean-object": {
"version": "1.1.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
"requires": {
@@ -4870,14 +4234,14 @@
},
"is-callable": {
"version": "1.2.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-callable/-/is-callable-1.2.4.tgz",
+ "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.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",
+ "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"
@@ -4885,7 +4249,7 @@
},
"is-date-object": {
"version": "1.0.5",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-date-object/-/is-date-object-1.0.5.tgz",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"requires": {
@@ -4894,64 +4258,37 @@
},
"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.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
- },
- "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==",
+ "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": {
"is-extglob": "^2.1.1"
}
},
- "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
- },
"is-negative-zero": {
"version": "2.0.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "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.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",
+ "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"
}
},
- "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",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"requires": {
@@ -4960,14 +4297,17 @@
}
},
"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",
+ "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"
+ }
},
"is-string": {
"version": "1.0.7",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-string/-/is-string-1.0.7.tgz",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true,
"requires": {
@@ -4976,7 +4316,7 @@
},
"is-symbol": {
"version": "1.0.4",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-symbol/-/is-symbol-1.0.4.tgz",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
"integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
"dev": true,
"requires": {
@@ -4985,109 +4325,99 @@
},
"is-weakref": {
"version": "1.0.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/is-weakref/-/is-weakref-1.0.2.tgz",
+ "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"
}
},
- "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
- },
- "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==",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"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==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/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",
- "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=",
+ "jsdoc-type-pratt-parser": {
+ "version": "3.1.0",
+ "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://nexus3.linkurious.net/repository/npm/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "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://nexus3.linkurious.net/repository/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "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://nexus3.linkurious.net/repository/npm/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz",
"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://nexus3.linkurious.net/repository/npm/jsts/-/jsts-1.3.0.tgz",
- "integrity": "sha1-6Tp2+XrJvafUYl2dZHDw1grIDkU=",
+ "resolved": "https://registry.npmjs.org/jsts/-/jsts-1.3.0.tgz",
+ "integrity": "sha512-uFcaiZ5ba3Y6lfHNFikk64Kdkfx01iq3GE+K2S2k95uDcJcKxMusMd2RGgYWeS8EeUVX6eadOqwEzwA8yyGOaQ==",
"dev": true
},
"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",
+ "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://nexus3.linkurious.net/repository/npm/leaflet-editable/-/leaflet-editable-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/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=",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/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": {
"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=",
+ "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",
@@ -5096,27 +4426,55 @@
"strip-bom": "^3.0.0"
}
},
+ "local-pkg": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz",
+ "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://nexus3.linkurious.net/repository/npm/lodash/-/lodash-4.17.21.tgz",
+ "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://nexus3.linkurious.net/repository/npm/lodash.cond/-/lodash.cond-4.5.2.tgz",
- "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"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
+ "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"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/magic-string/-/magic-string-0.25.9.tgz",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
"dev": true,
"requires": {
@@ -5125,25 +4483,19 @@
},
"memorystream": {
"version": "0.3.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
"dev": true
},
"mime": {
"version": "1.6.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/mime/-/mime-1.6.0.tgz",
+ "resolved": "https://registry.npmjs.org/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",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"requires": {
@@ -5152,46 +4504,52 @@
},
"minimist": {
"version": "1.2.6",
- "resolved": "https://nexus3.linkurious.net/repository/npm/minimist/-/minimist-1.2.6.tgz",
+ "resolved": "https://registry.npmjs.org/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",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"requires": {
- "minimist": "^1.2.5"
+ "minimist": "^1.2.6"
}
},
+ "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://nexus3.linkurious.net/repository/npm/ms/-/ms-2.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/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==",
+ "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://nexus3.linkurious.net/repository/npm/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "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://nexus3.linkurious.net/repository/npm/nice-try/-/nice-try-1.0.5.tgz",
+ "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://nexus3.linkurious.net/repository/npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "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": {
@@ -5203,7 +4561,7 @@
"dependencies": {
"semver": {
"version": "5.7.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
}
@@ -5211,7 +4569,7 @@
},
"npm-run-all": {
"version": "4.1.5",
- "resolved": "https://nexus3.linkurious.net/repository/npm/npm-run-all/-/npm-run-all-4.1.5.tgz",
+ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
"integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
"dev": true,
"requires": {
@@ -5224,39 +4582,130 @@
"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-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",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
"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"
- }
- },
"object-keys": {
"version": "1.1.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/object-keys/-/object-keys-1.1.1.tgz",
+ "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",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
"dev": true,
"requires": {
@@ -5266,65 +4715,73 @@
"object-keys": "^1.1.1"
}
},
- "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=",
+ "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": {
- "wrappy": "1"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
}
},
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"requires": {
- "mimic-fn": "^2.1.0"
+ "wrappy": "1"
}
},
"opener": {
"version": "1.5.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/opener/-/opener-1.5.2.tgz",
+ "resolved": "https://registry.npmjs.org/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==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/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.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "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": {
- "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"
+ "p-try": "^1.0.0"
}
},
- "os-homedir": {
+ "p-locate": {
"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
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
},
- "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=",
+ "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://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": {
@@ -5333,40 +4790,40 @@
},
"parse-json": {
"version": "2.2.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "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"
}
},
- "parse-ms": {
- "version": "1.0.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/parse-ms/-/parse-ms-1.0.1.tgz",
- "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=",
+ "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://nexus3.linkurious.net/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "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://nexus3.linkurious.net/repository/npm/path-parse/-/path-parse-1.0.7.tgz",
+ "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://nexus3.linkurious.net/repository/npm/path-type/-/path-type-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
"requires": {
@@ -5375,39 +4832,62 @@
"dependencies": {
"pify": {
"version": "3.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "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://nexus3.linkurious.net/repository/npm/pidtree/-/pidtree-0.3.1.tgz",
+ "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://nexus3.linkurious.net/repository/npm/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "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://nexus3.linkurious.net/repository/npm/platform/-/platform-1.3.6.tgz",
+ "resolved": "https://registry.npmjs.org/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
+ "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://nexus3.linkurious.net/repository/npm/portfinder/-/portfinder-1.0.28.tgz",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
"integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
"dev": true,
"requires": {
@@ -5418,7 +4898,7 @@
"dependencies": {
"debug": {
"version": "3.2.7",
- "resolved": "https://nexus3.linkurious.net/repository/npm/debug/-/debug-3.2.7.tgz",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"requires": {
@@ -5427,60 +4907,42 @@
}
}
},
- "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",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
"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=",
- "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==",
+ "prelude-ls": {
+ "version": "1.2.1",
+ "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.10.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "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"
}
},
- "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=",
+ "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",
@@ -5490,8 +4952,8 @@
"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=",
+ "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",
@@ -5502,8 +4964,8 @@
},
"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=",
+ "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",
@@ -5512,96 +4974,32 @@
},
"pify": {
"version": "3.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"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"
- }
- },
- "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": {
- "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",
+ "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",
- "define-properties": "^1.1.3"
+ "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==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
"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",
+ "resolved": "https://registry.npmjs.org/reify/-/reify-0.20.12.tgz",
"integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==",
"dev": true,
"requires": {
@@ -5611,211 +5009,124 @@
"semver": "^5.4.1"
},
"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://nexus3.linkurious.net/repository/npm/semver/-/semver-5.7.1.tgz",
+ "resolved": "https://registry.npmjs.org/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=",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"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",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"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",
+ "resolved": "https://registry.npmjs.org/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==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"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",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
+ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
},
"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==",
- "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==",
+ "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": {
- "@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-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"
- }
- },
- "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"
+ "fsevents": "~2.3.2"
}
},
"safe-buffer": {
"version": "5.1.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/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",
+ "resolved": "https://registry.npmjs.org/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=",
+ "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
+ "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
"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
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "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://nexus3.linkurious.net/repository/npm/shell-quote/-/shell-quote-1.7.3.tgz",
+ "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://nexus3.linkurious.net/repository/npm/side-channel/-/side-channel-1.0.4.tgz",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
"requires": {
@@ -5824,40 +5135,32 @@
"object-inspect": "^1.9.0"
}
},
- "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
- },
- "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==",
+ "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": {
- "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",
- "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
- }
+ "@polka/url": "^1.0.0-next.20",
+ "mrmime": "^1.0.0",
+ "totalist": "^3.0.0"
}
},
+ "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://nexus3.linkurious.net/repository/npm/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "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://nexus3.linkurious.net/repository/npm/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
"integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
"dev": true,
"requires": {
@@ -5867,13 +5170,13 @@
},
"spdx-exceptions": {
"version": "2.3.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "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://nexus3.linkurious.net/repository/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
"requires": {
@@ -5883,70 +5186,18 @@
},
"spdx-license-ids": {
"version": "3.0.11",
- "resolved": "https://nexus3.linkurious.net/repository/npm/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/splaytree/-/splaytree-0.1.4.tgz",
+ "resolved": "https://registry.npmjs.org/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"
- }
- },
- "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
- },
- "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,
- "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",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
"integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==",
"dev": true,
"requires": {
@@ -5955,385 +5206,147 @@
"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==",
+ "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",
- "define-properties": "^1.1.3"
+ "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",
+ "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",
- "define-properties": "^1.1.3"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
}
},
"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==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/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": {
"version": "3.0.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "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://nexus3.linkurious.net/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/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",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "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",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- }
- }
- },
- "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"
- }
- },
- "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"
- }
- },
"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=",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"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=",
+ "tinypool": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz",
+ "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==",
"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"
- }
- }
- }
- },
"tinyqueue": {
- "version": "1.2.3",
- "resolved": "https://nexus3.linkurious.net/repository/npm/tinyqueue/-/tinyqueue-1.2.3.tgz",
- "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA=="
- },
- "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"
- }
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
+ "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
},
- "trim": {
- "version": "0.0.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/trim/-/trim-0.0.1.tgz",
- "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
+ "tinyspy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.0.tgz",
+ "integrity": "sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==",
"dev": true
},
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://nexus3.linkurious.net/repository/npm/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "totalist": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz",
+ "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.3.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/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-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==",
+ "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
},
- "typescript": {
- "version": "3.9.10",
- "resolved": "https://nexus3.linkurious.net/repository/npm/typescript/-/typescript-3.9.10.tgz",
- "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
+ "type-fest": {
+ "version": "0.20.2",
+ "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
},
- "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==",
+ "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.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",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"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"
}
},
- "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",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
"integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
"dev": true,
"requires": {
@@ -6342,7 +5355,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": {
@@ -6350,26 +5363,20 @@
}
},
"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=",
+ "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": {
"version": "2.3.0",
- "resolved": "https://nexus3.linkurious.net/repository/npm/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "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://nexus3.linkurious.net/repository/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "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": {
@@ -6377,10 +5384,49 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "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",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.14",
+ "resolve": "^1.22.1",
+ "rollup": "^2.75.6"
+ }
+ },
+ "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",
+ "@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"
+ }
+ },
+ "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",
- "resolved": "https://nexus3.linkurious.net/repository/npm/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "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"
@@ -6388,7 +5434,7 @@
},
"which-boxed-primitive": {
"version": "1.0.2",
- "resolved": "https://nexus3.linkurious.net/repository/npm/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
"dev": true,
"requires": {
@@ -6401,29 +5447,20 @@
},
"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",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"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==",
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
}
diff --git a/package.json b/package.json
index 352fb27..6072d45 100644
--- a/package.json
+++ b/package.json
@@ -1,27 +1,29 @@
{
"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/martinez.umd.js",
- "browser": "dist/martinez.umd.js",
- "module": "index.js",
- "jsnext:main": "index.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",
+ "type": "module",
"files": [
- "index.d.ts",
- "index.js",
"src/",
"dist/"
],
"scripts": {
- "test": "tape -r reify buble/register test/*.test.js | tap-spec && npm run ts",
- "ts": "tsc index.d.ts",
+ "start": "vite web",
+ "build": "tsc && vite build && npm run types",
+ "build:demo": "vite build web",
+ "preview": "vite preview web",
+ "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": "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",
"prepublishOnly": "npm run lint && npm run test && npm run build"
},
"keywords": [
@@ -43,34 +45,45 @@
"license": "MIT",
"devDependencies": {
"@turf/union": "^4.6.0",
- "@types/geojson": "^1.0.2",
+ "@types/dat.gui": "^0.7.7",
+ "@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",
+ "dat.gui": "^0.7.9",
+ "eslint": "^8.20.0",
+ "eslint-plugin-import": "^2.26.0",
+ "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.1.0",
+ "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",
- "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"
+ "typescript": "^4.6.4",
+ "vite": "^3.0.0",
+ "vitest": "^0.18.1"
},
"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
}
}
diff --git a/rollup.config.js b/rollup.config.js
deleted file mode 100644
index 06a3f84..0000000
--- a/rollup.config.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import resolve from 'rollup-plugin-node-resolve';
-import commonjs from 'rollup-plugin-commonjs';
-import buble from 'rollup-plugin-buble';
-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: './index.js',
- output: {
- file: `dist/${name}.umd.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
- buble()
- ]
-}, {
- input: 'demo/js/index.js',
- output: {
- file: 'demo/js/bundle.js',
- format: 'iife',
- globals: {
- leaflet: 'L',
- jsts: 'jsts'
- }
- },
- external: ['jsts', 'leaflet'],
- plugins: [
- resolve(), // so Rollup can find external libs
- commonjs(), // so Rollup can convert commonJS to an ES module
- buble()
- ]
-}];
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 58%
rename from src/debug_utils.js
rename to src/debug_utils.ts
index 674a50c..f99b334 100644
--- a/src/debug_utils.js
+++ 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/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/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/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..096e9ae
--- /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 = { INTERSECTION, DIFFERENCE, UNION, 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..6b97300
--- /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(next.key as SweepEvent, event, 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
deleted file mode 100644
index ef8066f..0000000
--- a/test/compare_events.test.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import tap from 'tape';
-import Queue from 'tinyqueue';
-import sweepEventsComp from '../src/compare_events';
-import SweepEvent from '../src/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');
+});
diff --git a/test/compare_segments.test.js b/test/compare_segments.test.js
deleted file mode 100644
index 982be8c..0000000
--- a/test/compare_segments.test.js
+++ /dev/null
@@ -1,121 +0,0 @@
-'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';
-
-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);
+ });
+});
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/divide_segment.test.js b/test/divide_segment.test.js
deleted file mode 100644
index d7a75d1..0000000
--- a/test/divide_segment.test.js
+++ /dev/null
@@ -1,247 +0,0 @@
-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';
-
-// GeoJSON Data
-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 q = new Queue(null, compareEvents);
-
- q.push(se1);
- q.push(se2);
-
- const iter = intersection(
- se1.point, se1.otherEvent.point,
- se2.point, se2.otherEvent.point
- );
-
-
- divideSegment(se1, iter[0], q);
- divideSegment(se2, iter[0], q);
-
- t.equals(q.length, 6, 'subdivided in 4 segments by intersection point');
-
- t.end();
- });
-
- 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);
-
- // 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);
-
- let e;
-
- e = q.pop();
- t.deepEqual(e.point, [100.79403384562251, 233.41363754101192]);
- t.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');
-
- e = q.pop();
- t.deepEqual(e.point, [100.79403384562251, 233.41363754101192]);
- t.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();
- });
-
- main.test('possible intersections on 2 polygons', (t) => {
- const s = [subject.geometry.coordinates];
- const c = [clipping.geometry.coordinates];
-
- 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 te = new SweepEvent(p0, true, null, true);
- const te2 = new SweepEvent(p1, false, te, false);
- te.otherEvent = te2;
-
- const te3 = new SweepEvent(p0, true, null, true);
- const te4 = new SweepEvent(p2, true, te3, false);
- te3.otherEvent = te4;
-
- const tr = new Tree(compareSegments);
-
- t.ok(tr.insert(te), 'insert');
- t.ok(tr.insert(te3), 'insert');
-
- t.equals(tr.find(te).key, te);
- t.equals(tr.find(te3).key, te3);
-
- t.equals(compareSegments(te, te3), 1);
- t.equals(compareSegments(te3, te), -1);
-
- const segments = subdivideSegments(q, s, c, bbox, bbox, 0);
- const leftSegments = [];
- for (let i = 0; i < segments.length; i++) {
- if (segments[i].left) {
- leftSegments.push(segments[i]);
- }
- }
-
- t.equals(leftSegments.length, 11);
-
- const E = [16, 282];
- const I = [100.79403384562252, 233.41363754101192];
- const G = [298, 359];
- const C = [153, 294.5];
- const J = [203.36313843035356, 257.5101243166895];
- const F = [153, 203.5];
- const D = [56, 181];
- const A = [108.5, 120];
- const B = [241.5, 229.5];
-
- const intervals = {
- 'EI': {
- l: E, r: I,
- inOut: false,
- otherInOut: true,
- inResult: false,
- prevInResult: null
- },
- 'IF': {
- l: I, r: F,
- inOut: false,
- otherInOut: false,
- inResult: true,
- prevInResult: null
- },
- 'FJ': {
- l: F, r: J,
- inOut: false,
- otherInOut: false,
- inResult: true,
- prevInResult: null
- },
- 'JG': {
- l: J, r: G,
- inOut: false,
- otherInOut: true,
- inResult: false,
- prevInResult: null
- },
- 'EG': {
- l: E, r: G,
- inOut: true,
- otherInOut: true,
- inResult: false,
- prevInResult: null
- },
- 'DA': {
- l: D, r: A,
- inOut: false,
- otherInOut: true,
- inResult: false,
- prevInResult: null
- },
- 'AB': {
- l: A, r: B,
- inOut: false,
- otherInOut: true,
- inResult: false,
- prevInResult: null
- },
- 'JB': {
- l: J, r: B,
- inOut: true,
- otherInOut: true,
- inResult: false,
- prevInResult: null
- },
-
- 'CJ': {
- l: C, r: J,
- inOut: true,
- otherInOut: false,
- inResult: true,
- prevInResult: {
- l: F, r: J,
- prevInResult: null
- }
- },
- 'IC': {
- l: I, r: C,
- inOut: true,
- otherInOut: false,
- inResult: true,
- prevInResult: {
- l: I, r: F,
- prevInResult: null
- }},
-
- 'DI': {
- l: D, r: I,
- inOut: true,
- otherInOut: true,
- inResult: false,
- prevInResult: null
- }
- };
-
- function checkContain(interval) {
- 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) ||
- (equals(seg.prevInResult.point, data.prevInResult.l) &&
- equals(seg.prevInResult.otherEvent.point, data.prevInResult.r)))) {
- t.pass(interval);
- return;
- }
- }
- t.fail(interval);
- }
-
- Object.keys(intervals).forEach((key) => checkContain(key));
-
- t.end();
- });
-
- main.end();
-});
diff --git a/test/divide_segment.test.ts b/test/divide_segment.test.ts
new file mode 100644
index 0000000..97046fa
--- /dev/null
+++ b/test/divide_segment.test.ts
@@ -0,0 +1,277 @@
+import { describe, it, assert } from 'vitest';
+import path from 'path';
+import Queue from 'tinyqueue';
+import load from 'load-json-file';
+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 { BoundingBox, MultiPolygon, Point } from '../src/types';
+
+// GeoJSON Data
+const shapes = load.sync(
+ path.join(process.cwd(), 'test', 'fixtures', 'two_shapes.geojson')
+);
+
+const subject = shapes.features[0];
+const clipping = shapes.features[1];
+
+describe('divide segments', () => {
+ it('divide 2 segments', () => {
+ const se1 = new SweepEvent(
+ [0, 0],
+ true,
+ new SweepEvent([5, 5], false, null, false),
+ true
+ );
+ const se2 = new SweepEvent(
+ [0, 5],
+ true,
+ new SweepEvent([5, 0], false, null, false),
+ false
+ );
+ const q = new Queue(undefined, compareEvents);
+
+ q.push(se1);
+ q.push(se2);
+
+ const iter = intersection(
+ se1.point,
+ se1.otherEvent.point,
+ se2.point,
+ se2.otherEvent.point,
+ false
+ );
+
+ if (iter) {
+ divideSegment(se1, iter[0] as Point, q);
+ divideSegment(se2, iter[0] as Point, q);
+ }
+
+ assert.equal(q.length, 6, 'subdivided in 4 segments by intersection point');
+ });
+
+ it('possible intersections', () => {
+ const s = subject.geometry.coordinates;
+ const c = clipping.geometry.coordinates;
+
+ const q = new Queue(undefined, compareEvents);
+
+ const se1 = new SweepEvent(
+ s[0][3],
+ true,
+ new SweepEvent(s[0][2], false, null, false),
+ true
+ );
+ const se2 = new SweepEvent(
+ c[0][0],
+ true,
+ 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);
+
+ assert.equal(possibleIntersection(se1, se2, q), 1);
+ assert.equal(q.length, 4);
+
+ let e;
+
+ e = q.pop();
+ assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]);
+ assert.deepEqual(e.otherEvent.point, [56, 181], '1');
+
+ e = q.pop();
+ assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]);
+ assert.deepEqual(e.otherEvent.point, [16, 282], '2');
+
+ e = q.pop();
+ assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]);
+ assert.deepEqual(e.otherEvent.point, [153, 203.5], '3');
+
+ e = q.pop();
+ assert.deepEqual(e.point, [100.79403384562251, 233.41363754101192]);
+ assert.deepEqual(e.otherEvent.point, [153, 294.5], '4');
+ });
+
+ it('possible intersections on 2 polygons', () => {
+ const s = [subject.geometry.coordinates] as MultiPolygon;
+ const c = [clipping.geometry.coordinates] as MultiPolygon;
+
+ 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);
+ te.otherEvent = te2;
+
+ const te3 = new SweepEvent(p0, true, null, true);
+ const te4 = new SweepEvent(p2, true, te3, false);
+ te3.otherEvent = te4;
+
+ const tr = new Tree(compareSegments);
+
+ assert.ok(tr.insert(te), 'insert');
+ assert.ok(tr.insert(te3), 'insert');
+
+ assert.equal(tr.find(te).key, te);
+ assert.equal(tr.find(te3).key, te3);
+
+ assert.equal(compareSegments(te, te3), 1);
+ assert.equal(compareSegments(te3, te), -1);
+
+ const segments = subdivideSegments(q, bbox, bbox, 0);
+ const leftSegments: SweepEvent[] = [];
+ for (let i = 0; i < segments.length; i++) {
+ if (segments[i].left) {
+ leftSegments.push(segments[i]);
+ }
+ }
+
+ assert.equal(leftSegments.length, 11);
+
+ const E = [16, 282];
+ const I = [100.79403384562252, 233.41363754101192];
+ const G = [298, 359];
+ const C = [153, 294.5];
+ const J = [203.36313843035356, 257.5101243166895];
+ const F = [153, 203.5];
+ const D = [56, 181];
+ const A = [108.5, 120];
+ const B = [241.5, 229.5];
+
+ const intervals = {
+ EI: {
+ l: E,
+ r: I,
+ inOut: false,
+ otherInOut: true,
+ inResult: false,
+ prevInResult: null
+ },
+ IF: {
+ l: I,
+ r: F,
+ inOut: false,
+ otherInOut: false,
+ inResult: true,
+ prevInResult: null
+ },
+ FJ: {
+ l: F,
+ r: J,
+ inOut: false,
+ otherInOut: false,
+ inResult: true,
+ prevInResult: null
+ },
+ JG: {
+ l: J,
+ r: G,
+ inOut: false,
+ otherInOut: true,
+ inResult: false,
+ prevInResult: null
+ },
+ EG: {
+ l: E,
+ r: G,
+ inOut: true,
+ otherInOut: true,
+ inResult: false,
+ prevInResult: null
+ },
+ DA: {
+ l: D,
+ r: A,
+ inOut: false,
+ otherInOut: true,
+ inResult: false,
+ prevInResult: null
+ },
+ AB: {
+ l: A,
+ r: B,
+ inOut: false,
+ otherInOut: true,
+ inResult: false,
+ prevInResult: null
+ },
+ JB: {
+ l: J,
+ r: B,
+ inOut: true,
+ otherInOut: true,
+ inResult: false,
+ prevInResult: null
+ },
+
+ CJ: {
+ l: C,
+ r: J,
+ inOut: true,
+ otherInOut: false,
+ inResult: true,
+ prevInResult: {
+ l: F,
+ r: J,
+ prevInResult: null
+ }
+ },
+ IC: {
+ l: I,
+ r: C,
+ inOut: true,
+ otherInOut: false,
+ inResult: true,
+ prevInResult: {
+ l: I,
+ r: F,
+ prevInResult: null
+ }
+ },
+
+ DI: {
+ l: D,
+ r: I,
+ inOut: true,
+ otherInOut: true,
+ inResult: false,
+ prevInResult: null
+ }
+ };
+
+ function checkContain(interval) {
+ 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) ||
+ (equals(seg.prevInResult!.point, data.prevInResult.l) &&
+ equals(seg.prevInResult!.otherEvent.point, data.prevInResult.r)))
+ ) {
+ assert.ok(interval);
+ return;
+ }
+ }
+ assert.fail(interval);
+ }
+
+ Object.keys(intervals).forEach((key) => checkContain(key));
+ });
+});
diff --git a/test/featureTypes.test.js b/test/featureTypes.test.js
deleted file mode 100644
index 0797f45..0000000
--- a/test/featureTypes.test.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import tap from 'tape';
-import path from 'path';
-import load from 'load-json-file';
-import * as martinez from '../index';
-
-const clipping = load.sync(path.join(__dirname, 'featureTypes', 'clippingPoly.geojson'));
-const outDir = path.join(__dirname, 'featureTypes', 'out');
-
-const testScenarios = [
- {
- testName: 'polyToClipping',
- subjectPoly: 'poly',
- },
- {
- testName: 'polyWithHoleToClipping',
- subjectPoly: 'polyWithHole',
- },
- {
- testName: 'multiPolyToClipping',
- subjectPoly: 'multiPoly',
- },
- {
- testName: 'multiPolyWithHoleToClipping',
- subjectPoly: 'multiPolyWithHole',
- }
-];
-
-testScenarios.forEach((ts) => {
- 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 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 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/featureTypes.test.ts b/test/featureTypes.test.ts
new file mode 100644
index 0000000..d9779d7
--- /dev/null
+++ b/test/featureTypes.test.ts
@@ -0,0 +1,102 @@
+import { test, assert } from 'vitest';
+import path from 'path';
+import load from 'load-json-file';
+import * as martinez from '../src';
+
+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 = [
+ {
+ testName: 'polyToClipping',
+ subjectPoly: 'poly'
+ },
+ {
+ testName: 'polyWithHoleToClipping',
+ subjectPoly: 'polyWithHole'
+ },
+ {
+ testName: 'multiPolyToClipping',
+ subjectPoly: 'multiPoly'
+ },
+ {
+ testName: 'multiPolyWithHoleToClipping',
+ subjectPoly: 'multiPolyWithHole'
+ }
+];
+
+testScenarios.forEach((ts) => {
+ const subject = load.sync(path.join(rootPath, ts.subjectPoly + '.geojson'));
+ const name = ts.testName;
+ test(ts.testName, () => {
+ const expectedIntResult = load.sync(
+ path.join(outDir, 'intersection', name + '.geojson')
+ );
+ if (expectedIntResult.geometry.type === 'Polygon')
+ expectedIntResult.geometry.coordinates = [
+ expectedIntResult.geometry.coordinates
+ ];
+ const intResult = martinez.intersection(
+ subject.geometry.coordinates,
+ clipping.geometry.coordinates
+ );
+ assert.deepEqual(
+ intResult,
+ expectedIntResult.geometry.coordinates,
+ ts.testName + ' - Intersect'
+ );
+
+ const expectedXorResult = load.sync(
+ path.join(outDir, 'xor', name + '.geojson')
+ );
+ if (expectedXorResult.geometry.type === 'Polygon')
+ expectedXorResult.geometry.coordinates = [
+ expectedXorResult.geometry.coordinates
+ ];
+ const xorResult = martinez.xor(
+ subject.geometry.coordinates,
+ clipping.geometry.coordinates
+ );
+ assert.deepEqual(
+ xorResult,
+ expectedXorResult.geometry.coordinates,
+ ts.testName + ' - XOR'
+ );
+
+ const expectedDiffResult = load.sync(
+ path.join(outDir, 'difference', name + '.geojson')
+ );
+ if (expectedDiffResult.geometry.type === 'Polygon')
+ expectedDiffResult.geometry.coordinates = [
+ expectedDiffResult.geometry.coordinates
+ ];
+ const diffResult = martinez.diff(
+ subject.geometry.coordinates,
+ clipping.geometry.coordinates
+ );
+ assert.deepEqual(
+ diffResult,
+ expectedDiffResult.geometry.coordinates,
+ ts.testName + ' - Difference'
+ );
+
+ const expectedUnionResult = load.sync(
+ path.join(outDir, 'union', name + '.geojson')
+ );
+ if (expectedUnionResult.geometry.type === 'Polygon')
+ expectedUnionResult.geometry.coordinates = [
+ expectedUnionResult.geometry.coordinates
+ ];
+ const unionResult = martinez.union(
+ subject.geometry.coordinates,
+ clipping.geometry.coordinates
+ );
+ assert.deepEqual(
+ unionResult,
+ expectedUnionResult.geometry.coordinates,
+ ts.testName + ' - Union'
+ );
+ });
+});
diff --git a/test/genericTestCases.test.js b/test/genericTestCases.test.js
deleted file mode 100644
index ceae7f8..0000000
--- a/test/genericTestCases.test.js
+++ /dev/null
@@ -1,84 +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 '../index';
-
-
-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..f20b302
--- /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(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';
+}
+
+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));
+ }
+ });
+ });
+});
diff --git a/test/index.test.js b/test/index.test.js
deleted file mode 100644
index 92c4c14..0000000
--- a/test/index.test.js
+++ /dev/null
@@ -1,161 +0,0 @@
-import tap from 'tape';
-import path from 'path';
-import load from 'load-json-file';
-import martinez from '../';
-import fillQueue from '../src/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..cb5fa8d
--- /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(process.cwd(), 'test', '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');
+ });
+});
diff --git a/test/segment_intersection.test.js b/test/segment_intersection.test.js
deleted file mode 100644
index 8b3a56f..0000000
--- a/test/segment_intersection.test.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import tap from 'tape';
-import intersection from '../src/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], [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], [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], [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([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], [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.end();
-});
diff --git a/test/segment_intersection.test.ts b/test/segment_intersection.test.ts
new file mode 100644
index 0000000..d9cee5b
--- /dev/null
+++ b/test/segment_intersection.test.ts
@@ -0,0 +1,144 @@
+import { expect, test } from 'vitest';
+import intersection from '../src/segment_intersection';
+
+test('intersection', (t) => {
+ expect(
+ intersection([0, 0], [1, 1], [1, 0], [2, 2], false),
+ 'null if no intersections'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [1, 0], [10, 2], false),
+ 'null if no intersections'
+ ).toBeNull();
+
+ expect(
+ intersection([2, 2], [3, 3], [0, 6], [2, 4], false),
+ 'null if no intersections'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [1, 0], [0, 1], false),
+ '1 intersection'
+ ).toStrictEqual([[0.5, 0.5]]);
+
+ expect(
+ intersection([0, 0], [1, 1], [0, 1], [0, 0], false),
+ 'shared point 1'
+ ).toStrictEqual([[0, 0]]);
+
+ expect(
+ intersection([0, 0], [1, 1], [0, 1], [1, 1], false),
+ 'shared point 2'
+ ).toStrictEqual([[1, 1]]);
+
+ expect(
+ intersection([0, 0], [1, 1], [0.5, 0.5], [1, 0], false),
+ 'T-crossing'
+ ).toStrictEqual([[0.5, 0.5]]);
+
+ expect(
+ intersection([0, 0], [10, 10], [1, 1], [5, 5], false),
+ 'full overlap'
+ ).toStrictEqual([
+ [1, 1],
+ [5, 5]
+ ]);
+
+ expect(
+ intersection([1, 1], [10, 10], [1, 1], [5, 5], false),
+ 'shared point + overlap'
+ ).toStrictEqual([
+ [1, 1],
+ [5, 5]
+ ]);
+
+ expect(
+ intersection([3, 3], [10, 10], [0, 0], [5, 5], false),
+ 'mutual overlap'
+ ).toStrictEqual([
+ [3, 3],
+ [5, 5]
+ ]);
+
+ expect(
+ intersection([0, 0], [1, 1], [0, 0], [1, 1], false),
+ 'full overlap'
+ ).toStrictEqual([
+ [0, 0],
+ [1, 1]
+ ]);
+
+ expect(
+ intersection([1, 1], [0, 0], [0, 0], [1, 1], false),
+ 'full overlap, orientation'
+ ).toStrictEqual([
+ [1, 1],
+ [0, 0]
+ ]);
+
+ expect(
+ intersection([0, 0], [1, 1], [1, 1], [2, 2], false),
+ 'collinear, shared point'
+ ).toStrictEqual([[1, 1]]);
+
+ expect(
+ intersection([1, 1], [0, 0], [1, 1], [2, 2], false),
+
+ 'collinear, shared other point'
+ ).toStrictEqual([[1, 1]]);
+ expect(
+ intersection([0, 0], [1, 1], [2, 2], [4, 4], false),
+ 'collinear, no overlap'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [0, -1], [1, 0], false),
+ 'parallel'
+ ).toBeNull();
+
+ expect(
+ intersection([1, 1], [0, 0], [0, -1], [1, 0], false),
+ 'parallel, orientation'
+ ).toBeNull();
+
+ expect(
+ intersection([0, -1], [1, 0], [0, 0], [1, 1], false),
+ 'parallel, position'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [0, 1], [0, 0], true),
+ 'shared point 1, skip touches'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [0, 1], [1, 1], true),
+ 'shared point 2, skip touches'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [1, 1], [2, 2], true),
+ 'collinear, shared point, skip touches'
+ ).toBeNull();
+
+ expect(
+ intersection([1, 1], [0, 0], [1, 1], [2, 2], true),
+ 'collinear, shared other point, skip touches'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [0, 0], [1, 1], true),
+ 'full overlap, skip touches'
+ ).toBeNull();
+
+ expect(
+ intersection([1, 1], [0, 0], [0, 0], [1, 1], true),
+ 'full overlap, orientation, skip touches'
+ ).toBeNull();
+
+ expect(
+ intersection([0, 0], [1, 1], [1, 0], [0, 1], true),
+ '1 intersection, skip touches'
+ ).toStrictEqual([[0.5, 0.5]]);
+});
diff --git a/test/signed_area.test.js b/test/signed_area.test.js
deleted file mode 100644
index 548865a..0000000
--- a/test/signed_area.test.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import tap from 'tape';
-import signedArea from '../src/signed_area';
-
-tap.test('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/test/signed_area.test.ts b/test/signed_area.test.ts
new file mode 100644
index 0000000..f07303a
--- /dev/null
+++ b/test/signed_area.test.ts
@@ -0,0 +1,13 @@
+import { assert, describe, expect, it } from 'vitest';
+import signedArea from '../src/signed_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);
+
+ 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/test/sweep_event.test.js b/test/sweep_event.test.js
deleted file mode 100644
index da738fa..0000000
--- a/test/sweep_event.test.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import tap from 'tape';
-import SweepEvent from '../src/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()
+ );
+ });
+});
diff --git a/test/sweep_line.test.js b/test/sweep_line.test.js
deleted file mode 100644
index dab5f94..0000000
--- a/test/sweep_line.test.js
+++ /dev/null
@@ -1,58 +0,0 @@
-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';
-
-// 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('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);
- EF.name = 'EF';
- 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');
-
- let it = tree.find(EF);
-
- t.equals(tree.next(it).key, EG);
-
- it = tree.find(EG);
-
- 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);
-
- tree.insert(DA);
- tree.insert(DC);
-
- let begin = tree.minNode();
-
- t.equals(begin.key, DA, 'DA');
- begin = tree.next(begin);
- t.equals(begin.key, DC, 'DC');
- begin = tree.next(begin);
- t.equals(begin.key, EF, 'EF');
- begin = tree.next(begin);
- t.equals(begin.key, EG, 'EG');
-
- t.end();
-});
diff --git a/test/sweep_line.test.ts b/test/sweep_line.test.ts
new file mode 100644
index 0000000..dc2f149
--- /dev/null
+++ b/test/sweep_line.test.ts
@@ -0,0 +1,78 @@
+import { test, assert } from 'vitest';
+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';
+
+// GeoJSON Data
+const data = load.sync(
+ path.join(process.cwd(), 'test', 'fixtures', 'two_triangles.geojson')
+);
+
+const subject = data.features[0];
+const clipping = data.features[1];
+
+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, null, false),
+ true
+ );
+ // @ts-ignore
+ EF.name = 'EF';
+ const EG = new SweepEvent(
+ s[0][0],
+ true,
+ 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);
+
+ 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 iter = tree.find(EF);
+
+ assert.equal(tree.next(iter)!.key, EG);
+
+ iter = tree.find(EG);
+
+ assert.equal(tree.prev(iter)!.key, EF);
+
+ const DA = new SweepEvent(
+ c[0][0],
+ true,
+ new SweepEvent(c[0][2], false, null, false),
+ true
+ );
+ const DC = new SweepEvent(
+ c[0][0],
+ true,
+ new SweepEvent(c[0][1], false, null, false),
+ true
+ );
+
+ tree.insert(DA);
+ tree.insert(DC);
+
+ let begin = tree.minNode();
+
+ assert.equal(begin.key, DA, 'DA');
+ begin = tree.next(begin);
+ assert.equal(begin.key, DC, 'DC');
+ begin = tree.next(begin);
+ assert.equal(begin.key, EF, 'EF');
+ begin = tree.next(begin);
+ assert.equal(begin.key, EG, 'EG');
+});
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)
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..eb1956f
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "ES2016",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ESNext", "DOM"],
+ "moduleResolution": "Node",
+ "strict": true,
+ "sourceMap": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "noEmit": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noImplicitReturns": true,
+ "skipLibCheck": true
+ },
+ "include": ["src"]
+}
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..12b70fd
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,20 @@
+// 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`,
+ formats: ['umd', 'cjs', 'esm']
+ },
+ target: 'es2015'
+ },
+ test: {
+ dir: resolve(__dirname, 'test'),
+ include: ['**/*.test.ts']
+ },
+ mode: 'development'
+});
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.html b/web/index.html
new file mode 100644
index 0000000..8129f38
--- /dev/null
+++ b/web/index.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ Martinez Clipping
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/index.ts b/web/index.ts
new file mode 100644
index 0000000..81498b4
--- /dev/null
+++ b/web/index.ts
@@ -0,0 +1,329 @@
+import L from 'leaflet';
+import * as jsts from 'jsts';
+import 'leaflet-editable';
+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 = '/';
+const ext = '.geojson';
+let file;
+
+let files = [
+ 'asia',
+ //'asia_unionPoly',
+ 'canada',
+ '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',
+ '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) {
+ 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;
+}
+
+const OPERATIONS = martinez.operations;
+
+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
+const 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());
+
+// 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).name(operation);
+});
+gui
+ .add(state, 'files', files)
+ .name('Source')
+ .onChange((e) => {
+ clear();
+ loadData(path + e + '.geojson');
+ });
+gui.add(state, 'clear').name('Clear');
+
+// @ts-ignore
+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 });
+ });
+}
+
+function clear() {
+ drawnItems.clearLayers();
+ results.clearLayers();
+ rawData = null;
+}
+
+const reader = new jsts.io.GeoJSONReader();
+const 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();
+}
+
+type valueOf = T[keyof T];
+
+function run(op: valueOf) {
+ console.trace('run run');
+ var layers = drawnItems.getLayers();
+ if (layers.length < 2) return;
+ // @ts-ignore
+ let subject = rawData !== null ? rawData.features[0] : layers[0].toGeoJSON();
+ let 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) {
+ // @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);
+
+ setTimeout(() => {
+ console.time('mfogel');
+ var result = mfogel.union(
+ subject.geometry.coordinates,
+ clipping.geometry.coordinates
+ );
+ console.timeEnd('mfogel');
+ // console.log('martinez result', result);
+ });
+ }
+}
+
+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));
+
+// @ts-ignore
+loadData(path + gui.__controllers[0].object.files + '.geojson');
diff --git a/web/orthogonal.html b/web/orthogonal.html
new file mode 100644
index 0000000..2efa371
--- /dev/null
+++ b/web/orthogonal.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+ Martinez Clipping
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/js/coordinates.js b/web/src/coordinates.ts
similarity index 50%
rename from demo/js/coordinates.js
rename to web/src/coordinates.ts
index 2b4c367..dc8b3ae 100644
--- a/demo/js/coordinates.js
+++ b/web/src/coordinates.ts
@@ -1,20 +1,23 @@
import L from 'leaflet';
-L.Coordinates = L.Control.extend({
+export const CoordinatesControl = L.Control.extend({
options: {
position: 'bottomright'
},
- onAdd: function(map) {
+ 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) + '';
+ _onMouseMove: function (e) {
+ this._container.innerHTML =
+ '' +
+ e.latlng.lng.toFixed(3) +
+ ', ' +
+ e.latlng.lat.toFixed(3) +
+ '';
}
-
});
diff --git a/web/src/index.ts b/web/src/index.ts
new file mode 100644
index 0000000..1ae09bc
--- /dev/null
+++ b/web/src/index.ts
@@ -0,0 +1,2 @@
+export * from './coordinates';
+export * from './polygoncontrol';
diff --git a/web/src/polygoncontrol.ts b/web/src/polygoncontrol.ts
new file mode 100644
index 0000000..d493595
--- /dev/null
+++ b/web/src/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/styles.css b/web/styles.css
new file mode 100644
index 0000000..cf7f3f7
--- /dev/null
+++ b/web/styles.css
@@ -0,0 +1,22 @@
+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;
+}
+
+.dg.ac {
+ z-index: 900 !important;
+}
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
+ }
+}
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')
+});