diff --git a/README.md b/README.md
index 28898eb..c1fbd19 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ This project aims to bring the mathematical chops of [NumPy](https://numpy.org/)
- Make the API familiar (e.g., `createTensor()`).
- Encourage all kinds of contributions.
-The library is written in [TypeScript](http://www.typescriptlang.org/) and uses [TensorFlow.js](https://js.tensorflow.org/api/latest/), [Danfo.js](https://danfo.jsdata.org/), and [Math.js](https://mathjs.org/) under the hood. It bundles [ml5.js](https://ml5js.org/) to handle machine learning.
+The library is written in [TypeScript](http://www.typescriptlang.org/) and uses [TensorFlow.js](https://js.tensorflow.org/api/latest/) and [Math.js](https://mathjs.org/) under the hood. It bundles [ml5.js](https://ml5js.org/) for machine learning and [TurtleGFX](https://github.com/CodeGuppyPrograms/TurtleGFX) for drawing with turtles.
## Usage
diff --git a/examples/dataframe-neuralnetwork/index.html b/examples/dataframe-neuralnetwork/index.html
deleted file mode 100644
index 4dc989c..0000000
--- a/examples/dataframe-neuralnetwork/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- DataFrame + NeuralNetwork Example
-
-
-
-
-
-
-
-
diff --git a/examples/dataframe-neuralnetwork/sketch.js b/examples/dataframe-neuralnetwork/sketch.js
deleted file mode 100644
index fffba36..0000000
--- a/examples/dataframe-neuralnetwork/sketch.js
+++ /dev/null
@@ -1,78 +0,0 @@
-function preload() {
- // Step 1: load data
- loadDataFrame('https://assets.computiful.org/pre-alpha/who_life_expectancy.csv', 'csv', callback, errorCallback);
-}
-
-function callback(df) {
- // Step 2: transform and visualize
- df = df.query({column: 'Country', is: '==', to: 'Kenya'});
- df = df.dropna({ axis: 0 });
- let plotDiv = createDiv();
- plotDiv.id('plot_div');
- df.plot("plot_div").scatter({
- x: 'Schooling',
- y: 'Life expectancy',
- });
- df.to_json().then((json) => {
- // Step 3: set your neural network options
- const options = {
- task: 'regression',
- debug: true,
- };
-
- // Step 4: initialize your neural network
- const nn = ml5.neuralNetwork(options);
-
- // Step 5: add data to the neural network
- JSON.parse(json).forEach((item) => {
- const input = {
- schooling: item['Schooling'],
- };
- const output = {
- life_expectancy: item['Life expectancy'],
- };
-
- nn.addData(input, output);
- });
-
- // Step 6: normalize your data
- nn.normalizeData();
-
- // Step 7: train your neural network
- const trainingOptions = {
- epochs: 32,
- batchSize: 12,
- };
- nn.train(trainingOptions, finishedTraining);
-
- // Step 8: use the trained model
- function finishedTraining() {
- predict();
- }
-
- // Step 9: make a prediction
- function predict() {
- const input = {
- schooling: 5,
- };
- nn.predict(input, handleResults);
- }
-
- // Step 10: define a function to handle the results of your classification
- function handleResults(error, result) {
- if (error) {
- console.error(error);
- return;
- }
- console.log(result); // { label: 'life_expectancy', value: 79.7 };
- }
- });
-}
-
-function errorCallback(error) {
- console.error(error);
-}
-
-function setup() {
- noCanvas();
-}
diff --git a/examples/dataframe/index.html b/examples/dataframe/index.html
deleted file mode 100644
index 741eacf..0000000
--- a/examples/dataframe/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- DataFrame Example
-
-
-
-
-
-
-
diff --git a/examples/dataframe/sketch.js b/examples/dataframe/sketch.js
deleted file mode 100644
index 548bffb..0000000
--- a/examples/dataframe/sketch.js
+++ /dev/null
@@ -1,12 +0,0 @@
-function setup() {
- print('=== JSON-based DataFrame ===');
-
- const json_data = [
- { A: 0.4612, B: 4.28283, C: -1.509, D: -1.1352 },
- { A: 0.5112, B: -0.22863, C: -3.39059, D: 1.1632 },
- { A: 0.6911, B: -0.82863, C: -1.5059, D: 2.1352 },
- { A: 0.4692, B: -1.28863, C: 4.5059, D: 4.1632 }
- ];
- const df = createDataFrame(json_data);
- df.print();
-}
diff --git a/karma.conf.js b/karma.conf.js
new file mode 100644
index 0000000..12d3c05
--- /dev/null
+++ b/karma.conf.js
@@ -0,0 +1,19 @@
+module.exports = function(config) {
+ config.set({
+ frameworks: ['mocha', 'chai'],
+ files: [
+ 'node_modules/p5/lib/p5.min.js',
+ 'dist/numero.js',
+ 'test/**/*.js'
+ ],
+ reporters: ['progress'],
+ port: 9876, // karma web server port
+ colors: true,
+ logLevel: config.LOG_INFO,
+ browsers: ['ChromeHeadless'],
+ autoWatch: false,
+ // singleRun: false, // Karma captures browsers, runs the tests and exits
+ concurrency: Infinity
+ })
+ }
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index e5ce489..3bafeeb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,82 +4,12 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
- "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
- "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
- "dev": true,
+ "@babel/runtime": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz",
+ "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==",
"requires": {
- "@babel/helper-validator-identifier": "^7.12.11",
- "chalk": "^2.0.0",
- "js-tokens": "^4.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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "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"
- }
- }
+ "regenerator-runtime": "^0.13.4"
}
},
"@blakeembrey/deque": {
@@ -87,32 +17,29 @@
"resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz",
"integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg=="
},
+ "@discoveryjs/json-ext": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz",
+ "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==",
+ "dev": true
+ },
"@eslint/eslintrc": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz",
- "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
+ "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^12.1.0",
+ "debug": "^4.3.2",
+ "espree": "^9.2.0",
+ "globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -121,6 +48,23 @@
}
}
},
+ "@humanwhocodes/config-array": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
+ "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@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
+ },
"@magenta/sketch": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@magenta/sketch/-/sketch-0.2.0.tgz",
@@ -129,6 +73,38 @@
"@tensorflow/tfjs": "^1.0.2"
}
},
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@socket.io/base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
+ "dev": true
+ },
"@tensorflow-models/blazeface": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@tensorflow-models/blazeface/-/blazeface-0.0.5.tgz",
@@ -178,9 +154,9 @@
"integrity": "sha512-MrMlDEDHkZPKuZawQb1E2Hof1m2ojZrOW1EAVnvZ1Jn+cPmDJz+X3hokYLC3P+UBUq+tAYq1vU0Byt9SbyGWbg=="
},
"@tensorflow-models/universal-sentence-encoder": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@tensorflow-models/universal-sentence-encoder/-/universal-sentence-encoder-1.3.2.tgz",
- "integrity": "sha512-BhkKsFSwyps8JJQIlQPKyY9WdBsSW0H/DuZIecfECvOXrPOgLYECINMI46TFDs1L70+6bNS3FXzw08qAttWmAw=="
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@tensorflow-models/universal-sentence-encoder/-/universal-sentence-encoder-1.3.3.tgz",
+ "integrity": "sha512-mipL7ad0CW6uQ68FUkNgkNj/zgA4qgBnNcnMMkNTdL9MUMnzCxu3AE8pWnx2ReKHwdqEG4e8IpaYKfH4B8bojg=="
},
"@tensorflow/tfjs": {
"version": "1.7.4",
@@ -191,53 +167,17 @@
"@tensorflow/tfjs-core": "1.7.4",
"@tensorflow/tfjs-data": "1.7.4",
"@tensorflow/tfjs-layers": "1.7.4"
- },
- "dependencies": {
- "@tensorflow/tfjs-converter": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.7.4.tgz",
- "integrity": "sha512-B/Ux9I3osI0CXoESGR0Xe5C6BsEfC04+g2xn5zVaW9KEuVEnGEgnuBQxgijRFzkqTwoyLv4ptAmjyIghVARX0Q=="
- },
- "@tensorflow/tfjs-core": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.7.4.tgz",
- "integrity": "sha512-3G4VKJ6nPs7iCt6gs3bjRj8chihKrYWenf63R0pm7D9MhlrVoX/tpN4LYVMGgBL7jHPxMLKdOkoAZJrn/J88HQ==",
- "requires": {
- "@types/offscreencanvas": "~2019.3.0",
- "@types/seedrandom": "2.4.27",
- "@types/webgl-ext": "0.0.30",
- "@types/webgl2": "0.0.4",
- "node-fetch": "~2.1.2",
- "seedrandom": "2.4.3"
- }
- },
- "@tensorflow/tfjs-data": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.7.4.tgz",
- "integrity": "sha512-WFYG9wWjNDi62x6o3O20Q0XJxToCw2J4/fBEXiK/Gr0hIqVhl2oLQ1OjTWq7O08NUxM6BRzuG+ra3gWYdQUzOw==",
- "requires": {
- "@types/node-fetch": "^2.1.2",
- "node-fetch": "~2.1.2"
- }
- },
- "@tensorflow/tfjs-layers": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.7.4.tgz",
- "integrity": "sha512-5/K8Z8RBfXsucL6EaSeb3/8jB/I8oPaaXkxwKVsBPQ+u6lB6LEtSKzeiFc57nDr5OMtVaUZV+pKDNEzP0RUQlg=="
- }
}
},
"@tensorflow/tfjs-converter": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.7.4.tgz",
- "integrity": "sha512-B/Ux9I3osI0CXoESGR0Xe5C6BsEfC04+g2xn5zVaW9KEuVEnGEgnuBQxgijRFzkqTwoyLv4ptAmjyIghVARX0Q==",
- "dev": true
+ "integrity": "sha512-B/Ux9I3osI0CXoESGR0Xe5C6BsEfC04+g2xn5zVaW9KEuVEnGEgnuBQxgijRFzkqTwoyLv4ptAmjyIghVARX0Q=="
},
"@tensorflow/tfjs-core": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.7.4.tgz",
"integrity": "sha512-3G4VKJ6nPs7iCt6gs3bjRj8chihKrYWenf63R0pm7D9MhlrVoX/tpN4LYVMGgBL7jHPxMLKdOkoAZJrn/J88HQ==",
- "dev": true,
"requires": {
"@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27",
@@ -247,6 +187,20 @@
"seedrandom": "2.4.3"
}
},
+ "@tensorflow/tfjs-data": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.7.4.tgz",
+ "integrity": "sha512-WFYG9wWjNDi62x6o3O20Q0XJxToCw2J4/fBEXiK/Gr0hIqVhl2oLQ1OjTWq7O08NUxM6BRzuG+ra3gWYdQUzOw==",
+ "requires": {
+ "@types/node-fetch": "^2.1.2",
+ "node-fetch": "~2.1.2"
+ }
+ },
+ "@tensorflow/tfjs-layers": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.7.4.tgz",
+ "integrity": "sha512-5/K8Z8RBfXsucL6EaSeb3/8jB/I8oPaaXkxwKVsBPQ+u6lB6LEtSKzeiFc57nDr5OMtVaUZV+pKDNEzP0RUQlg=="
+ },
"@tensorflow/tfjs-vis": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-vis/-/tfjs-vis-1.5.1.tgz",
@@ -262,9 +216,9 @@
}
},
"@types/chai": {
- "version": "4.2.16",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.16.tgz",
- "integrity": "sha512-vI5iOAsez9+roLS3M3+Xx7w+WRuDtSmF8bQkrbcIJ2sC1PcDgVoA0WGpa+bIrJ+y8zqY2oi//fUctkxtIcXJCw==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz",
+ "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
"dev": true
},
"@types/clone": {
@@ -272,16 +226,56 @@
"resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
"integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ="
},
- "@types/eslint-visitor-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
- "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
+ "@types/component-emitter": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
+ "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==",
+ "dev": true
+ },
+ "@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
+ "dev": true
+ },
+ "@types/cors": {
+ "version": "2.8.12",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
+ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
"dev": true
},
+ "@types/eslint": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.0.tgz",
+ "integrity": "sha512-JUYa/5JwoqikCy7O7jKtuNe9Z4ZZt615G+1EKfaDGSNEpzaA2OwbV/G1v08Oa7fd1XzlFoSCvt9ePl9/6FyAug==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.50",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
+ "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw=="
+ },
"@types/fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha512-mky/O83TXmGY39P1H9YbUpjV6l6voRYlufqfFCvel8l1phuy8HRjdWc1rrPuN53ITBJlbyMSV6z3niOySO5pgQ=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-IyNhGHu71jH1jCXTHmafuoAAdsbBON3kDh7u/UUhLmjYgN5TYB54e1R8ckTCiIevl2UuZaCsi9XRxineY5yUjw==",
+ "requires": {
+ "fast-json-stable-stringify": "*"
+ }
},
"@types/json-schema": {
"version": "7.0.7",
@@ -296,18 +290,18 @@
"dev": true
},
"@types/mathjs": {
- "version": "6.0.11",
- "resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-6.0.11.tgz",
- "integrity": "sha512-q9B8ZreO41L38iTY76bCZEtAqzeRs4mNIOZpZ1sLSlcYgvgfFrnf8y8qfmas0tVWrsODjmQbQJFD6RJJJCqJbQ==",
+ "version": "9.4.2",
+ "resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-9.4.2.tgz",
+ "integrity": "sha512-GF5g1vJmvKdWIWsE53XX7EDAyCaZ9p6gaYm1xhlXn5JjrY/NJrOfJN3fBxS3wyZpVh3QqKoMkS2WjFwxWMHOTw==",
"dev": true,
"requires": {
- "decimal.js": "^10.0.0"
+ "mathjs": "*"
}
},
"@types/mocha": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz",
- "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz",
+ "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==",
"dev": true
},
"@types/node": {
@@ -316,9 +310,9 @@
"integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g=="
},
"@types/node-fetch": {
- "version": "2.5.10",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz",
- "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==",
+ "version": "2.5.12",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
+ "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
"requires": {
"@types/node": "*",
"form-data": "^3.0.0"
@@ -330,9 +324,9 @@
"integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q=="
},
"@types/p5": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/@types/p5/-/p5-0.9.1.tgz",
- "integrity": "sha512-4glOKdqdBiRWDFZwi/MjHudPV2U4t2L4fTTSacGapfFxyNXzZcAshAjqmrJkCIZcFlhRBEAL7AM95xRDMfrIwg==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@types/p5/-/p5-1.3.3.tgz",
+ "integrity": "sha512-PBSFnX6IgV6Pqlx9wocUjSkGlm1I1ymz9tEiTbdNCqig6FOGiWcVUHx13TXRTBfRIhZC9+MqqgztMsgzpueaUg==",
"dev": true
},
"@types/seedrandom": {
@@ -351,74 +345,269 @@
"integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw=="
},
"@typescript-eslint/eslint-plugin": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz",
- "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz",
+ "integrity": "sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "3.10.1",
- "debug": "^4.1.1",
+ "@typescript-eslint/scope-manager": "5.10.0",
+ "@typescript-eslint/type-utils": "5.10.0",
+ "@typescript-eslint/utils": "5.10.0",
+ "debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
- "regexpp": "^3.0.0",
- "semver": "^7.3.2",
- "tsutils": "^3.17.1"
+ "ignore": "^5.1.8",
+ "regexpp": "^3.2.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ }
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.0.tgz",
+ "integrity": "sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.10.0",
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/typescript-estree": "5.10.0",
+ "debug": "^4.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ }
}
},
- "@typescript-eslint/experimental-utils": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz",
- "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==",
+ "@typescript-eslint/scope-manager": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz",
+ "integrity": "sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.3",
- "@typescript-eslint/types": "3.10.1",
- "@typescript-eslint/typescript-estree": "3.10.1",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^2.0.0"
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/visitor-keys": "5.10.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/types": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz",
+ "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==",
+ "dev": true
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz",
+ "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.10.0",
+ "eslint-visitor-keys": "^3.0.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
+ "dev": true
+ }
}
},
- "@typescript-eslint/parser": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz",
- "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==",
+ "@typescript-eslint/type-utils": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz",
+ "integrity": "sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ==",
"dev": true,
"requires": {
- "@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "3.10.1",
- "@typescript-eslint/types": "3.10.1",
- "@typescript-eslint/typescript-estree": "3.10.1",
- "eslint-visitor-keys": "^1.1.0"
+ "@typescript-eslint/utils": "5.10.0",
+ "debug": "^4.3.2",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ }
}
},
"@typescript-eslint/types": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz",
- "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz",
+ "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz",
- "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz",
+ "integrity": "sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "3.10.1",
- "@typescript-eslint/visitor-keys": "3.10.1",
- "debug": "^4.1.1",
- "glob": "^7.1.6",
- "is-glob": "^4.0.1",
- "lodash": "^4.17.15",
- "semver": "^7.3.2",
- "tsutils": "^3.17.1"
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/visitor-keys": "5.10.0",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "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"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.0.tgz",
+ "integrity": "sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.10.0",
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/typescript-estree": "5.10.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ },
+ "dependencies": {
+ "@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "dev": true
+ },
+ "@typescript-eslint/types": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz",
+ "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz",
+ "integrity": "sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/visitor-keys": "5.10.0",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz",
+ "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.10.0",
+ "eslint-visitor-keys": "^3.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "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": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "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"
+ }
+ }
}
},
"@typescript-eslint/visitor-keys": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz",
- "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz",
+ "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.1.0"
+ "@typescript-eslint/types": "5.10.0",
+ "eslint-visitor-keys": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
+ "dev": true
+ }
}
},
"@ungap/promise-all-settled": {
@@ -428,180 +617,172 @@
"dev": true
},
"@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+ "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
"dev": true,
"requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
+ "@webassemblyjs/helper-numbers": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
}
},
"@webassemblyjs/floating-point-hex-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
- "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
"dev": true
},
"@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+ "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
"dev": true
},
"@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "@webassemblyjs/helper-code-frame": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
- "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/helper-fsm": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
- "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+ "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
"dev": true
},
- "@webassemblyjs/helper-module-context": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
- "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+ "@webassemblyjs/helper-numbers": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+ "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+ "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
"dev": true
},
"@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+ "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1"
}
},
"@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+ "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
"dev": true,
"requires": {
"@xtuc/ieee754": "^1.2.0"
}
},
"@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+ "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
"dev": true,
"requires": {
"@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+ "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
"dev": true
},
"@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+ "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/helper-wasm-section": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-opt": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "@webassemblyjs/wast-printer": "1.11.1"
}
},
"@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+ "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
}
},
"@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+ "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1"
}
},
"@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+ "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
}
},
- "@webassemblyjs/wast-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
- "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+ "@webassemblyjs/wast-printer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+ "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/floating-point-hex-parser": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-code-frame": "1.9.0",
- "@webassemblyjs/helper-fsm": "1.9.0",
+ "@webassemblyjs/ast": "1.11.1",
"@xtuc/long": "4.2.2"
}
},
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "@webpack-cli/configtest": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz",
+ "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==",
+ "dev": true
+ },
+ "@webpack-cli/info": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz",
+ "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
+ "envinfo": "^7.7.3"
}
},
+ "@webpack-cli/serve": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz",
+ "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==",
+ "dev": true
+ },
"@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -625,36 +806,28 @@
}
},
"acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
"dev": true
},
- "acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "acorn-import-assertions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
"dev": true
},
- "adler-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
- "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
- "requires": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- }
- },
- "after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -662,12 +835,6 @@
"uri-js": "^4.2.2"
}
},
- "ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true
- },
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -681,9 +848,9 @@
"dev": true
},
"ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles": {
"version": "4.3.0",
@@ -702,86 +869,58 @@
"picomatch": "^2.0.4"
}
},
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "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
},
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
- },
- "array-flat-polyfill": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz",
- "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw=="
- },
- "array-includes": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
- "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "array-flat-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz",
+ "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw=="
+ },
+ "array-includes": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2",
+ "es-abstract": "^1.19.1",
"get-intrinsic": "^1.1.1",
- "is-string": "^1.0.5"
+ "is-string": "^1.0.7"
+ },
+ "dependencies": {
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ }
}
},
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true
},
"array.prototype.flat": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
- "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
+ "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
"dev": true,
"requires": {
- "call-bind": "^1.0.0",
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
+ "es-abstract": "^1.19.0"
}
},
- "arraybuffer.slice": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
- "dev": true
- },
"arrify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
@@ -792,241 +931,86 @@
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
- "asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
- }
- },
"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
},
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
- },
- "async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true,
- "optional": true
- },
- "async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
- "dev": true
- },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
"axios": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
- "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
+ "version": "0.21.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+ "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"requires": {
- "follow-redirects": "^1.10.0"
+ "follow-redirects": "^1.14.0"
}
},
- "backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
- "dev": true
- },
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
+ "base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "body-parser": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
+ "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.1",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.8.1",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.9.6",
+ "raw-body": "2.4.2",
+ "type-is": "~1.6.18"
},
"dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "ms": "2.0.0"
}
},
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
- "base64-arraybuffer": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
- "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
- "dev": true
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true
- },
- "base64id": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
- "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
- "dev": true
- },
- "better-assert": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
- "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
- "dev": true,
- "requires": {
- "callsite": "1.0.0"
- }
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
- },
- "bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "binpack": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/binpack/-/binpack-0.1.0.tgz",
- "integrity": "sha1-vT0JdMPyoERuF99PYLVacqIFqX4=",
- "dev": true
- },
- "blob": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
- "dev": true
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",
- "dev": true
- },
"bowser": {
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz",
@@ -1050,199 +1034,37 @@
"fill-range": "^7.0.1"
}
},
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dev": true,
- "requires": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "dev": true,
- "requires": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "requires": {
- "pako": "~1.0.5"
- }
- },
- "buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "browserslist": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
+ "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
"dev": true,
"requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
+ "caniuse-lite": "^1.0.30001286",
+ "electron-to-chromium": "^1.4.17",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
}
},
"buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "bytes": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
+ "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
"dev": true
},
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -1253,12 +1075,6 @@
"get-intrinsic": "^1.0.2"
}
},
- "callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
- "dev": true
- },
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -1270,34 +1086,11 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- }
- }
- },
- "cfb": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz",
- "integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==",
- "requires": {
- "adler-32": "~1.2.0",
- "crc-32": "~1.2.0",
- "printj": "~1.1.2"
- }
+ "caniuse-lite": {
+ "version": "1.0.30001301",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz",
+ "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==",
+ "dev": true
},
"chai": {
"version": "4.3.4",
@@ -1344,138 +1137,36 @@
"readdirp": "~3.5.0"
}
},
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
"dev": true
},
- "chrome-launcher": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.11.2.tgz",
- "integrity": "sha512-jx0kJDCXdB2ARcDMwNCtrf04oY1Up4rOmVu+fqJ5MTPOOIG8EhRcEU9NZfXZc6dMw9FU8o1r21PNp8V2M0zQ+g==",
- "dev": true,
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"requires": {
- "@types/node": "*",
- "is-wsl": "^2.1.0",
- "lighthouse-logger": "^1.0.0",
- "mkdirp": "0.5.1",
- "rimraf": "^2.6.1"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
}
},
- "chrome-remote-interface": {
- "version": "0.28.2",
- "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.28.2.tgz",
- "integrity": "sha512-F7mjof7rWvRNsJqhVXuiFU/HWySCxTA9tzpLxUJxVfdLkljwFJ1aMp08AnwXRmmP7r12/doTDOMwaNhFCJsacw==",
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+ },
+ "clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"requires": {
- "commander": "2.11.x",
- "ws": "^7.2.0"
- },
- "dependencies": {
- "commander": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
- "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
- "dev": true
- }
- }
- },
- "chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true
- },
- "chrome-unmirror": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chrome-unmirror/-/chrome-unmirror-0.1.0.tgz",
- "integrity": "sha1-6a94ukf3/7kAYCk6cgoBzSbVC6s=",
- "dev": true
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
- },
- "codepage": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
- "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
- "requires": {
- "commander": "~2.14.1",
- "exit-on-epipe": "~1.0.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.14.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
- "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
- }
- }
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
}
},
"color-convert": {
@@ -1491,6 +1182,18 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
+ "colorette": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -1504,22 +1207,10 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
"complex.js": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.12.tgz",
- "integrity": "sha512-oQX99fwL6LrTVg82gDY1dIWXy6qZRnRL35N+YhIX0N7tSwsa0KFy6IEMHTNuCW4mP7FS7MEqZ/2I/afzYwPldw=="
- },
- "component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
- "dev": true
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.15.tgz",
+ "integrity": "sha512-gDBvQU8IG139ZBQTSo2qvDFP+lANMGluM779csXOr6ny1NUtA3wkUnCFjlDNH/moAVfXtvClYt6G0zarFbtz5w=="
},
"component-emitter": {
"version": "1.3.0",
@@ -1527,89 +1218,57 @@
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
- "component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
- "dev": true
- },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
"confusing-browser-globals": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz",
- "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==",
- "dev": true
- },
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "contains-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
- "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
- "dev": true
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
"dev": true
},
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
"dev": true,
"requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
},
"dependencies": {
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "glob": "^7.1.3"
+ "ms": "2.0.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
"dev": true
},
"core-js": {
@@ -1617,64 +1276,14 @@
"resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
"integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
},
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "crc-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
- "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
- "requires": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- }
- },
- "create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"dev": true,
"requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
+ "object-assign": "^4",
+ "vary": "^1"
}
},
"cross-spawn": {
@@ -1687,25 +1296,6 @@
"which": "^2.0.1"
}
},
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
"css-in-js-utils": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz",
@@ -1715,19 +1305,10 @@
"isobject": "^3.0.1"
}
},
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
- "cyclist": {
+ "custom-event": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
"dev": true
},
"d3-array": {
@@ -1792,11 +1373,11 @@
"integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ=="
},
"d3-geo": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.1.tgz",
- "integrity": "sha512-M6yzGbFRfxzNrVhxDJXzJqSLQ90q1cCyb3EWFZ1LF4eWOBYxFypw7I/NFVBNXKNqxv1bqLathhYvdJ6DC+th3A==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.2.tgz",
+ "integrity": "sha512-8pM1WGMLGFuhq9S+FpPURxic+gKzjluCD/CHTuUF3mXMeiCo0i6R0tO1s4+GArRFde96SLcW/kOFRjoAosPsFA==",
"requires": {
- "d3-array": ">=2.5"
+ "d3-array": "^2.5.0"
}
},
"d3-geo-projection": {
@@ -1879,10 +1460,16 @@
"resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-2.0.0.tgz",
"integrity": "sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA=="
},
+ "date-format": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz",
+ "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==",
+ "dev": true
+ },
"debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dev": true,
"requires": {
"ms": "2.1.2"
@@ -1893,43 +1480,10 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
- "decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
- "dev": true,
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
- "dependencies": {
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- }
- }
- },
"decimal.js": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz",
- "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw=="
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "deep-assign": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz",
- "integrity": "sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw==",
- "dev": true,
- "requires": {
- "is-obj": "^1.0.0"
- }
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
},
"deep-eql": {
"version": "3.0.1",
@@ -1941,9 +1495,9 @@
}
},
"deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "version": "0.1.4",
+ "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": {
@@ -1955,47 +1509,6 @@
"object-keys": "^1.0.12"
}
},
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
"delaunator": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz",
@@ -2006,20 +1519,16 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
- "des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
},
- "detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
"dev": true
},
"diff": {
@@ -2028,21 +1537,19 @@
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
"dev": true
},
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
+ "path-type": "^4.0.0"
},
"dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
}
}
@@ -2056,56 +1563,39 @@
"esutils": "^2.0.2"
}
},
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
- "duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dom-serialize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
"dev": true,
"requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
+ "custom-event": "~1.0.0",
+ "ent": "~2.2.0",
+ "extend": "^3.0.0",
+ "void-elements": "^2.0.0"
}
},
- "elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.4.49",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz",
+ "integrity": "sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==",
+ "dev": true
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true
},
"encoding": {
@@ -2116,180 +1606,111 @@
"iconv-lite": "^0.6.2"
}
},
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "engine.io": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz",
+ "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==",
"dev": true,
"requires": {
- "once": "^1.4.0"
+ "@types/cookie": "^0.4.1",
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~5.0.0",
+ "ws": "~8.2.3"
}
},
- "engine.io": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz",
- "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==",
+ "engine.io-parser": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
+ "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
"dev": true,
"requires": {
- "accepts": "~1.3.4",
- "base64id": "1.0.0",
- "cookie": "0.3.1",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.0",
- "ws": "~6.1.0"
+ "@socket.io/base64-arraybuffer": "~1.0.2"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
+ "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ }
+ },
+ "ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+ "dev": true
+ },
+ "envinfo": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
+ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
+ "dev": true
+ },
+ "es-abstract": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
+ "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.1",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.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"
},
"dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true
},
- "ws": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
- "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true,
"requires": {
- "async-limiter": "~1.0.0"
+ "has-tostringtag": "^1.0.0"
}
+ },
+ "object-inspect": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
+ "dev": true
}
}
},
- "engine.io-client": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz",
- "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==",
- "dev": true,
- "requires": {
- "component-emitter": "1.2.1",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.1",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "ws": "~6.1.0",
- "xmlhttprequest-ssl": "~1.5.4",
- "yeast": "0.1.2"
- },
- "dependencies": {
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
- "dev": true
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "ws": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
- "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0"
- }
- }
- }
- },
- "engine.io-parser": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
- "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
- "dev": true,
- "requires": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.5",
- "blob": "0.0.5",
- "has-binary2": "~1.0.2"
- }
- },
- "enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- }
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
- "errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz",
- "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.2",
- "is-string": "^1.0.5",
- "object-inspect": "^1.9.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.0"
- }
+ "es-module-lexer": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
+ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+ "dev": true
},
"es-to-primitive": {
"version": "1.2.1",
@@ -2308,212 +1729,243 @@
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true
},
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
"escape-latex": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz",
"integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw=="
},
"escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/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": "7.25.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz",
- "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz",
+ "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==",
"dev": true,
"requires": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.0",
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
+ "glob-parent": "^6.0.1",
"globals": "^13.6.0",
- "ignore": "^4.0.6",
+ "ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"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.4.1",
- "lodash": "^4.17.21",
+ "lodash.merge": "^4.6.2",
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "table": "^6.0.4",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true
- },
- "eslint-visitor-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
- "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
- "dev": true
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "eslint-scope": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
+ "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
"dev": true,
"requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
}
},
- "table": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.5.1.tgz",
- "integrity": "sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==",
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "glob-parent": {
+ "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": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.flatten": "^4.4.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0"
+ "is-glob": "^4.0.3"
},
"dependencies": {
- "ajv": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz",
- "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==",
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "is-extglob": "^2.1.1"
}
}
}
+ },
+ "strip-ansi": {
+ "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": "^5.0.1"
+ }
}
}
},
"eslint-config-airbnb-base": {
- "version": "14.2.1",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz",
- "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==",
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+ "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
"dev": true,
"requires": {
"confusing-browser-globals": "^1.0.10",
"object.assign": "^4.1.2",
- "object.entries": "^1.1.2"
+ "object.entries": "^1.1.5",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
}
},
"eslint-import-resolver-node": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz",
- "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==",
+ "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": "^2.6.9",
- "resolve": "^1.13.1"
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
},
"dependencies": {
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
}
}
},
"eslint-module-utils": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
- "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz",
+ "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==",
"dev": true,
"requires": {
- "debug": "^2.6.9",
- "pkg-dir": "^2.0.0"
+ "debug": "^3.2.7",
+ "find-up": "^2.1.0"
},
"dependencies": {
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
- "ms": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
}
}
},
"eslint-plugin-import": {
- "version": "2.22.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
- "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==",
+ "version": "2.25.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz",
+ "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==",
"dev": true,
"requires": {
- "array-includes": "^3.1.1",
- "array.prototype.flat": "^1.2.3",
- "contains-path": "^0.1.0",
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
"debug": "^2.6.9",
- "doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.4",
- "eslint-module-utils": "^2.6.0",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.7.2",
"has": "^1.0.3",
+ "is-core-module": "^2.8.0",
+ "is-glob": "^4.0.3",
"minimatch": "^3.0.4",
- "object.values": "^1.1.1",
- "read-pkg-up": "^2.0.0",
- "resolve": "^1.17.0",
- "tsconfig-paths": "^3.9.0"
+ "object.values": "^1.1.5",
+ "resolve": "^1.20.0",
+ "tsconfig-paths": "^3.12.0"
},
"dependencies": {
"debug": {
@@ -2526,13 +1978,30 @@
}
},
"doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "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"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
+ "is-extglob": "^2.1.1"
}
},
"ms": {
@@ -2554,37 +2023,39 @@
}
},
"eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "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://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
"dev": true
},
"espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
+ "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
"dev": true,
"requires": {
- "acorn": "^7.4.0",
+ "acorn": "^8.7.0",
"acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
+ "eslint-visitor-keys": "^3.1.0"
}
},
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
"esquery": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
@@ -2595,9 +2066,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
@@ -2631,184 +2102,61 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true
+ },
"events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
},
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "exit-on-epipe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
},
"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"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
+ "is-stream": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true
}
}
},
- "expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "extend-shallow": {
+ "extend": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "face-api.js": {
+ "version": "0.22.2",
+ "resolved": "https://registry.npmjs.org/face-api.js/-/face-api.js-0.22.2.tgz",
+ "integrity": "sha512-9Bbv/yaBRTKCXjiDqzryeKhYxmgSjJ7ukvOvEBy6krA0Ah/vNBlsf7iBNfJljWiPA8Tys1/MnB3lyP2Hfmsuyw==",
"requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
+ "@tensorflow/tfjs-core": "1.7.0",
+ "tslib": "^1.11.1"
},
"dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "face-api.js": {
- "version": "0.22.2",
- "resolved": "https://registry.npmjs.org/face-api.js/-/face-api.js-0.22.2.tgz",
- "integrity": "sha512-9Bbv/yaBRTKCXjiDqzryeKhYxmgSjJ7ukvOvEBy6krA0Ah/vNBlsf7iBNfJljWiPA8Tys1/MnB3lyP2Hfmsuyw==",
- "requires": {
- "@tensorflow/tfjs-core": "1.7.0",
- "tslib": "^1.11.1"
- },
- "dependencies": {
- "@tensorflow/tfjs-core": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.7.0.tgz",
- "integrity": "sha512-uwQdiklNjqBnHPeseOdG0sGxrI3+d6lybaKu2+ou3ajVeKdPEwpWbgqA6iHjq1iylnOGkgkbbnQ6r2lwkiIIHw==",
+ "@tensorflow/tfjs-core": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.7.0.tgz",
+ "integrity": "sha512-uwQdiklNjqBnHPeseOdG0sGxrI3+d6lybaKu2+ou3ajVeKdPEwpWbgqA6iHjq1iylnOGkgkbbnQ6r2lwkiIIHw==",
"requires": {
"@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27",
@@ -2830,10 +2178,23 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
"fast-json-patch": {
- "version": "3.0.0-1",
- "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.0.0-1.tgz",
- "integrity": "sha512-6pdFb07cknxvPzCeLsFHStEy+MysPJPgZQ9LbQ/2O67unQF93SNqfdSqnPPl71YMHX+AD8gbl7iuoGFzHEdDuw=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.0.tgz",
+ "integrity": "sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
@@ -2846,10 +2207,25 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
+ "fastest-levenshtein": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
"fbjs": {
- "version": "0.8.17",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
- "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
+ "version": "0.8.18",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz",
+ "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==",
"requires": {
"core-js": "^1.0.0",
"isomorphic-fetch": "^2.1.1",
@@ -2857,20 +2233,9 @@
"object-assign": "^4.1.0",
"promise": "^7.1.1",
"setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
+ "ua-parser-js": "^0.7.30"
}
},
- "fflate": {
- "version": "0.3.11",
- "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz",
- "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A=="
- },
- "figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
- "dev": true
- },
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -2880,13 +2245,6 @@
"flat-cache": "^3.0.4"
}
},
- "file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "dev": true,
- "optional": true
- },
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -2895,59 +2253,35 @@
"to-regex-range": "^5.0.1"
}
},
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dev": true,
"requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
},
"dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "ms": "2.0.0"
}
},
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
}
}
},
@@ -2960,123 +2294,6 @@
"path-exists": "^4.0.0"
}
},
- "findup-sync": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
"flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
@@ -3094,31 +2311,15 @@
}
},
"flatted": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
- "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
+ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
"dev": true
},
- "flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
"follow-redirects": {
- "version": "1.13.3",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
- "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA=="
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
+ "version": "1.14.7",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz",
+ "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ=="
},
"form-data": {
"version": "3.0.1",
@@ -3130,45 +2331,20 @@
"mime-types": "^2.1.12"
}
},
- "frac": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
- "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
- },
"fraction.js": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz",
- "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA=="
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz",
+ "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA=="
},
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "fs-extra": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
+ "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
}
},
"fs.realpath": {
@@ -3216,12 +2392,22 @@
"has-symbols": "^1.0.1"
}
},
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true
},
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
"glamor": {
"version": "2.20.40",
"resolved": "https://registry.npmjs.org/glamor/-/glamor-2.20.40.tgz",
@@ -3235,9 +2421,9 @@
}
},
"glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -3256,76 +2442,33 @@
"is-glob": "^4.0.1"
}
},
- "global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "dev": true,
- "requires": {
- "global-prefix": "^3.0.0"
- },
- "dependencies": {
- "global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "dev": true,
- "requires": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- }
- },
- "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"
- }
- }
- }
+ "glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
},
- "global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "globals": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"requires": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- },
- "dependencies": {
- "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"
- }
- }
+ "type-fest": "^0.20.2"
}
},
- "globals": {
- "version": "13.8.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz",
- "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==",
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
"requires": {
- "type-fest": "^0.20.2"
- },
- "dependencies": {
- "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
- }
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
}
},
"graceful-fs": {
@@ -3354,29 +2497,6 @@
"integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
"dev": true
},
- "has-binary2": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "dev": true,
- "requires": {
- "isarray": "2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
- "dev": true
- }
- }
- },
- "has-cors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
- "dev": true
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3388,128 +2508,49 @@
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true
},
- "has-value": {
+ "has-tostringtag": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dev": true,
"requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
+ "has-symbols": "^1.0.2"
}
},
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"dev": true,
"requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
}
},
- "homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
"dev": true,
"requires": {
- "parse-passwd": "^1.0.0"
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
}
},
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true
},
"hyphenate-style-name": {
@@ -3518,29 +2559,17 @@
"integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
},
"iconv-lite": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
- "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true
- },
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
- "dev": true
- },
"ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
},
"import-fresh": {
"version": "3.3.0",
@@ -3552,85 +2581,12 @@
"resolve-from": "^4.0.0"
}
},
- "import-local": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
- "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
- "dev": true,
- "requires": {
- "pkg-dir": "^3.0.0",
- "resolve-cwd": "^2.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- }
- }
- },
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
- "indent-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
- "dev": true
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
- "dev": true
- },
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "dev": true
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -3647,12 +2603,6 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
- },
"inline-style-prefixer": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz",
@@ -3662,41 +2612,26 @@
"css-in-js-utils": "^2.0.0"
}
},
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
"internmap": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
"integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
},
"interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
"dev": true
},
"is-bigint": {
@@ -3722,12 +2657,6 @@
"call-bind": "^1.0.0"
}
},
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
"is-callable": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
@@ -3742,63 +2671,12 @@
"has": "^1.0.3"
}
},
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
"is-date-object": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
"dev": true
},
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -3834,12 +2712,6 @@
"integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
"dev": true
},
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
- },
"is-plain-obj": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
@@ -3856,15 +2728,21 @@
}
},
"is-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
- "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "has-symbols": "^1.0.1"
+ "has-tostringtag": "^1.0.0"
}
},
+ "is-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
+ "dev": true
+ },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -3885,25 +2763,25 @@
"has-symbols": "^1.0.1"
}
},
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true
},
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
"dev": true,
"requires": {
- "is-docker": "^2.0.0"
+ "call-bind": "^1.0.2"
}
},
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "isbinaryfile": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
+ "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==",
"dev": true
},
"isexe": {
@@ -3941,19 +2819,40 @@
"resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
"integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k="
},
+ "jest-worker": {
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz",
+ "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/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"
}
},
"json-parse-better-errors": {
@@ -3965,7 +2864,8 @@
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
@@ -3987,25 +2887,146 @@
"minimist": "^1.2.0"
}
},
- "jspack": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/jspack/-/jspack-0.0.4.tgz",
- "integrity": "sha1-Mt01x/3LPjRWwY+7fvntC8YjgXc=",
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "karma": {
+ "version": "6.3.11",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.11.tgz",
+ "integrity": "sha512-QGUh4yXgizzDNPLB5nWTvP+wysKexngbyLVWFOyikB661hpa2RZLf5anZQzqliWtAQuYVep0ot0D1U7UQKpsxQ==",
+ "dev": true,
+ "requires": {
+ "body-parser": "^1.19.0",
+ "braces": "^3.0.2",
+ "chokidar": "^3.5.1",
+ "colors": "1.4.0",
+ "connect": "^3.7.0",
+ "di": "^0.0.1",
+ "dom-serialize": "^2.2.1",
+ "glob": "^7.1.7",
+ "graceful-fs": "^4.2.6",
+ "http-proxy": "^1.18.1",
+ "isbinaryfile": "^4.0.8",
+ "lodash": "^4.17.21",
+ "log4js": "^6.3.0",
+ "mime": "^2.5.2",
+ "minimatch": "^3.0.4",
+ "qjobs": "^1.2.0",
+ "range-parser": "^1.2.1",
+ "rimraf": "^3.0.2",
+ "socket.io": "^4.2.0",
+ "source-map": "^0.6.1",
+ "tmp": "^0.2.1",
+ "ua-parser-js": "^0.7.30",
+ "yargs": "^16.1.1"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ }
+ }
+ },
+ "karma-chai": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz",
+ "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=",
"dev": true
},
+ "karma-chrome-launcher": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+ "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
+ "dev": true,
+ "requires": {
+ "which": "^1.2.1"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "karma-mocha": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz",
+ "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.3"
+ }
+ },
"katex": {
- "version": "0.13.3",
- "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.3.tgz",
- "integrity": "sha512-/w0eycuK1xh201T0uFXYOZWPDoeqDHqR+6SLLKsYvNtUCYtmRjq8F+M74sdpzs+dJZYWv2eUsSW0r1AJfhZOCw==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.2.tgz",
+ "integrity": "sha512-FfZ/f6f8bQdLmJ3McXDNTkKenQkoXkItpW0I9bsG2wgb+8JAY5bwpXFtI8ZVrg5hc1wo1X/UIhdkVMpok46tEQ==",
"dev": true,
"requires": {
- "commander": "^6.0.0"
+ "commander": "^8.0.0"
},
"dependencies": {
"commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
"dev": true
}
}
@@ -4026,73 +3047,12 @@
"type-check": "~0.4.0"
}
},
- "lighthouse-logger": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz",
- "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==",
- "dev": true,
- "requires": {
- "debug": "^2.6.8",
- "marky": "^1.2.0"
- },
- "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"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
"loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
"dev": true
},
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "dependencies": {
- "json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
- },
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -4104,40 +3064,37 @@
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
- "lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "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
},
"log-symbols": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
- "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
"requires": {
- "chalk": "^4.0.0"
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
}
},
- "loglevel": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
- "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==",
- "dev": true
+ "log4js": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.0.tgz",
+ "integrity": "sha512-ysc/XUecZJuN8NoKOssk3V0cQ29xY4fra6fnigZa5VwxFsCsvdqsdnEuAxNN89LlHpbE4KUD3zGcn+kFqonSVQ==",
+ "dev": true,
+ "requires": {
+ "date-format": "^4.0.3",
+ "debug": "^4.3.3",
+ "flatted": "^3.2.4",
+ "rfdc": "^1.3.0",
+ "streamroller": "^3.0.2"
+ }
},
"loose-envify": {
"version": "1.4.0",
@@ -4147,16 +3104,6 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true,
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -4165,234 +3112,47 @@
"yallist": "^4.0.0"
}
},
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
+ "mathjs": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.1.0.tgz",
+ "integrity": "sha512-TrpZAR3H9jR0Cv6cnzT+TZhE40Xs2SCaLf/qm2WcWm2tui69Gas/bC/ct5ZLZNWnWvNvJ7H2uHvuRDDl151PHA==",
"requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
+ "@babel/runtime": "^7.16.5",
+ "complex.js": "^2.0.15",
+ "decimal.js": "^10.3.1",
+ "escape-latex": "^1.2.0",
+ "fraction.js": "^4.1.2",
+ "javascript-natural-sort": "^0.7.1",
+ "seedrandom": "^3.0.5",
+ "tiny-emitter": "^2.1.0",
+ "typed-function": "^2.0.0"
},
"dependencies": {
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "seedrandom": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
+ "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="
}
}
},
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
},
- "map-obj": {
+ "merge-stream": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "marky": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz",
- "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==",
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true
},
- "mathjs": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-7.6.0.tgz",
- "integrity": "sha512-abywR28hUpKF4at5jE8Ys+Kigk40eKMT5mcBLD0/dtsqjfOLbtzd3WjlRqIopNo7oQ6FME51qph6lb8h/bhpUg==",
- "requires": {
- "complex.js": "^2.0.11",
- "decimal.js": "^10.2.1",
- "escape-latex": "^1.2.0",
- "fraction.js": "^4.0.12",
- "javascript-natural-sort": "^0.7.1",
- "seed-random": "^2.2.0",
- "tiny-emitter": "^2.1.0",
- "typed-function": "^2.0.0"
- }
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "meow": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
- "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
- "dev": true,
- "requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0",
- "yargs-parser": "^10.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "yargs-parser": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
- "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
- },
"micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
@@ -4403,23 +3163,11 @@
"picomatch": "^2.2.3"
}
},
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "dev": true
},
"mime-db": {
"version": "1.47.0",
@@ -4434,16 +3182,10 @@
"mime-db": "1.47.0"
}
},
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"minimatch": {
@@ -4460,114 +3202,33 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
- "minimist-options": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
- },
- "dependencies": {
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
- }
- }
- },
- "mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
- }
- },
"mocha": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz",
- "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==",
+ "version": "9.1.4",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.4.tgz",
+ "integrity": "sha512-+q2aV5VlJZuLgCWoBvGI5zEwPF9eEI0kr/sAA9Jm4xMND7RfIEyF8JE7C0JIg8WXRG+P1sdIAb5ccoHPlXLzcw==",
"dev": true,
"requires": {
"@ungap/promise-all-settled": "1.1.2",
"ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
- "chokidar": "3.5.1",
- "debug": "4.3.1",
+ "chokidar": "3.5.2",
+ "debug": "4.3.2",
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
- "glob": "7.1.6",
+ "glob": "7.1.7",
"growl": "1.10.5",
"he": "1.2.0",
- "js-yaml": "4.0.0",
- "log-symbols": "4.0.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
"minimatch": "3.0.4",
"ms": "2.1.3",
- "nanoid": "3.1.20",
- "serialize-javascript": "5.0.1",
+ "nanoid": "3.1.25",
+ "serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
"which": "2.0.2",
- "wide-align": "1.1.3",
- "workerpool": "6.1.0",
+ "workerpool": "6.1.5",
"yargs": "16.2.0",
"yargs-parser": "20.2.4",
"yargs-unparser": "2.0.0"
@@ -4579,6 +3240,22 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -4590,6 +3267,23 @@
"wrap-ansi": "^7.0.0"
}
},
+ "debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
"escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -4606,10 +3300,24 @@
"path-exists": "^4.0.0"
}
},
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"js-yaml": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
- "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
+ "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": "^2.0.1"
@@ -4648,6 +3356,15 @@
"p-limit": "^3.0.2"
}
},
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
"supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -4697,175 +3414,18 @@
}
}
},
- "mocha-chrome": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/mocha-chrome/-/mocha-chrome-2.2.0.tgz",
- "integrity": "sha512-RXP6Q2mlM2X+eO2Z8gribmiH4J9x5zu/JcTZ3deQSwiC5260BzizOc0eD1NWP3JuypGCKRwReicv4KCNIFtTZQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1",
- "chrome-launcher": "^0.11.2",
- "chrome-remote-interface": "^0.28.0",
- "chrome-unmirror": "^0.1.0",
- "debug": "^4.1.1",
- "deep-assign": "^3.0.0",
- "import-local": "^2.0.0",
- "loglevel": "^1.4.1",
- "meow": "^5.0.0",
- "nanobus": "^4.2.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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "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"
- }
- }
- }
- },
- "move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "nan": {
- "version": "2.14.2",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
- "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
- "dev": true,
- "optional": true
- },
- "nanoassert": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz",
- "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=",
- "dev": true
- },
- "nanobus": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/nanobus/-/nanobus-4.5.0.tgz",
- "integrity": "sha512-7sBZo9wthqNJ7QXnfVXZL7fkKJLN55GLOdX+RyZT34UOvxxnFtJe/c7K0ZRLAKOvaY1xJThFFn0Usw2H9R6Frg==",
- "dev": true,
- "requires": {
- "nanoassert": "^1.1.0",
- "nanotiming": "^7.2.0",
- "remove-array-items": "^1.0.0"
- }
- },
"nanoid": {
- "version": "3.1.20",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
- "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
"dev": true
},
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "nanoscheduler": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/nanoscheduler/-/nanoscheduler-1.0.3.tgz",
- "integrity": "sha512-jBbrF3qdU9321r8n9X7yu18DjP31Do2ItJm3mWrt90wJTrnDO+HXpoV7ftaUglAtjgj9s+OaCxGufbvx6pvbEQ==",
- "dev": true,
- "requires": {
- "nanoassert": "^1.1.0"
- }
- },
- "nanotiming": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/nanotiming/-/nanotiming-7.3.1.tgz",
- "integrity": "sha512-l3lC7v/PfOuRWQa8vV29Jo6TG10wHtnthLElFXs4Te4Aas57Fo4n1Q8LH9n+NDh9riOzTVvb2QNBhTS4JUKNjw==",
- "dev": true,
- "requires": {
- "nanoassert": "^1.1.0",
- "nanoscheduler": "^1.0.2"
- }
- },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -4884,133 +3444,36 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
"node-fetch": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
"integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
},
- "node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "requires": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- }
- }
- },
- "node-osc": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/node-osc/-/node-osc-4.1.0.tgz",
- "integrity": "sha512-VXMbmLMFxLt2rbUWxCLcq5nEcSXf6Zxyepzh6Vh6zDeIO/xBNqH5X1R6DuoITi4WOs1ae6VKu3ZwQJDN5D+Cdg==",
- "dev": true,
- "requires": {
- "jspack": "0.0.4",
- "osc-min": "^1.1.1"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
+ "node-releases": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
+ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
+ "dev": true
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
- "object-component": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
- "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
"object-inspect": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz",
@@ -5023,15 +3486,6 @@
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
"object.assign": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
@@ -5045,36 +3499,95 @@
}
},
"object.entries": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz",
- "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
"dev": true,
"requires": {
- "call-bind": "^1.0.0",
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1",
- "has": "^1.0.3"
+ "es-abstract": "^1.19.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
+ "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.1",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.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"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
+ "dev": true
+ }
}
},
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "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": {
- "isobject": "^3.0.1"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
}
},
- "object.values": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz",
- "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==",
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"dev": true,
"requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2",
- "has": "^1.0.3"
+ "ee-first": "1.1.1"
}
},
"once": {
@@ -5101,6 +3614,15 @@
"tree-kill": "^1.2.2"
}
},
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -5115,21 +3637,6 @@
"word-wrap": "^1.2.3"
}
},
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
- "dev": true
- },
- "osc-min": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/osc-min/-/osc-min-1.1.2.tgz",
- "integrity": "sha512-8DbiO8ME85R75stgNVCZtHxB9MNBBNcyy+isNBXrsFeinXGjwNAauvKVmGlfRas5VJWC/mhzIx7spR2gFvWxvg==",
- "dev": true,
- "requires": {
- "binpack": "~0"
- }
- },
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -5152,38 +3659,11 @@
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
"p5": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/p5/-/p5-1.3.1.tgz",
- "integrity": "sha512-g7W2htgEwiAEGcl0WHccAJKbunUJwrUojUSR9+KihphJ33p5VpDdh1K8pDx4ppYjOr/lVEXaZ1XXDj27nwlNOg==",
- "dev": true
- },
- "p5.touchgui": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/p5.touchgui/-/p5.touchgui-0.5.2.tgz",
- "integrity": "sha512-qi+puv0odBvKOFVlDV6veKw1okiAGkpa1J6ZqKDJ8Pr6iKHYAh+xPXC/uZo+tmYLABBDLa3Ro6KwaZbgHZMNCw==",
- "dev": true,
- "requires": {
- "node-osc": "4.1.0",
- "socket.io": "2.2.0"
- }
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/p5/-/p5-1.4.0.tgz",
+ "integrity": "sha512-U888W2ChcIzPhRhnv4FkNhaa4f5BDIWZfLhzvx9ZrQ5KtkZr/+o1UPIicV3yWTRy0HEG23NviHyDR3kgjaJ9wA==",
"dev": true
},
- "parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "requires": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -5193,71 +3673,12 @@
"callsites": "^3.0.0"
}
},
- "parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "parseqs": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
- "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
- "dev": true,
- "requires": {
- "better-assert": "~1.0.0"
- }
- },
- "parseuri": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
- "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
- "dev": true,
- "requires": {
- "better-assert": "~1.0.0"
- }
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dev": true
},
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true,
- "optional": true
- },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -5275,18 +3696,9 @@
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
},
"path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"pathval": {
"version": "1.1.1",
@@ -5294,236 +3706,68 @@
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true
},
- "pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "dev": true,
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
},
"picomatch": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
"integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg=="
},
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "preact": {
+ "version": "8.2.9",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz",
+ "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA=="
+ },
+ "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
},
- "pkg-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
- "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
- "dev": true,
- "requires": {
- "find-up": "^2.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "preact": {
- "version": "8.2.9",
- "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz",
- "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA=="
- },
- "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
- },
- "printj": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
- "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
"asap": "~2.0.3"
}
},
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "dev": true
- },
"prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
+ "react-is": "^16.13.1"
}
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
},
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "qjobs": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==",
"dev": true
},
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "qs": {
+ "version": "6.9.6",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
+ "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
"dev": true
},
- "quick-lru": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
"randombytes": {
@@ -5535,115 +3779,39 @@
"safe-buffer": "^5.1.0"
}
},
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
},
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "raw-body": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
+ "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
"dev": true,
"requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
+ "bytes": "3.1.1",
+ "http-errors": "1.8.1",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
},
"dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
- "p-limit": "^1.1.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
}
}
},
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/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"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"readdirp": {
"version": "3.5.0",
@@ -5653,55 +3821,24 @@
"picomatch": "^2.2.1"
}
},
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "rechoir": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
"dev": true,
"requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
+ "resolve": "^1.9.0"
}
},
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
},
"regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
- "dev": true
- },
- "remove-array-items": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/remove-array-items/-/remove-array-items-1.1.1.tgz",
- "integrity": "sha512-MXW/jtHyl5F1PZI7NbpS8SOtympdLuF20aoWJT5lELR1p/HJDd5nqW8Eu9uLh/hCRY3FgvrIT5AwDCgBODklcA==",
- "dev": true
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true,
- "optional": true
- },
- "repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
"dev": true
},
"require-directory": {
@@ -5709,17 +3846,17 @@
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
},
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true
- },
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
},
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -5729,660 +3866,224 @@
"path-parse": "^1.0.6"
}
},
- "resolve-cwd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
- "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
- "dev": true,
- "requires": {
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
- }
- },
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
- },
- "dependencies": {
- "global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "requires": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- }
- }
- }
- },
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "rimraf": {
- "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"
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1"
- }
- },
- "rw": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
- "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "seed-random": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz",
- "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ="
- },
- "seedrandom": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz",
- "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw="
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "serialize-javascript": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
- },
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true
},
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.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==",
- "requires": {
- "color-convert": "^1.9.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==",
- "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- }
- }
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "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"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "glob": "^7.1.3"
}
},
- "socket.io": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz",
- "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==",
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"requires": {
- "debug": "~4.1.0",
- "engine.io": "~3.3.1",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.2.0",
- "socket.io-parser": "~3.3.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
+ "queue-microtask": "^1.2.2"
}
},
- "socket.io-adapter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
- "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==",
+ "rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
},
- "socket.io-client": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz",
- "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==",
- "dev": true,
- "requires": {
- "backo2": "1.0.2",
- "base64-arraybuffer": "0.1.5",
- "component-bind": "1.0.0",
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "engine.io-client": "~3.3.1",
- "has-binary2": "~1.0.2",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "object-component": "0.0.3",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "socket.io-parser": "~3.3.0",
- "to-array": "0.1.4"
- },
- "dependencies": {
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
- "dev": true
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "socket.io-parser": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
- "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"dev": true,
"requires": {
- "component-emitter": "~1.3.0",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
},
"dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
"dev": true
}
}
},
- "source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
+ "seedrandom": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz",
+ "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw="
},
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
+ "lru-cache": "^6.0.0"
}
},
- "source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
"requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
+ "randombytes": "^2.1.0"
}
},
- "source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"dev": true
},
- "spdx-expression-parse": {
+ "shallow-clone": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "kind-of": "^6.0.2"
}
},
- "spdx-license-ids": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
- "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
- "dev": true
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
},
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
"requires": {
- "extend-shallow": "^3.0.0"
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "signal-exit": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
+ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==",
"dev": true
},
- "ssf": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
- "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
- "requires": {
- "frac": "~1.1.2"
- }
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
},
- "ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
+ "socket.io": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
+ "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
"dev": true,
"requires": {
- "figgy-pudding": "^3.5.1"
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "debug": "~4.3.2",
+ "engine.io": "~6.1.0",
+ "socket.io-adapter": "~2.3.3",
+ "socket.io-parser": "~4.0.4"
}
},
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
+ "socket.io-adapter": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
+ "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==",
+ "dev": true
},
- "stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "socket.io-parser": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
+ "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
"dev": true,
"requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
+ "@types/component-emitter": "^1.2.10",
+ "component-emitter": "~1.3.0",
+ "debug": "~4.3.1"
}
},
- "stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
},
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "streamroller": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz",
+ "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==",
"dev": true,
"requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
+ "date-format": "^4.0.3",
+ "debug": "^4.1.1",
+ "fs-extra": "^10.0.0"
}
},
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
"string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
@@ -6413,23 +4114,6 @@
"define-properties": "^1.1.3"
}
},
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
- },
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -6444,10 +4128,10 @@
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
- "strip-indent": {
+ "strip-final-newline": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true
},
"strip-json-comments": {
@@ -6464,194 +4148,78 @@
"has-flag": "^4.0.0"
}
},
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
"tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true
},
"terser": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
- "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
+ "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"dev": true,
"requires": {
"commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
+ "source-map": "~0.7.2",
+ "source-map-support": "~0.5.20"
},
"dependencies": {
"source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true
}
}
},
"terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz",
+ "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==",
"dev": true,
"requires": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^4.0.0",
+ "jest-worker": "^27.4.1",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.0",
"source-map": "^0.6.1",
- "terser": "^4.1.2",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
+ "terser": "^5.7.2"
},
"dependencies": {
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
- },
"serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "tiny-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
- "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
- },
- "to-array": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
- "dev": true
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "randombytes": "^2.1.0"
}
}
}
},
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "tiny-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"dev": true,
"requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
+ "rimraf": "^3.0.0"
}
},
"to-regex-range": {
@@ -6662,6 +4230,12 @@
"is-number": "^7.0.0"
}
},
+ "toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "dev": true
+ },
"topojson-client": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz",
@@ -6670,34 +4244,32 @@
"commander": "2"
}
},
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
"tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="
},
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
- "dev": true
- },
"ts-loader": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.2.0.tgz",
- "integrity": "sha512-ebXBFrNyMSmbWgjnb3WBloUBK+VSx1xckaXsMXxlZRDqce/OPdYBVN5efB0W3V0defq0Gcy4YuzvPGqRgjj85A==",
+ "version": "9.2.6",
+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz",
+ "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==",
"dev": true,
"requires": {
"chalk": "^4.1.0",
- "enhanced-resolve": "^4.0.0",
- "loader-utils": "^2.0.0",
+ "enhanced-resolve": "^5.0.0",
"micromatch": "^4.0.0",
"semver": "^7.3.4"
}
},
"tsconfig-paths": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
- "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz",
+ "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==",
"dev": true,
"requires": {
"@types/json5": "^0.0.29",
@@ -6728,12 +4300,6 @@
}
}
},
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
- "dev": true
- },
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -6750,32 +4316,36 @@
"dev": true
},
"type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "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
},
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
"typed-function": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.0.0.tgz",
"integrity": "sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA=="
},
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
"typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
"dev": true
},
"ua-parser-js": {
- "version": "0.7.28",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
- "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g=="
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
+ "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ=="
},
"unbox-primitive": {
"version": "1.0.1",
@@ -6789,142 +4359,31 @@
"which-boxed-primitive": "^1.0.2"
}
},
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- }
- },
- "unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
},
- "unset-value": {
+ "unpipe": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- }
- }
- },
- "upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true,
- "optional": true
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
},
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
"dev": true,
"requires": {
- "inherits": "2.0.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
+ "punycode": "^2.1.0"
}
},
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
"dev": true
},
"v8-compile-cache": {
@@ -6933,15 +4392,11 @@
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
},
"vega": {
"version": "5.20.0",
@@ -7070,21 +4525,32 @@
}
},
"vega-functions": {
- "version": "5.12.0",
- "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.12.0.tgz",
- "integrity": "sha512-3hljmGs+gR7TbO/yYuvAP9P5laKISf1GKk4yRHLNdM61fWgKm8pI3f6LY2Hvq9cHQFTiJ3/5/Bx2p1SX5R4quQ==",
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.12.1.tgz",
+ "integrity": "sha512-7cHfcjXOj27qEbh2FTzWDl7FJK4xGcMFF7+oiyqa0fp7BU/wNT5YdNV0t5kCX9WjV7mfJWACKV74usLJbyM6GA==",
"requires": {
"d3-array": "^2.7.1",
"d3-color": "^2.0.0",
"d3-geo": "^2.0.1",
"vega-dataflow": "^5.7.3",
- "vega-expression": "^4.0.1",
+ "vega-expression": "^5.0.0",
"vega-scale": "^7.1.1",
"vega-scenegraph": "^4.9.3",
- "vega-selections": "^5.3.0",
+ "vega-selections": "^5.3.1",
"vega-statistics": "^1.7.9",
"vega-time": "^2.0.4",
"vega-util": "^1.16.0"
+ },
+ "dependencies": {
+ "vega-expression": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.0.0.tgz",
+ "integrity": "sha512-y5+c2frq0tGwJ7vYXzZcfVcIRF/QGfhf2e+bV1Z0iQs+M2lI1II1GPDdmOcMKimpoCVp/D61KUJDIGE1DSmk2w==",
+ "requires": {
+ "@types/estree": "^0.0.50",
+ "vega-util": "^1.16.0"
+ }
+ }
}
},
"vega-geo": {
@@ -7156,9 +4622,9 @@
},
"dependencies": {
"vega-util": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.16.1.tgz",
- "integrity": "sha512-FdgD72fmZMPJE99FxvFXth0IL4BbLA93WmBg/lvcJmfkK4Uf90WIlvGwaIUdSePIsdpkZjBPyQcHMQ8OcS8Smg=="
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.0.tgz",
+ "integrity": "sha512-HTaydZd9De3yf+8jH66zL4dXJ1d1p5OIFyoBzFiOli4IJbwkL1jrefCKz6AHDm1kYBzDJ0X4bN+CzZSCTvNk1w=="
}
}
},
@@ -7170,9 +4636,9 @@
}
},
"vega-loader": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.4.0.tgz",
- "integrity": "sha512-e5enQECdau7rJob0NFB5pGumh3RaaSWWm90+boxMy3ay2b4Ki/3XIvo+C4F1Lx04qSxvQF7tO2LJcklRm6nqRA==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.4.1.tgz",
+ "integrity": "sha512-dj65i4qlNhK0mOmjuchHgUrF5YUaWrYpx0A8kXA68lBk5Hkx8FNRztkcl07CZJ1+8V81ymEyJii9jzGbhEX0ag==",
"requires": {
"d3-dsv": "^2.0.0",
"node-fetch": "^2.6.1",
@@ -7182,22 +4648,32 @@
},
"dependencies": {
"node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
}
}
},
"vega-parser": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.1.3.tgz",
- "integrity": "sha512-8oiVhhW26GQ4GZBvolId8FVFvhn3s1KGgPlD7Z+4P2wkV+xe5Nqu0TEJ20F/cn3b88fd0Vj48X3BH3dlSeKNFg==",
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.1.4.tgz",
+ "integrity": "sha512-tORdpWXiH/kkXcpNdbSVEvtaxBuuDtgYp9rBunVW9oLsjFvFXbSWlM1wvJ9ZFSaTfx6CqyTyGMiJemmr1QnTjQ==",
"requires": {
"vega-dataflow": "^5.7.3",
- "vega-event-selector": "^2.0.6",
- "vega-functions": "^5.12.0",
+ "vega-event-selector": "^3.0.0",
+ "vega-functions": "^5.12.1",
"vega-scale": "^7.1.1",
"vega-util": "^1.16.0"
+ },
+ "dependencies": {
+ "vega-event-selector": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-3.0.0.tgz",
+ "integrity": "sha512-Gls93/+7tEJGE3kUuUnxrBIxtvaNeF01VIFB2Q2Of2hBIBvtHX74jcAdDtkh5UhhoYGD8Q1J30P5cqEBEwtPoQ=="
+ }
}
},
"vega-projection": {
@@ -7255,23 +4731,34 @@
}
},
"vega-schema-url-parser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-2.1.0.tgz",
- "integrity": "sha512-JHT1PfOyVzOohj89uNunLPirs05Nf59isPT5gnwIkJph96rRgTIBJE7l7yLqndd7fLjr3P8JXHGAryRp74sCaQ=="
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-2.2.0.tgz",
+ "integrity": "sha512-yAtdBnfYOhECv9YC70H2gEiqfIbVkq09aaE4y/9V/ovEFmH9gPKaEgzIZqgT7PSPQjKhsNkb6jk6XvSoboxOBw=="
},
"vega-selections": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.3.0.tgz",
- "integrity": "sha512-vC4NPsuN+IffruFXfH0L3i2A51RgG4PqpLv85TvrEAIYnSkyKDE4bf+wVraR3aPdnLLkc3+tYuMi6le5FmThIA==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.3.1.tgz",
+ "integrity": "sha512-cm4Srw1WHjcLGXX7GpxiUlfESv8XPu5b6Vh3mqMDPU94P2FO91SR9gei+EtRdt+KCFgIjr//MnRUjg/hAWwjkQ==",
"requires": {
- "vega-expression": "^4.0.1",
+ "vega-expression": "^5.0.0",
"vega-util": "^1.16.0"
+ },
+ "dependencies": {
+ "vega-expression": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.0.0.tgz",
+ "integrity": "sha512-y5+c2frq0tGwJ7vYXzZcfVcIRF/QGfhf2e+bV1Z0iQs+M2lI1II1GPDdmOcMKimpoCVp/D61KUJDIGE1DSmk2w==",
+ "requires": {
+ "@types/estree": "^0.0.50",
+ "vega-util": "^1.16.0"
+ }
+ }
}
},
"vega-statistics": {
- "version": "1.7.9",
- "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.7.9.tgz",
- "integrity": "sha512-T0sd2Z08k/mHxr1Vb4ajLWytPluLFYnsYqyk4SIS5czzUs4errpP2gUu63QJ0B7CKNu33vnS9WdOMOo/Eprr/Q==",
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.7.10.tgz",
+ "integrity": "sha512-QLb12gcfpDZ9K5h3TLGrlz4UXDH9wSPyg9LLfOJZacxvvJEPohacUQNrGEAVtFO9ccUCerRfH9cs25ZtHsOZrw==",
"requires": {
"d3-array": "^2.7.1"
}
@@ -7346,748 +4833,206 @@
"requires": {
"vega-dataflow": "^5.7.3",
"vega-scenegraph": "^4.9.2",
- "vega-util": "^1.15.2"
- }
- },
- "vega-voronoi": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.1.5.tgz",
- "integrity": "sha512-950IkgCFLj0zG33EWLAm1hZcp+FMqWcNQliMYt+MJzOD5S4MSpZpZ7K4wp2M1Jktjw/CLKFL9n38JCI0i3UonA==",
- "requires": {
- "d3-delaunay": "^5.3.0",
- "vega-dataflow": "^5.7.3",
- "vega-util": "^1.15.2"
- }
- },
- "vega-wordcloud": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.3.tgz",
- "integrity": "sha512-is4zYn9FMAyp9T4SAcz2P/U/wqc0Lx3P5YtpWKCbOH02a05vHjUQrQ2TTPOuvmMfAEDCSKvbMSQIJMOE018lJA==",
- "requires": {
- "vega-canvas": "^1.2.5",
- "vega-dataflow": "^5.7.3",
- "vega-scale": "^7.1.1",
- "vega-statistics": "^1.7.9",
- "vega-util": "^1.15.2"
- }
- },
- "vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
- "watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
- "dev": true,
- "optional": true,
- "requires": {
- "chokidar": "^2.1.8"
- },
- "dependencies": {
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "optional": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "optional": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true,
- "optional": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "optional": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "dev": true,
- "optional": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "fsevents": "^1.2.7",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.1"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "optional": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fsevents": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "dev": true,
- "optional": true,
- "requires": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1"
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
- "optional": true,
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "optional": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "optional": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
+ "vega-util": "^1.15.2"
+ }
+ },
+ "vega-voronoi": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.1.5.tgz",
+ "integrity": "sha512-950IkgCFLj0zG33EWLAm1hZcp+FMqWcNQliMYt+MJzOD5S4MSpZpZ7K4wp2M1Jktjw/CLKFL9n38JCI0i3UonA==",
+ "requires": {
+ "d3-delaunay": "^5.3.0",
+ "vega-dataflow": "^5.7.3",
+ "vega-util": "^1.15.2"
+ }
+ },
+ "vega-wordcloud": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.3.tgz",
+ "integrity": "sha512-is4zYn9FMAyp9T4SAcz2P/U/wqc0Lx3P5YtpWKCbOH02a05vHjUQrQ2TTPOuvmMfAEDCSKvbMSQIJMOE018lJA==",
+ "requires": {
+ "vega-canvas": "^1.2.5",
+ "vega-dataflow": "^5.7.3",
+ "vega-scale": "^7.1.1",
+ "vega-statistics": "^1.7.9",
+ "vega-util": "^1.15.2"
+ }
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "dev": true
+ },
+ "watchpack": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
+ "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
+ "dev": true,
+ "requires": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
}
},
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
"webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/wasm-edit": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "acorn": "^6.4.1",
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1",
+ "version": "5.66.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.66.0.tgz",
+ "integrity": "sha512-NJNtGT7IKpGzdW7Iwpn/09OXz9inIkeIQ/ibY6B+MdV1x6+uReqz/5z1L89ezWnpPDWpXF0TY5PCYKQdWVn8Vg==",
+ "dev": true,
+ "requires": {
+ "@types/eslint-scope": "^3.7.0",
+ "@types/estree": "^0.0.50",
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/wasm-edit": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "acorn": "^8.4.1",
+ "acorn-import-assertions": "^1.7.6",
+ "browserslist": "^4.14.5",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.5.0",
- "eslint-scope": "^4.0.3",
+ "enhanced-resolve": "^5.8.3",
+ "es-module-lexer": "^0.9.0",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.9",
"json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.4.0",
- "loader-utils": "^1.2.3",
- "memory-fs": "^0.4.1",
- "micromatch": "^3.1.10",
- "mkdirp": "^0.5.3",
- "neo-async": "^2.6.1",
- "node-libs-browser": "^2.2.1",
- "schema-utils": "^1.0.0",
- "tapable": "^1.1.3",
- "terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.7.4",
- "webpack-sources": "^1.4.1"
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.1.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.1.3",
+ "watchpack": "^2.3.1",
+ "webpack-sources": "^3.2.2"
},
"dependencies": {
"acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
"dev": true
},
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- },
- "memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "enhanced-resolve": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
+ "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
}
},
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
+ "graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==",
+ "dev": true
},
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
+ "tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true
}
}
},
"webpack-cli": {
- "version": "3.3.12",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
- "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "cross-spawn": "^6.0.5",
- "enhanced-resolve": "^4.1.1",
- "findup-sync": "^3.0.0",
- "global-modules": "^2.0.0",
- "import-local": "^2.0.0",
- "interpret": "^1.4.0",
- "loader-utils": "^1.4.0",
- "supports-color": "^6.1.0",
- "v8-compile-cache": "^2.1.1",
- "yargs": "^13.3.2"
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz",
+ "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==",
+ "dev": true,
+ "requires": {
+ "@discoveryjs/json-ext": "^0.5.0",
+ "@webpack-cli/configtest": "^1.1.0",
+ "@webpack-cli/info": "^1.4.0",
+ "@webpack-cli/serve": "^1.6.0",
+ "colorette": "^2.0.14",
+ "commander": "^7.0.0",
+ "execa": "^5.0.0",
+ "fastest-levenshtein": "^1.0.12",
+ "import-local": "^3.0.2",
+ "interpret": "^2.2.0",
+ "rechoir": "^0.7.0",
+ "webpack-merge": "^5.7.3"
},
"dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "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"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "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"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true
},
- "loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
"requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
}
},
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "find-up": "^4.0.0"
}
},
- "path-exists": {
+ "resolve-cwd": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "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": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"requires": {
- "shebang-regex": "^1.0.0"
+ "resolve-from": "^5.0.0"
}
},
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/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"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "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"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
- "yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "dev": true,
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- }
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
}
}
},
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "webpack-merge": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
+ "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
"dev": true,
"requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
+ "clone-deep": "^4.0.1",
+ "wildcard": "^2.0.0"
}
},
+ "webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true
+ },
"whatwg-fetch": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
"integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA=="
},
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -8114,57 +5059,11 @@
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
},
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "wmf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
- "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
- },
- "word": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
- "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
+ "wildcard": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+ "dev": true
},
"word-wrap": {
"version": "1.2.3",
@@ -8172,19 +5071,10 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
- "worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
"workerpool": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
- "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
+ "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
"dev": true
},
"wrap-ansi": {
@@ -8204,45 +5094,9 @@
"dev": true
},
"ws": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz",
- "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==",
- "dev": true
- },
- "xlsx": {
- "version": "0.16.9",
- "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.16.9.tgz",
- "integrity": "sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw==",
- "requires": {
- "adler-32": "~1.2.0",
- "cfb": "^1.1.4",
- "codepage": "~1.14.0",
- "commander": "~2.17.1",
- "crc-32": "~1.2.0",
- "exit-on-epipe": "~1.0.1",
- "fflate": "^0.3.8",
- "ssf": "~0.11.2",
- "wmf": "~1.0.1",
- "word": "~0.3.0"
- },
- "dependencies": {
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
- }
- }
- },
- "xmlhttprequest-ssl": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
- "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
"dev": true
},
"y18n": {
@@ -8295,9 +5149,9 @@
},
"dependencies": {
"camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
},
"decamelize": {
@@ -8308,12 +5162,6 @@
}
}
},
- "yeast": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
- "dev": true
- },
"yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index 428d4dd..b16a7b2 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"main": "index.js",
"scripts": {
"build": "webpack --config webpack.config.js",
- "test": "mocha-chrome test/test.html",
+ "test": "karma start --single-run --browsers ChromeHeadless karma.conf.js",
"dev": "webpack --watch --config webpack.config.js",
"all": "npm run build && npm run test",
"postinstall": "./scripts/post-install.sh"
@@ -16,25 +16,27 @@
"devDependencies": {
"@tensorflow/tfjs-converter": "^1.2.9",
"@tensorflow/tfjs-core": "^1.2.9",
- "@types/chai": "^4.2.12",
- "@types/mathjs": "^6.0.11",
- "@types/mocha": "^8.0.3",
- "@types/p5": "^0.9.1",
- "@typescript-eslint/eslint-plugin": "^3.10.1",
- "@typescript-eslint/parser": "^3.10.1",
- "chai": "^4.2.0",
- "eslint": "^7.9.0",
- "eslint-config-airbnb-base": "^14.2.0",
- "eslint-plugin-import": "^2.22.0",
- "katex": "^0.13.3",
- "mocha": "^8.1.3",
- "mocha-chrome": "^2.2.0",
- "p5": "^1.1.9",
- "p5.touchgui": "^0.5.2",
- "ts-loader": "^8.0.4",
- "typescript": "^3.9.7",
- "webpack": "^4.44.2",
- "webpack-cli": "^3.3.12"
+ "@types/chai": "^4.3.0",
+ "@types/mathjs": "^9.4.2",
+ "@types/mocha": "^9.1.0",
+ "@types/p5": "^1.3.3",
+ "@typescript-eslint/eslint-plugin": "^5.10.0",
+ "@typescript-eslint/parser": "^5.10.0",
+ "chai": "^4.3.4",
+ "eslint": "^8.7.0",
+ "eslint-config-airbnb-base": "^15.0.0",
+ "eslint-plugin-import": "^2.25.4",
+ "karma": "^6.3.11",
+ "karma-chai": "^0.1.0",
+ "karma-chrome-launcher": "^3.1.0",
+ "karma-mocha": "^2.0.1",
+ "katex": "^0.15.2",
+ "mocha": "^9.1.4",
+ "p5": "^1.4.0",
+ "ts-loader": "^9.2.6",
+ "typescript": "^4.5.5",
+ "webpack": "^5.66.0",
+ "webpack-cli": "^4.9.1"
},
"dependencies": {
"@magenta/sketch": "0.2.0",
@@ -52,9 +54,7 @@
"axios": "^0.21.1",
"events": "^3.0.0",
"face-api.js": "~0.22.2",
- "onchange": "^6.1.0",
- "mathjs": "^7.5.1",
- "table": "^5.4.6",
- "xlsx": "^0.16.9"
+ "mathjs": "^10.1.0",
+ "onchange": "^6.1.0"
}
}
diff --git a/src/data/index.ts b/src/data/index.ts
deleted file mode 100644
index e0e9522..0000000
--- a/src/data/index.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import * as tf from '@tensorflow/tfjs';
-
-import * as dfd from '../lib/danfo';
-// @ts-ignore
-import { neuralNetwork } from '../lib/ml5';
-import { Tensor } from '../tensor';
-
-export const { DataFrame } = dfd;
-
-/**
- * Creates a new DataFrame (2D tabular data structure).
- *
- * @param data JSON, Array, or 2D Tensor
- * @returns the tensor
- */
-export const createDataFrame = function createDataFrameObject(
- data: Array | tf.Tensor | Tensor,
- kwargs: object,
-): dfd.DataFrame {
- if (data instanceof Tensor ) {
- return new DataFrame(data.tensor, kwargs);
- } else {
- return new DataFrame(data, kwargs);
- }
-};
-
-/**
- * Loads csv or json data from a file or a URL.
- *
- * @param filename String: name of the file or url to load
- * @param extension String: parse the dataframe by comma-separated values "csv" or JSON "json"
- * @param callback Function: function to be executed after loadDataFrame() completes. On success, the DataFrame object is passed in as the first argument.
- * @param errorCallback Function: function to be executed if there is an error, response is passed in as first argument (Optional)
- */
- export const loadDataFrame = function _loadDataFrame(
- filename: string,
- extension: string,
- callback: any,
- errorCallback: any,
-) {
- if (extension === 'csv') {
- dfd.read_csv(filename)
- .then(callback)
- .catch(errorCallback);
- } else if (extension === 'json') {
- dfd.read_json(filename)
- .then(callback)
- .catch(errorCallback);
- }
- };
diff --git a/src/index.ts b/src/index.ts
index 2bd05f1..e3c25d1 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,6 +1,5 @@
import * as tf from '@tensorflow/tfjs';
import * as math from 'mathjs';
-import * as dfd from './lib/danfo';
import * as ml5 from './lib/ml5';
import { Turtle } from './lib/turtle';
import {
@@ -10,11 +9,6 @@ import {
parse,
simplify,
} from './algebra';
-import {
- DataFrame,
- createDataFrame,
- loadDataFrame,
-} from './data';
import { Tensor, createTensor } from './tensor';
import {
add,
@@ -86,8 +80,6 @@ import {
declare const p5: any;
declare const window: any;
-p5.prototype.createDataFrame = createDataFrame;
-p5.prototype.loadDataFrame = loadDataFrame;
p5.prototype.createTensor = createTensor;
p5.prototype.registerMethod('init', startScope);
p5.prototype.registerMethod('pre', startScope);
@@ -106,9 +98,6 @@ export {
evaluate,
parse,
simplify,
- // Data
- dfd,
- DataFrame,
// Tensor
tf,
Tensor,
diff --git a/src/lib/danfo/config/config.js b/src/lib/danfo/config/config.js
deleted file mode 100644
index 268663d..0000000
--- a/src/lib/danfo/config/config.js
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/**
- * Package wide configuration class
- */
-export class Configs {
- constructor() {
- this.table_width = 17; //set the width of each column printed in console
- this.table_truncate = 16; //set the max number of string before text is truncated in printing
- this.dtype_test_lim = 10;
- this.table_max_row = 21;
- this.table_max_col_in_console = 7;
- }
-
- set_width(val) {
- this.table_width = val;
- }
-
- get get_width() {
- return this.table_width;
- }
-
- set_max_col_in_console(val) {
- this.table_max_col_in_console = val;
- }
-
- get get_max_col_in_console() {
- return this.table_max_col_in_console;
- }
-
- set_row_num(val) {
- this.table_max_row = val;
- }
-
- get get_max_row() {
- return this.table_max_row;
- }
-
-
- get get_truncate() {
- return this.table_truncate;
- }
-
- set_truncate(val) {
- this.table_truncate = val;
- }
-
- get get_dtype_test_lim() {
- return this.dtype_test_lim;
- }
-
- set_dtype_test_lim(val) {
- this.dtype_test_lim = val;
- }
-}
diff --git a/src/lib/danfo/core/concat.js b/src/lib/danfo/core/concat.js
deleted file mode 100644
index aa9bf9a..0000000
--- a/src/lib/danfo/core/concat.js
+++ /dev/null
@@ -1,221 +0,0 @@
-import { DataFrame } from './frame';
-import { Utils } from "./utils";
-import { Series } from './series';
-
-const utils = new Utils();
-
-
-export class Concat {
- constructor(kwargs) {
-
-
- // check if keys exist in kwargs
- utils.__in_object(kwargs, "df_list", "df_list not found: specify the list of dataframe");
- utils.__in_object(kwargs, "axis", "axis not found: specify the axis");
-
- let df_list = null; //set the df_list to null
- let axis = null; // set axis to null
- let indexes = null;
-
- //check if df_list is an array
- if (Array.isArray(kwargs["df_list"])) {
-
- df_list = kwargs["df_list"];
- } else {
- throw new Error("df_list must be an Array of dataFrames/Series");
- }
-
- //check if axis is int and is either 0 or 1
- if (typeof kwargs["axis"] === "number") {
-
- if (kwargs["axis"] == 0 || kwargs["axis"] == 1) {
-
- axis = kwargs["axis"];
- } else {
- axis = 1;
- // throw new Error("Invalid axis: axis must be 0 or 1")
- }
-
- } else {
- throw new Error("axis must be a number");
- }
-
-
- let df_object = Object.assign({}, df_list); // convert the array to object
-
- if (axis == 1) {
-
- let columns = [];
- let duplicate_col_count = {};
- let max_length = 0;
- let a_key = Object.keys(df_object)[0];
- indexes = df_object[a_key].index;
- for (let key in df_object) {
-
- let column = df_object[key].columns;
- let length = df_object[key].values.length;
-
- if (length > max_length) {
- max_length = length;
- }
-
- for (let index in column) {
-
- let col_name = column[index];
- if (col_name in duplicate_col_count) {
-
- let count = duplicate_col_count[col_name];
- let name = `${col_name}_${count + 1}`;
-
- columns.push(name);
-
- duplicate_col_count[col_name] = count + 1;
- } else {
-
- columns.push(col_name);
- duplicate_col_count[col_name] = 1;
- }
- }
-
-
- }
-
- let data = new Array(max_length);
-
- for (let key in df_list) {
-
- let values = df_list[key].values;
-
- for (let index = 0; index < values.length; index++) {
-
- let val = values[index];
- if (typeof data[index] === "undefined") {
-
- if (Array.isArray(val)){
- data[index] = val;
- } else {
- data[index] = [ val ];
- }
-
- } else {
- if (Array.isArray(val)){
- data[index].push(...val);
- } else {
- data[index].push(val);
- }
-
- }
- }
-
- if (values.length < max_length) {
- let column_length = df_list[key].columns.length;
- let null_array = Array(column_length);
-
- for (let col = 0; col < column_length; col++) {
- null_array[col] = NaN;
- }
-
- if (typeof data[max_length - 1] === "undefined") {
- data[max_length - 1] = null_array;
- } else {
- data[max_length - 1].push(...null_array);
- }
- }
- }
-
- let df = new DataFrame(data, { columns: columns, index: indexes }); //convert to dataframe
- return df;
- } else {
- //concatenate base on axis 0
- let columns = [];
- let row_indexes = [];
- let col_i = 0;
- for (let key in df_list) {
- let column = df_list[key].columns;
- columns.push(...column);
- indexes = df_list[key].index;
- let r_index = indexes.map((val) => {
- return `${val}_row${col_i}`;
- });
- row_indexes.push(...r_index);
- col_i += 1;
- }
-
- let column_set = new Set(columns);
-
- columns = Array.from(column_set);
-
- let data = [];
-
- for (let key in df_list) {
-
- let value = df_list[key].values;
-
- // let col_length = value[0].length
-
- let df_columns = df_list[key].columns;
-
- let not_exist = [];
- for (let col_index in columns) {
- let col_name = columns[col_index];
-
- let is_index = df_columns.indexOf(col_name);
-
- if (is_index == -1) {
- not_exist.push(col_name);
- }
- }
- if (not_exist.length > 0) {
- for (let i = 0; i < value.length; i++) {
- let row_value = value[i];
-
- let new_arr = Array(columns.length);
- for (let j = 0; j < columns.length; j++) {
-
- let col_name = columns[j];
- if (not_exist.includes(col_name)) {
-
- new_arr[j] = NaN;
- } else {
- let index = df_columns.indexOf(col_name);
- if (Array.isArray(row_value)){
- new_arr[j] = row_value[index];
- } else {
- new_arr[j] = row_value;
- }
-
- }
-
- }
- data.push(new_arr);
- }
- } else {
- data.push(...value);
- }
-
- }
-
- if (Array.isArray(data[0])){
- let df = new DataFrame(data, { columns: columns, index: row_indexes });
- return df;
- } else {
- let sf = new Series(data, { index: row_indexes });
- return sf;
- }
-
-
- }
-
- }
-}
-
-
-/**
-* Concatenate pandas objects along a particular axis with optional set logic along the other axes.
-* @param {kwargs} {df_list: List of DataFrame to concatenate together axis: 0 for row axis and 1 for index axis
-* @returns {DataFrame}
-*/
-export const concat = (kwargs) => {
- let concat_sf = new Concat(kwargs);
- return concat_sf;
-};
diff --git a/src/lib/danfo/core/date_range.js b/src/lib/danfo/core/date_range.js
deleted file mode 100644
index 8e1ed43..0000000
--- a/src/lib/danfo/core/date_range.js
+++ /dev/null
@@ -1,289 +0,0 @@
-import { Utils } from "./utils";
-
-const utils = new Utils;
-
-/**
- * Generate date range between a specified set of date
- * @param {kwargs} kwargs {
- * start : string
- * end : string
- * period: int
- * freq : string
- * }
- * @returns Array
- */
-export class date_range {
- constructor(kwargs){
-
- this.offset = null;
-
- if (utils.__key_in_object(kwargs, "start")){
- this.start = kwargs["start"];
- } else {
- this.start = null;
- }
-
- if (utils.__key_in_object(kwargs, "end")){
- this.end = kwargs["end"];
- } else {
- this.end = null;
- }
-
- if (utils.__key_in_object(kwargs, "period")){
- this.period = kwargs["period"];
- } else {
- this.period = null;
- }
-
- if (utils.__key_in_object(kwargs, "freq")){
- this.freq = kwargs["freq"];
- } else {
- this.freq = "D";
- }
-
- this.freq_list = [ "M", "D", "s", "H", "m", "Y" ];
-
- if (this.freq.length == 1){
- if (!this.freq_list.includes(this.freq)){
- throw new Error(`invalid freq ${this.freq}`);
- }
- } else {
- let freq_split = this.freq.split("");
- this.offset = parseInt(freq_split[0]);
- this.freq = freq_split[1];
- if (!this.freq_list.includes(this.freq)){
- throw new Error(`invalid freq ${this.freq}`);
- }
- }
-
- let rslt = this.range(this.start, this.end, this.period, this.offset);
- return rslt;
-
- }
-
- range(start, end, period, offset = null){
-
- let start_date = null;
- let end_date = null;
- let start_range = null;
- let end_range = null;
- if (start && end){
- start_date = new Date(start);
- start_range = this.freq_type(start_date, this.freq);
- end_date = new Date(end);
- end_range = this.freq_type(end_date, this.freq);
-
- //check if the end year is greater than start year
- let start_year = start_date.getFullYear();
- let end_year = end_date.getFullYear();
- if ((start_year < end_year)){
- // end_range = start_range + end_range
- if (this.freq == "M"){
- end_range = this.month_end(start_date, end_date);
- } else if (this.freq == "D"){
- end_range = this.day_end(start_date, end_date) - start_range;
-
- }
- }
-
- let range_array = utils.__range(start_range, end_range);
-
- if (offset){
- range_array = this.offset_count(range_array, offset);
- }
-
- if (this.freq == "M"){
- range_array = this.month_range(range_array);
- }
-
- let date_range = range_array.map((x) => {
- return this.set_dateProps(start_date, this.freq, x);
- });
- date_range[date_range.length - 1] = end_date;
-
- let date_string = this.toLocalString(date_range);
-
- return date_string;
- } else if (start && !(end)){
- start_date = new Date(start);
- start_range = this.freq_type(start_date, this.freq);
- end_range = offset ? ((period * offset) - 1) : period - 1;
-
- if (start_range > end_range){
- end_range = end_range + start_range;
- }
- let range_array = utils.__range(start_range, end_range);
-
-
- if (offset){
- range_array = this.offset_count(range_array, offset);
- }
-
- let date_range = range_array.map((x) => {
- return this.set_dateProps(start_date, this.freq, x);
- });
-
- let date_string = this.toLocalString(date_range);
- return date_string;
-
- } else if (end && !(start)){
- end_date = new Date(end);
- end_range = this.freq_type(end_date, this.freq);
- start_range = (end_range - period) + 1;
-
- let range_array = utils.__range(start_range, end_range);
-
- if (offset){
- range_array = this.offset_count(range_array, offset);
- }
-
- let date_range = range_array.map((x) => {
- return this.set_dateProps(end_date, this.freq, x);
- });
-
- let date_string = this.toLocalString(date_range);
- return date_string;
- }
- }
-
- freq_type(date, ftype){
-
- let rslt = null;
- switch (ftype){
-
- case "M":
- rslt = date.getMonth();
- break;
- case "Y":
- rslt = date.getFullYear();
- break;
- case "s":
- rslt = date.getSeconds();
- break;
- case "D":
- rslt = date.getDate();
- break;
- case "H":
- rslt = date.getHours();
- break;
- case "m":
- rslt = date.getMinutes();
- break;
- }
- return rslt;
- }
-
- offset_count(d_array, offset){
-
- let r_array = [];
-
- for (let i = 0; i < d_array.length; i += offset){
- r_array.push(d_array[i]);
- }
- return r_array;
- }
-
- set_dateProps(date, ftype, val){
-
- let new_date = new Date(date.valueOf());
- switch (ftype){
-
- case "M":
- if (val.length == 2){
-
- new_date.setYear(new_date.getFullYear() + val[0]);
- new_date.setMonth(parseInt(val[1]));
- } else {
- new_date.setMonth(val);
- }
-
- break;
- case "Y":
- new_date.setYear(val);
- break;
- case "s":
- new_date.setSeconds(val);
- break;
- case "D":
- new_date.setDate(val);
- break;
- case "H":
- new_date.setHours(val);
- break;
- case "m":
- new_date.setMinutes(val);
- break;
- }
- return new_date;
- }
-
- toLocalString(d_array){
-
- let r_array = d_array.map((x) => {
-
- return x.toLocaleString();
- });
-
- return r_array;
- }
-
- month_end(start_date, end_date){
-
- let end_month = end_date.getMonth();
-
- let diff_year = end_date.getFullYear() - start_date.getFullYear();
-
- let end_range = (12 * diff_year) + end_month;
-
- return end_range;
- }
-
- month_range(range){
-
- let minus = null;
- let y_val = 0;
- let d_range = range.map((x) => {
-
- if (x > 11){
- if (x % 12 == 0){
- minus = x;
- y_val = x / 12;
- return [ y_val, (x - minus) ];
- } else {
- return [ y_val, (x - minus) ];
- }
-
- }
- return [ y_val, x ];
- });
-
- return d_range;
- }
-
- day_end(start_date, end_date){
-
- let month_end = this.month_end(start_date, end_date);
- let range = utils.__range(start_date.getMonth(), month_end);
- let m_range = this.month_range(range);
-
- // let s_date = new Date(start_date.getFullYear(),start_date.getMonth(),0)
- let sum = 0;
- for (let i = 0; i < m_range.length; i++){
-
- let val = m_range[i];
-
- let d_date = null;
- if (i === m_range.length - 1) {
- d_date = new Date(start_date.getFullYear() + val[0], val[1], end_date.getDate()).getDate();
- } else {
- d_date = new Date(start_date.getFullYear() + val[0], val[1], 0).getDate();
-
- }
-
- sum += d_date;
-
- }
- return sum;
-
- }
-}
diff --git a/src/lib/danfo/core/frame.js b/src/lib/danfo/core/frame.js
deleted file mode 100644
index 927fc9f..0000000
--- a/src/lib/danfo/core/frame.js
+++ /dev/null
@@ -1,2172 +0,0 @@
-/**
-* Copyright 2021, JsData.
-* All rights reserved.
-*
-* This source code is licensed under the MIT license found in the
-* LICENSE file in the root directory of this source tree.
-
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-import * as tf from "@tensorflow/tfjs";
-import Ndframe from "./generic";
-import { Series } from "./series";
-import { Utils } from "./utils";
-import { GroupBy } from "./groupby";
-import { Plot } from "../plotting/plot";
-import { indexLoc } from "./indexing";
-import { concat } from "./concat.js";
-
-const utils = new Utils();
-import { std, variance } from "mathjs";
-
-/**
- * A 2D frame object that stores data in structured tabular format
- * @param {data} data, JSON, Array, 2D Tensor
- * @param {kwargs} Object {columns: Array of column names, defaults to ordered numbers when not specified
- * dtypes: strings of data types, automatically inferred when not specified
- * index: row index for subseting array, defaults to ordered numbers when not specified}
- *
- * @returns DataFrame
- */
-export class DataFrame extends Ndframe {
- constructor(data, kwargs) {
- super(data, kwargs);
- this._set_column_property(); //set column property on DataFrame Class for easy accessing using the format df['colname']
- }
-
- _set_column_property() {
- let col_vals = this.col_data;
- let col_names = this.column_names;
-
- col_vals.forEach((col, i) => {
- this[col_names[i]] = null;
- Object.defineProperty(this, col_names[i], {
- get() {
- return new Series(this.col_data[i], {
- columns: col_names[i],
- index: this.index
- });
- },
- set(value) {
- this.addColumn({ column: col_names[i], value: value });
- }
- });
- });
- }
- /**
- * Write a CSV file of the DataFrame contents
- * @param {string} csvFilePath Path to save CSV when in Node.js form
- * @returns {Promise} CSV representation of Object data
- *
- */
- async to_csv(csvFilePath = "") {
- const csvContent = await super.to_csv();
- // Download CSV on Web
- const webCSV = "data:text/csv;charset=utf-8," + csvContent;
- window.open(encodeURI(webCSV));
- return csvContent;
- }
-
- /**
- * Drop a list of rows or columns base on the specified axis
- * @param {Object} kwargs Configuration object
- * {columns: [Array(Columns| Index)] array of column names to drop
- * axis: row=0, columns=1
- * inplace: specify whether to drop the row/column with/without creating a new DataFrame}
- * @returns null | DataFrame
- *
- */
- drop(kwargs = {}) {
- let params_needed = [ "columns", "index", "inplace", "axis" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs["inplace"] = kwargs["inplace"] || false;
-
- if (!("axis" in kwargs)) {
- kwargs["axis"] = 1;
- }
-
- let to_drop = null;
- if ("index" in kwargs && kwargs["axis"] == 0) {
- to_drop = kwargs["index"];
- } else {
- to_drop = kwargs["columns"];
- }
-
- if (kwargs["axis"] == 1) {
- if (!("columns" in kwargs)) {
- throw Error(
- "No column found. Axis of 1 must be accompanied by an array of column(s) names"
- );
- }
- let self = this;
- let new_col_data = {};
- let new_dtype = [];
-
- const index = to_drop.map((x) => {
- let col_idx = self.columns.indexOf(x);
- if (col_idx == -1) {
- throw new Error(`column "${x}" does not exist`);
- }
- return col_idx;
- });
-
- this.col_data.forEach((col, idx) => {
- if (!index.includes(idx)) {
- new_col_data[self.column_names[idx]] = col;
- new_dtype.push(self.dtypes[idx]);
- }
- });
-
- if (!kwargs["inplace"]) {
- let old_cols = self.columns;
- let new_columns = Object.keys(new_col_data);
- let df = new DataFrame(new_col_data, {
- index: self.index,
- dtypes: new_dtype
- });
- df.__set_col_property(df, df.col_data, new_columns, old_cols);
- return df;
- } else {
- let old_cols = self.columns;
- let new_columns = Object.keys(new_col_data);
- this.__update_frame_in_place(null, null, new_col_data, null, new_dtype);
- this.__set_col_property(self, self.col_data, new_columns, old_cols);
- }
- } else {
- if (!utils.__key_in_object(kwargs, "index")) {
- throw Error(
- "No index label found. Axis of 0 must be accompanied by an array of index labels"
- );
- }
- to_drop.forEach((x) => {
- if (!this.index.includes(x))
- throw new Error(`${x} does not exist in index`);
- });
- const values = this.values;
- let data_idx = [];
- let new_data, new_index;
- if (typeof to_drop[0] == "string") {
- //get index of strings labels in rows
- this.index.forEach((idx, i) => {
- if (to_drop.includes(idx)) {
- data_idx.push(i);
- }
- });
- new_data = utils.__remove_arr(values, data_idx);
- new_index = utils.__remove_arr(this.index, data_idx);
- } else {
- new_data = utils.__remove_arr(values, to_drop);
- new_index = utils.__remove_arr(this.index, to_drop);
- }
-
- if (!kwargs["inplace"]) {
- return new DataFrame(new_data, {
- columns: this.columns,
- index: new_index
- });
- } else {
- this.row_data_tensor = tf.tensor(new_data);
- this.data = new_data;
- this.__set_index(new_index);
- }
- }
- }
-
- /**
- * Purely label based indexing. Can accept string label names for both rows and columns
- * @param {kwargs} kwargs object {rows: Array of index, columns: Array of column name(s)}
- * @return DataFrame data stucture
- */
- loc(kwargs = {}) {
- let params_needed = [ "columns", "rows" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs["type"] = "loc";
- let [ new_data, columns, rows ] = indexLoc(this, kwargs);
- let df_columns = { columns: columns };
- let df = new DataFrame(new_data, df_columns);
- df.__set_index(rows);
- return df;
- }
-
- /**
- * Access a dataframe element using row and column index
- * @param {*} kwargs object {rows: Array of index, columns: Array of column index}
- * @return DataFrame data stucture
- */
- iloc(kwargs = {}) {
- let params_needed = [ "columns", "rows" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs["type"] = "iloc";
-
- let [ new_data, columns, rows ] = indexLoc(this, kwargs);
- let df_columns = { columns: columns };
- let df = new DataFrame(new_data, df_columns);
- df.__set_index(rows);
- return df;
- }
-
- /**
- * Prints the first n values in a dataframe
- * @param {rows} rows --> int
- * @returns DataFrame
- */
- head(rows = 5) {
- if (rows > this.values.length || rows < 1) {
- //return all values
- return this;
- } else {
- //Creates a new dataframe with first [rows]
- let data = this.values.slice(0, rows);
- let idx = this.index.slice(0, rows);
- let config = { columns: this.column_names, index: idx };
- let df = new DataFrame(data, config);
- return df;
- }
- }
-
- /**
- * Prints the last n values in a dataframe
- * @param {rows} rows --> int
- * @returns DataFrame
- */
- tail(rows = 5) {
- let row_len = this.values.length;
- if (rows > row_len || rows < 1) {
- //return all values
- return this;
- } else {
- //Creates a new dataframe with last [rows]
- let data = this.values.slice(row_len - rows);
- let indx = this.index.slice(row_len - rows);
- let config = { columns: this.column_names, index: indx };
- let df = new DataFrame(data, config);
- return df;
- }
- }
-
- /**
- * Gets [num] number of random rows in a dataframe
- * @param {num} rows --> The number of rows to return
- * @param {seed} seed --> (Optional) An integer specifying the random seed that will be used to create the distribution.
- * @returns {Promise} resolves to a DataFrame object
- */
- async sample(num = -1, seed = 1) {
- if (num > this.shape[0]) {
- throw new Error("Sample size n cannot be bigger than size of dataset");
- }
- if (num < -1 || num == 0) {
- throw new Error("Sample size cannot be less than -1 or 0");
- }
- num = num === -1 ? this.shape[0] : num;
- const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray();
- const df = this.iloc({ rows: shuffled_index });
- return df;
- }
-
-
- /**
- * Return Addition of DataFrame and other, element-wise (binary operator add).
- * @param {other} DataFrame, Series, Array or Number to add
- * @returns {DataFrame}
- */
- add(other, axis) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types a numeric
- let tensors = this.__get_ops_tensors([ this, other ], axis);
- let sum_vals = tensors[0].add(tensors[1]);
- let col_names = this.columns;
- return this.__get_df_from_tensor(sum_vals, col_names);
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return subtraction of DataFrame and other, element-wise (binary operator add).
- * @param {other} DataFrame, Series, Array or Number to add
- * @returns {DataFrame}
- */
- sub(other, axis) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensors = this.__get_ops_tensors([ this, other ], axis);
- let result = tensors[0].sub(tensors[1]);
- let col_names = this.columns;
- return this.__get_df_from_tensor(result, col_names);
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return subtraction of DataFrame and other, element-wise (binary operator add).
- * @param {other} DataFrame, Series, Array or Number to add
- * @returns {DataFrame}
- */
- mul(other, axis) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensors = this.__get_ops_tensors([ this, other ], axis);
- let result = tensors[0].mul(tensors[1]);
- let col_names = this.columns;
- return this.__get_df_from_tensor(result, col_names);
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return division of DataFrame and other, element-wise (binary operator add).
- * @param {other} DataFrame, Series, Array or Number to add
- * @returns {DataFrame}
- */
- div(other, axis) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensors = this.__get_ops_tensors([ this, other ], axis);
- let result = tensors[0].div(tensors[1]);
- let col_names = this.columns;
- return this.__get_df_from_tensor(result, col_names);
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return division of DataFrame and other, element-wise (binary operator add).
- * @param {other} DataFrame, Series, Array or Number to add
- * @returns {DataFrame}
- */
- pow(other, axis) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensors = this.__get_ops_tensors([ this, other ], axis);
- let result = tensors[0].pow(tensors[1]);
- let col_names = this.columns;
- return this.__get_df_from_tensor(result, col_names);
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return division of DataFrame and other, element-wise (binary operator add).
- * @param {other} DataFrame, Series, Array or Number to add
- * @returns {DataFrame}
- */
- mod(other, axis) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensors = this.__get_ops_tensors([ this, other ], axis);
- let result = tensors[0].mod(tensors[1]);
- let col_names = this.columns;
- return this.__get_df_from_tensor(result, col_names);
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return mean of DataFrame across specified axis.
- * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on
- * @returns {Series}
- */
- mean(axis = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let operands = this.__get_tensor_and_idx(this, axis);
- let tensor_vals = operands[0];
- let idx = operands[1];
- let result = tensor_vals.mean(operands[2]);
- let sf = new Series(result.arraySync(), { index: idx });
- return sf;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return median of DataFrame across specified axis.
- * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on
- * @returns {Series}
- */
- median(axis = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensor_vals, idx;
- if (axis == 1) {
- tensor_vals = this.col_data_tensor.arraySync();
- idx = this.column_names;
- } else {
- tensor_vals = this.row_data_tensor.arraySync();
- idx = this.index;
- }
- let median = utils.__median(tensor_vals, false);
- let sf = new Series(median, { index: idx });
- return sf;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return minimum element in a DataFrame across specified axis.
- * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on
- * @returns {Series}
- */
- min(axis = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let operands = this.__get_tensor_and_idx(this, axis);
- let tensor_vals = operands[0];
- let idx = operands[1];
- let result = tensor_vals.min(operands[2]);
- let sf = new Series(result.arraySync(), { index: idx });
- return sf;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return maximum element of DataFrame across specified axis.
- * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on
- * @returns {Series}
- */
- max(axis = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let operands = this.__get_tensor_and_idx(this, axis);
- let tensor_vals = operands[0];
- let idx = operands[1];
- let result = tensor_vals.max(operands[2]);
- let sf = new Series(result.arraySync(), { index: idx });
- return sf;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return standard deviation of DataFrame across specified axis.
- * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on
- * @returns {Series}
- */
- std(axis = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensor_vals = this.col_data_tensor.arraySync();
- let idx;
- if (axis == 1) {
- idx = this.column_names;
- } else {
- idx = this.index;
- }
- let median = std(tensor_vals, axis);
- let sf = new Series(median, { index: idx });
- return sf;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return variance of DataFrame across specified axis.
- * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on
- * @returns {Series}
- */
- var(axis = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensor_vals = this.col_data_tensor.arraySync();
- let idx;
- if (axis == 1) {
- idx = this.column_names;
- } else {
- idx = this.index;
- }
- let median = variance(tensor_vals, axis);
- let sf = new Series(median, { index: idx });
- return sf;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Return number of non-null elements in a Series
- * @returns {Series}, Count of non-null values
- */
- count(axis = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let tensor_vals, idx;
- if (axis == 1) {
- tensor_vals = this.col_data_tensor.arraySync();
- idx = this.column_names;
- } else {
- tensor_vals = this.row_data_tensor.arraySync();
- idx = this.index;
- }
- let counts = utils.__count_nan(tensor_vals, true, false);
- let sf = new Series(counts, { index: idx });
- return sf;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Rounds values in DataFrame to specified number of dp
- * @returns {DataFrame}, New DataFrame with rounded values
- */
- round(dp = 1) {
- if (this.__frame_is_compactible_for_operation) {
- //check if all types are numeric
- let values = this.values;
- let idx = this.index;
-
- let new_vals = utils.__round(values, dp, false);
- let options = { columns: this.column_names, index: idx };
- let df = new DataFrame(new_vals, options);
- return df;
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
-
- /**
- * Perform Cummulative operations
- * @param {axis} axis [int] {0 or 1}
- * @param {ops} ops {String} name of operation
- * @return {DataFrame}
- */
- __cum_ops(axis = 0, ops) {
- if (!(axis == 0) && !(axis == 1)) {
- throw new Error("axis must be between 0 or 1");
- }
-
- if (this.__frame_is_compactible_for_operation) {
- let data = [];
- let df_data = null;
-
- if (axis == 0) {
- df_data = this.col_data;
- } else {
- df_data = this.values;
- }
-
- for (let i = 0; i < df_data.length; i++) {
- let value = df_data[i];
- let temp_val = value[0];
- let temp_data = [ temp_val ];
- for (let j = 1; j < value.length; j++) {
- let curr_val = value[j];
- switch (ops) {
- case "max":
- if (curr_val > temp_val) {
- temp_val = curr_val;
- temp_data.push(curr_val);
- } else {
- temp_data.push(temp_val);
- }
- break;
- case "min":
- if (curr_val < temp_val) {
- temp_val = curr_val;
- temp_data.push(curr_val);
- } else {
- temp_data.push(temp_val);
- }
- break;
- case "sum":
- temp_val = temp_val + curr_val;
- temp_data.push(temp_val);
-
- break;
- case "prod":
- temp_val = temp_val * curr_val;
- temp_data.push(temp_val);
-
- break;
- }
- }
- data.push(temp_data);
- }
-
- if (axis == 0) {
- data = utils.__get_col_values(data);
- }
-
- return new DataFrame(data, { columns: this.columns });
- } else {
- throw Error("TypeError: Dtypes of columns must be Float of Int");
- }
- }
- /**
- * calculate the cummulative sum along axis
- * @param {kwargs} {axis: [int]}
- * @returns {DataFrame}
- */
- cumsum(kwargs = {}) {
- let axis;
- if (!utils.__key_in_object(kwargs, "axis")) {
- axis = 0;
- } else {
- axis = kwargs["axis"];
- }
- // let axis = kwargs["axis"] || 0
- let data = this.__cum_ops(axis, "sum");
- return data;
- }
-
- /**
- * calculate the cummulative min
- * @param {kwargs} {axis: [int]}
- * @returns {DataFrame}
- */
- cummin(kwargs = {}) {
- let axis;
- if (!utils.__key_in_object(kwargs, "axis")) {
- axis = 0;
- } else {
- axis = kwargs["axis"];
- }
- let data = this.__cum_ops(axis, "min");
- return data;
- }
-
- /**
- * calculate the cummulative max
- * @param {kwargs} {axis: [int]}
- * @returns {DataFrame}
- */
- cummax(kwargs = {}) {
- let axis;
- if (!utils.__key_in_object(kwargs, "axis")) {
- axis = 0;
- } else {
- axis = kwargs["axis"];
- }
- let data = this.__cum_ops(axis, "max");
- return data;
- }
-
- /**
- * calculate the cummulative prod
- * @param {kwargs} {axis: [int]}
- * @returns {DataFrame}
- */
- cumprod(kwargs = {}) {
- let axis;
- if (!utils.__key_in_object(kwargs, "axis")) {
- axis = 0;
- } else {
- axis = kwargs["axis"];
- }
- let data = this.__cum_ops(axis, "prod");
- return data;
- }
-
- /**
- * Makes a new copy of a DataFrame
- * @returns {DataFrame}
- */
- copy() {
- let df = new DataFrame([ ...this.values ], {
- columns: [ ...this.column_names ],
- index: this.index,
- dtypes: this.dtypes
- });
- return df;
- }
-
- /**
- * Generate a new index for the DataFrame.
- * This is useful when the index is meaningless and needs to be reset to the default before another operation.
- * @param {inplace} boolean: Modify the original object or return a new one. Default to false
- */
- reset_index(inplace = false) {
- if (inplace) {
- this.__reset_index();
- } else {
- let df = this.copy();
- df.__reset_index();
- return df;
- }
- }
-
- /**
- * Set the DataFrame index (row labels) using an array of the same length.
- * @param {kwargs} {index: Array of new index values}
- */
- set_index(kwargs = {}) {
- let params_needed = [ "key", "drop", "inplace" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- if (!utils.__key_in_object(kwargs, "key")) {
- throw Error("Index ValueError: You must specify an array of index");
- }
-
- if (!utils.__key_in_object(kwargs, "inplace")) {
- kwargs["inplace"] = false;
- }
-
- if (!utils.__key_in_object(kwargs, "drop")) {
- kwargs["drop"] = true;
- }
-
- if (
- Array.isArray(kwargs["key"]) &&
- kwargs["key"].length != this.index.length
- ) {
- throw Error(
- `Index LengthError: Lenght of new Index array ${kwargs["key"].length} must match lenght of existing index ${this.index.length}`
- );
- }
-
- if (
- typeof kwargs["key"] == "string" &&
- this.column_names.includes(kwargs["key"])
- ) {
- kwargs["key_name"] = kwargs["key"];
- kwargs["key"] = this[kwargs["key"]].values;
- }
- if (kwargs["inplace"]) {
- // this.index_arr = kwargs['key']
- this.__set_index(kwargs["key"]);
- if (kwargs["drop"] && typeof kwargs["key_name"] == "string") {
- this.drop({ columns: [ kwargs["key_name"] ], inplace: true, axis: 1 });
- }
- } else {
- let df = this.copy();
- df.__set_index(kwargs["key"]);
- if (kwargs["drop"] && typeof kwargs["key_name"] == "string") {
- df.drop({ columns: [ kwargs["key_name"] ], axis: 1, inplace: true });
- }
- return df;
- }
- }
-
- /**
- * Generate descriptive statistics for all numeric columns
- * Descriptive statistics include those that summarize the central tendency,
- * dispersion and shape of a dataset’s distribution, excluding NaN values.
- * @returns {Series}
- */
- describe() {
- let numeric_df = this.select_dtypes([ "float32", "int32" ]);
- let col_names = numeric_df.column_names;
- let index = [ "count", "mean", "std", "min", "median", "max", "variance" ];
-
- let stats_arr = {};
- col_names.forEach((name) => {
- let col_series = numeric_df[name];
- let count = col_series.count();
- let mean = col_series.mean();
- let std = col_series.std();
- let min = col_series.min();
- let median = col_series.median();
- let max = col_series.max();
- let variance = col_series.var();
-
- let _stats = [ count, mean, std, min, median, max, variance ];
- stats_arr[name] = _stats;
- });
- let df = new DataFrame(stats_arr, { index: index });
- return df.round(6);
- }
-
- /**
- * Return a subset of the DataFrame’s columns based on the column dtypes.
- * @param {include} scalar or array-like. A selection of dtypes or strings to be included. At least one of these parameters must be supplied.
- * @returns {DataFrame, Series} The subset of the frame including the dtypes.
- */
- select_dtypes(include) {
- let dtypes = this.dtypes;
- let col_names = this.column_names;
- let col_vals = {};
- let original_col_vals = this.col_data;
- const __supported_dtypes = [ "float32", "int32", "string", "boolean" ];
-
- if (include == undefined) {
- //return all
- let df = this.copy();
- return df;
- } else {
- //check if the right types are included
- include.forEach((type) => {
- if (!__supported_dtypes.includes(type)) {
- throw Error(`Dtype Error: dtype ${type} not supported.`);
- }
- });
-
- dtypes.forEach((dtype, i) => {
- if (include.includes(dtype)) {
- col_vals[col_names[i]] = original_col_vals[i];
- }
- });
- let df = new DataFrame(col_vals);
- return df;
- }
- }
-
- /**
- * Sort a Dataframe in ascending or descending order by a specified column name.
- * @param {kwargs} Object, {by: Column name to sort by
- * ascending (Bool): Whether to return sorted values in ascending order or not,
- * inplace (Bool): Whether to perform sorting on the original Series or not}
- * @returns {Series}
- */
- // sort_values(kwargs = {}) {
- // if (utils.__key_in_object(kwargs, "by")) {
- // let sort_col = this.column(kwargs["by"])
- // let sorted_col, sorted_index;
- // let new_row_data = []
-
- // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) {
- // sort_col.sort_values(kwargs)
- // sorted_index = sort_col.index
-
- // } else {
- // sorted_col = sort_col.sort_values(kwargs)
- // sorted_index = sorted_col.index
- // }
-
- // sorted_index.map(idx => {
- // new_row_data.push(this.values[idx])
- // })
-
- // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) {
- // this.data = new_row_data
- // this.index_arr = sorted_index
- // return null
- // } else {
- // let df = new DataFrame(new_row_data, { columns: this.column_names, index: sorted_index, dtype: this.dtypes })
- // return df
- // }
-
- // } else {
- // throw Error("Value Error: must specify the column to sort by")
- // }
-
- // sorted_index.map(idx => {
- // new_row_data.push(this.values[idx])
- // })
-
- // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) {
- // this.__update_frame_in_place(new_row_data, null, null, sorted_index, null)
-
- // } else {
- // let df = new DataFrame(new_row_data, { columns: this.column_names, index: sorted_index, dtype: this.dtypes })
- // return df
- // }
-
- // } else {
- // throw Error("Value Error: must specify the column to sort by")
- // }
-
- // }
-
- /**
- * Return the sum of the values in a DataFrame across a specified axis.
- * @params {kwargs} {axis: 0 for row and 1 for column}
- * @returns {Series}, Sum of values accross axis
- */
- sum(kwargs = { axis: 1 }) {
- if (this.__frame_is_compactible_for_operation()) {
- let values;
- let val_sums = [];
- if (kwargs["axis"] == 1) {
- values = this.col_data;
- } else {
- values = this.values;
- }
-
- values.map((arr) => {
- let temp_sum = tf.tensor(arr).sum().arraySync();
- val_sums.push(Number(temp_sum.toFixed(5)));
- });
-
- let new_index;
- if (kwargs["axis"] == 1) {
- new_index = this.column_names;
- } else {
- new_index = this.index;
- }
- let sf = new Series(val_sums, { columns: "sum", index: new_index });
- return sf;
- } else {
- throw Error("Dtype Error: Operation can not be performed on string type");
- }
- }
-
- /**
- * Returns the absolute values in DataFrame
- * @return {DataFrame}
- */
- abs() {
- let data = this.values;
-
- let tensor_data = tf.tensor(data);
- let abs_data = tensor_data.abs().arraySync();
- let df = new DataFrame(utils.__round(abs_data, 2, false), {
- columns: this.column_names,
- index: this.index
- });
- return df;
- }
-
- __get_tensor_and_idx(df, axis) {
- let tensor_vals, idx, t_axis;
- if (axis == 1) {
- //Tensorflow uses 0 for column and 1 for rows,
- // we use the opposite for consistency with Pandas (0 : row, 1: columns)
- tensor_vals = df.row_data_tensor;
- idx = df.column_names;
- t_axis = 0; //switch the axis
- } else {
- tensor_vals = df.row_data_tensor;
- idx = df.index;
- t_axis = 1;
- }
-
- return [ tensor_vals, idx, t_axis ];
- }
-
- /**
- * Filter DataFrame element base on the element in a column
- * @param {kwargs} kwargs {column : coumn name[string], is: String, to: string| int}
- * @returns {DataFrame}
- */
- query(kwargs) {
- //define the set of operators to be used
- let operators = [ ">", "<", "<=", ">=", "==", "!=" ];
-
- if (!utils.__key_in_object(kwargs, "inplace")) {
- kwargs["inplace"] = false;
- }
-
- let column_index, operator, value;
-
- if (utils.__key_in_object(kwargs, "column")) {
- if (this.columns.includes(kwargs["column"])) {
- column_index = this.columns.indexOf(kwargs["column"]);
- } else {
- throw new Error(`column ${kwargs["column"]} does not exist`);
- }
- } else {
- throw new Error("specify the column");
- }
-
- if (utils.__key_in_object(kwargs, "is")) {
- if (operators.includes(kwargs["is"])) {
- operator = kwargs["is"];
- } else {
- throw new Error(` ${kwargs["is"]} is not a supported logical operator`);
- }
- } else {
- throw new Error("specify an operator in param [is]");
- }
-
- if (utils.__key_in_object(kwargs, "to")) {
- value = kwargs["to"];
- } else {
- throw new Error("specify a value in param [to]");
- }
-
- let data = this.values;
- let index = this.index;
- let new_data = [];
- let new_index = [];
-
- for (var i = 0; i < data.length; i++) {
- let data_value = data[i];
- let elem = data_value[column_index];
- //use eval function for easy operation
- //eval() takes in a string expression e.g eval('2>5')
- if (eval(`elem${operator}value`)) {
- new_data.push(data_value);
- new_index.push(index[i]);
- }
- }
-
- if (new_data.length == 0) {
- throw new Error(
- `query returned empty data; is either ${value} does not exist in column ${kwargs["column"]}`
- );
- }
- if (kwargs["inplace"]) {
- this.__update_frame_in_place(
- new_data,
- this.columns,
- null,
- new_index,
- null
- );
- } else {
- let new_df = new DataFrame(new_data, {
- columns: this.columns,
- index: new_index
- });
- return new_df;
- }
- }
-
- /**
- * Add a column with values to the dataframe
- * @param {kwargs} Object {column :[string] , value:[Array]}
- *
- */
- addColumn(kwargs) {
- utils.__in_object(kwargs, "column", "column name not specified");
- utils.__in_object(kwargs, "value", "column value not specified");
-
- let column_name = kwargs["column"];
- let data_length = this.shape[0];
- let value;
-
- if (kwargs["value"] instanceof Series) {
- value = kwargs["value"].values;
- } else {
- value = kwargs["value"];
- }
-
- if (value.length != data_length) {
- throw new Error(
- `Array length ${value.length} not equal to ${data_length}`
- );
- }
-
- if (this.columns.includes(column_name)) {
- let col_idx = this.columns.indexOf(column_name);
- let new_data = [];
-
- this.values.map((val, index) => {
- let new_val = val.slice();
- new_val[col_idx] = value[index];
- new_data.push(new_val);
- });
- this.__update_frame_in_place(new_data, null, null, null, null);
- } else {
- let data = this.values;
- let new_data = [];
-
- data.map(function (val, index) {
- let new_val = val.slice();
- new_val.push(value[index]);
- new_data.push(new_val);
- });
-
- //add new dtype
- let new_dtypes = [ ...this.dtypes ];
- new_dtypes.push(utils.__get_t(value)[0]);
-
- let new_col_names = [ ...this.columns ];
- new_col_names.push(column_name);
-
- this.__update_frame_in_place(
- new_data,
- new_col_names,
- null,
- null,
- new_dtypes
- );
- Object.defineProperty(this, column_name, {
- get() {
- return new Series(value, { columns: column_name, index: this.index });
- },
- set(value) {
- this.addColumn({ column: column_name, value: value });
- }
- });
- }
- }
-
- /**
- *
- * @param {col} col is a list of column with maximum length of two
- */
- groupby(col) {
- let len = this.shape[0];
- let column_names = this.column_names;
- let col_dict = {};
- let key_column = null;
-
- if (col.length == 2) {
- if (column_names.includes(col[0])) {
- // eslint-disable-next-line no-unused-vars
- var [ data1, col_name1 ] = indexLoc(this, {
- rows: [ `0:${len}` ],
- columns: [ `${col[0]}` ],
- type: "loc"
- });
- } else {
- throw new Error(`column ${col[0]} does not exist`);
- }
- if (column_names.includes(col[1])) {
- // eslint-disable-next-line no-unused-vars
- var [ data2, col_name2 ] = indexLoc(this, {
- rows: [ `0:${len}` ],
- columns: [ `${col[1]}` ],
- type: "loc"
- });
- } else {
- throw new Error(`column ${col[1]} does not exist`);
- }
-
- key_column = [ col[0], col[1] ];
- var column_1_Unique = utils.__unique(data1);
- var column_2_unique = utils.__unique(data2);
-
- for (var i = 0; i < column_1_Unique.length; i++) {
- let col_value = column_1_Unique[i];
- col_dict[col_value] = {};
-
- for (var j = 0; j < column_2_unique.length; j++) {
- let col2_value = column_2_unique[j];
- col_dict[col_value][col2_value] = [];
- }
- }
- } else {
- if (column_names.includes(col[0])) {
- // eslint-disable-next-line no-redeclare
- var [ data1, col_name1 ] = indexLoc(this, {
- rows: [ `0:${len}` ],
- columns: [ `${col[0]}` ],
- type: "loc"
- });
- // console.log(data1)
- } else {
- throw new Error(`column ${col[0]} does not exist`);
- }
- key_column = [ col[0] ];
-
- var column_Unique = utils.__unique(data1);
-
- for (let i = 0; i < column_Unique.length; i++) {
- let col_value = column_Unique[i];
- col_dict[col_value] = [];
- }
- }
-
- let groups = new GroupBy(
- col_dict,
- key_column,
- this.values,
- column_names
- ).group();
-
- return groups;
- }
-
- /**
- * Return a sequence of axis dimension along row and columns
- * @params col_name: the name of a column in the database.
- * @returns tensor of shape 1
- */
- column(col_name) {
- if (!this.columns.includes(col_name)) {
- throw new Error(`column ${col_name} does not exist`);
- }
- let col_indx_objs = utils.__arr_to_obj(this.columns);
- let indx = col_indx_objs[col_name];
- let data = this.col_data[indx];
- return new Series(data, { columns: [ col_name ] });
- }
-
- /**
- * Replace NaN or undefined with a specified value"
- * @param {kwargs}, {column(s): Array of column name(s) to fill. If undefined fill all columns;
- * value(s): Array | Scalar of value(s) to fill with. If single value is specified, we use it to fill all
- * @return {DataFrame}
- */
- fillna(kwargs = {}) {
- let params_needed = [ "columns", "values", "inplace" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- if (!utils.__key_in_object(kwargs, "inplace")) {
- kwargs["inplace"] = false;
- }
-
- if (utils.__key_in_object(kwargs, "columns")) {
- //check if the column(s) exists
- kwargs["columns"].map((col) => {
- if (!this.column_names.includes(col)) {
- throw Error(
- `Value Error: Specified columns must be one of ${this.column_names}, got ${col}`
- );
- }
- });
-
- if (kwargs["columns"].length != kwargs["values"].length) {
- throw Error(`Lenght Error: The lenght of the columns names must be equal to the lenght of the values,
- got column of length ${kwargs["columns"].length} but values of length ${kwargs["values"].length}`);
- }
- let new_col_data = this.col_data;
- kwargs["columns"].map((col, i) => {
- let col_idx = this.column_names.indexOf(col);
- let col_data = this.col_data[col_idx];
-
- let __temp = [];
- col_data.map((val) => {
- //fill the column
- if (isNaN(val) && typeof val != "string") {
- __temp.push(kwargs["values"][i]);
- } else {
- __temp.push(val);
- }
- });
- new_col_data[col_idx] = __temp;
- });
-
- let final_data = {};
- new_col_data.map((col, i) => {
- final_data[this.column_names[i]] = col;
- });
-
- if (kwargs["inplace"]) {
- this.__update_frame_in_place(null, null, final_data, null, null);
- } else {
- return new DataFrame(final_data, { index: this.index });
- }
- } else {
- //fill all columns using same value
- if (!utils.__key_in_object(kwargs, "values")) {
- throw Error("Value Error: Please specify a fill value");
- }
-
- let nan_val;
- if (Array.isArray(kwargs["values"])) {
- nan_val = kwargs["values"][0];
- } else {
- nan_val = kwargs["values"];
- }
- let data = [];
- let values = this.values;
- let columns = this.columns;
-
- for (let i = 0; i < values.length; i++) {
- let temp_data = [];
- let row_value = values[i];
- for (let j = 0; j < row_value.length; j++) {
- if (isNaN(row_value[j]) && typeof row_value[j] != "string") {
- temp_data.push(nan_val);
- } else {
- temp_data.push(row_value[j]);
- }
- }
- data.push(temp_data);
- }
- if (kwargs["inplace"]) {
- this.__update_frame_in_place(data, null, null, null, null);
- } else {
- return new DataFrame(data, { columns: columns, index: this.index });
- }
- }
- }
-
- /**
- * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values,
- * gets mapped to True values. Everything else gets mapped to False values.
- * @return {DataFrame}
- */
- isna() {
- let new_row_data = this.__isna();
- let columns = this.column_names;
- return new DataFrame(new_row_data, { columns: columns, index: this.index });
- }
-
- /**
- * Obtain index containing nan values
- * @return Array list (int)
- */
- nanIndex() {
- let df_values = this.values;
- let index_data = [];
-
- for (let i = 0; i < df_values.length; i++) {
- let row_values = df_values[i];
-
- if (row_values.includes(NaN)) {
- index_data.push(i);
- }
- }
- return index_data;
- }
-
- /**
- * Drop all rows containing NaN
- * @param {kwargs} kwargs [Object] {axis: [int]{o or 1}, inplace:[boolean]}
- */
- dropna(kwargs = {}) {
- let axis = kwargs["axis"] || 0;
- let inplace = kwargs["inplace"] || false;
-
- if (axis != 0 && axis != 1) {
- throw new Error("axis must either be 1 or 0");
- }
-
- let df_values = null;
- let columns = null;
- if (axis == 0) {
- df_values = this.values;
- columns = this.columns;
- } else {
- df_values = this.col_data;
- columns = [];
- }
- let data = [];
-
- for (let i = 0; i < df_values.length; i++) {
- let values = df_values[i];
-
- if (!values.includes(NaN)) {
- if (axis == 0) {
- data.push(values);
- } else {
- columns.push(this.columns[i]);
- if (data.length == 0) {
- for (let j = 0; j < values.length; j++) {
- data.push([ values[j] ]);
- }
- } else {
- for (let j = 0; j < data.length; j++) {
- data[j].push(values[j]);
- }
- }
- }
- }
- }
-
- if (inplace == true) {
- this.data = data;
- this.__reset_index();
- this.columns = columns;
- } else {
- return new DataFrame(data, { columns: columns });
- }
- }
-
- /**
- * Apply a function to each element or along a specified axis of the DataFrame. Supports JavaScipt functions
- * when axis is not specified, and accepts Tensorflow functions when axis is specified.
- * @param {kwargs} kargs is defined as {axis: undefined, 0 or 1, callable: [FUNCTION]}
- * @return Array
- */
- apply(kwargs) {
- let is_callable = utils.__is_function(kwargs["callable"]);
- if (!is_callable) {
- throw new Error("the argument must be a function");
- }
-
- let callable = kwargs["callable"];
- let data = [];
-
- if (utils.__key_in_object(kwargs, "axis")) {
- //This accepts all tensorflow operations
- let axis = kwargs["axis"];
- let df_data;
- if (axis == 0) {
- df_data = this.values;
- } else {
- df_data = this.col_data;
- }
-
- for (let i = 0; i < df_data.length; i++) {
- let value = tf.tensor(df_data[i]);
- let callable_data;
- try {
- callable_data = callable(value).arraySync();
- } catch (error) {
- throw Error(
- `Callable Error: You can only apply JavaScript functions on DataFrames when axis is not specified. This operation is applied on all element, and returns a DataFrame of the same shape.`
- );
- }
-
- data.push(callable_data);
- }
- } else {
- //perform element wise operation. This accepts any JavaScript function
- let df_data = this.values;
- let new_data = [];
- df_data.forEach((row) => {
- let new_row = [];
- row.forEach((val) => {
- new_row.push(callable(val));
- });
- new_data.push(new_row);
- });
- data = new_data;
- }
-
- if (utils.__is_1D_array(data)) {
- if (kwargs["axis"] == 0) {
- let sf = new Series(data, { index: this.index });
- return sf;
- } else {
- let sf = new Series(data, { index: this.column_names });
- return sf;
- }
- } else {
- let df = new DataFrame(data, {
- columns: this.column_names,
- index: this.index
- });
- return df;
- }
- }
-
- /**
- * Returns Less than of DataFrame and other. Supports element wise operations
- * @param {other} DataFrame, Series, Scalar
- * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns
- * @return {DataFrame}
- */
- lt(other, axis) {
- if (this.__frame_is_compactible_for_operation()) {
- if (axis == undefined) {
- axis = 0;
- }
- let df = this.__logical_ops(other, "lt", axis);
- return df;
- } else {
- throw Error("Dtype Error: Operation can not be performed on string type");
- }
- }
-
- /**
- * Returns Greater than of DataFrame and other. Supports element wise operations
- * @param {other} DataFrame, Series, Scalar
- * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns
- * @return {DataFrame}
- */
- gt(other, axis) {
- if (this.__frame_is_compactible_for_operation()) {
- if (axis == undefined) {
- axis = 0;
- }
-
- let df = this.__logical_ops(other, "gt", axis);
- return df;
- } else {
- throw Error("Dtype Error: Operation can not be performed on string type");
- }
- }
-
- /**
- * Returns Less than or Equal to of DataFrame and other. Supports element wise operations
- * @param {other} DataFrame, Series, Scalar
- * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns
- * @return {DataFrame}
- */
- le(other, axis) {
- if (this.__frame_is_compactible_for_operation()) {
- if (axis == undefined) {
- axis = 0;
- }
- let df = this.__logical_ops(other, "le", axis);
- return df;
- } else {
- throw Error("Dtype Error: Operation can not be performed on string type");
- }
- }
-
- /**
- * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations
- * @param {other} DataFrame, Series, Scalar
- * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns
- * @return {DataFrame}
- */
- ge(other, axis) {
- if (this.__frame_is_compactible_for_operation()) {
- if (axis == undefined) {
- axis = 0;
- }
- let df = this.__logical_ops(other, "ge", axis);
- return df;
- } else {
- throw Error("Dtype Error: Operation can not be performed on string type");
- }
- }
-
- /**
- * Returns Not Equal to of DataFrame and other. Supports element wise operations
- * @param {other} DataFrame, Series, Scalar
- * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns
- * @return {DataFrame}
- */
- ne(other, axis) {
- if (this.__frame_is_compactible_for_operation()) {
- if (axis == undefined) {
- axis = 0;
- }
- let df = this.__logical_ops(other, "ne", axis);
- return df;
- } else {
- throw Error("Dtype Error: Operation can not be performed on string type");
- }
- }
-
- /**
- * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations
- * @param {other} DataFrame, Series, Scalar
- * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns
- * @return {DataFrame}
- */
- eq(other, axis) {
- if (this.__frame_is_compactible_for_operation()) {
- if (axis == undefined) {
- axis = 0;
- }
- let df = this.__logical_ops(other, "eq", axis);
- return df;
- } else {
- throw Error("Dtype Error: Operation can not be performed on string type");
- }
- }
-
- /**
- * Replace all occurence of a value with a new specified value"
- * @param {kwargs}, {"replace": the value you want to replace,
- * "with": the new value you want to replace the olde value with
- * "in": Array of column names to replace value in, If not specified, replace all columns}
- * @return {Series}
- */
- replace(kwargs = {}) {
- let params_needed = [ "replace", "with", "in" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- if (utils.__key_in_object(kwargs, "in")) {
- //fill specified columns only
- //check if the column(s) exists
- kwargs["in"].map((col) => {
- if (!this.column_names.includes(col)) {
- throw Error(
- `Value Error: Specified columns must be one of ${this.column_names}, got ${col}`
- );
- }
- });
-
- if (
- utils.__key_in_object(kwargs, "replace") &&
- utils.__key_in_object(kwargs, "with")
- ) {
- let new_col_data_obj = {};
- this.column_names.map((col, idx) => {
- if (kwargs["in"].includes(col)) {
- let temp_col_data = this.col_data[idx]; //retreive the column data
- let __temp = [];
- temp_col_data.map((val) => {
- //replace the values
- if (val == kwargs["replace"]) {
- __temp.push(kwargs["with"]);
- } else {
- __temp.push(val);
- }
- });
- new_col_data_obj[col] = __temp;
- } else {
- new_col_data_obj[col] = this.col_data[idx];
- }
- });
- return new DataFrame(new_col_data_obj, {
- columns: this.column_names,
- index: this.index
- });
- } else {
- throw Error(
- "Params Error: Must specify both 'replace' and 'with' parameters."
- );
- }
- } else {
- //fill every occurence in all columns and rows
- if (
- utils.__key_in_object(kwargs, "replace") &&
- utils.__key_in_object(kwargs, "with")
- ) {
- let replaced_arr = [];
- let old_arr = this.values;
-
- old_arr.map((inner_arr) => {
- let temp = [];
- inner_arr.map((val) => {
- if (val == kwargs["replace"]) {
- temp.push(kwargs["with"]);
- } else {
- temp.push(val);
- }
- });
- replaced_arr.push(temp);
- });
-
- let df = new DataFrame(replaced_arr, {
- index: this.index,
- columns: this.column_names
- });
- return df;
- } else {
- throw Error(
- "Params Error: Must specify both 'replace' and 'with' parameters."
- );
- }
- }
- }
-
- //performs logical comparisons on DataFrame using Tensorflow.js
- __logical_ops(val, logical_type, axis) {
- let int_vals, other;
- if (utils.__is_number(val)) {
- other = val;
- } else {
- if (val.series) {
- //series
- if (axis == 0) {
- if (val.values.length != this.shape[0]) {
- throw Error(
- `Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.`
- );
- }
- other = tf.tensor(val.values);
- } else {
- if (val.values.length != this.shape[1]) {
- throw Error(
- `Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.`
- );
- }
- other = tf.tensor(val.values);
- }
- } else if (Array.isArray(val)) {
- //Array of Array
- other = tf.tensor(val);
- } else {
- //DataFrame
- other = val.row_data_tensor;
- }
- }
-
- switch (logical_type) {
- case "lt":
- int_vals = tf.tensor(this.values).less(other).arraySync();
- break;
- case "gt":
- int_vals = tf.tensor(this.values).greater(other).arraySync();
- break;
- case "le":
- int_vals = tf.tensor(this.values).lessEqual(other).arraySync();
- break;
- case "ge":
- int_vals = tf.tensor(this.values).greaterEqual(other).arraySync();
- break;
- case "ne":
- int_vals = tf.tensor(this.values).notEqual(other).arraySync();
- break;
- case "eq":
- int_vals = tf.tensor(this.values).equal(other).arraySync();
- break;
- }
- let bool_vals = utils.__map_int_to_bool(int_vals, 2);
- let df = new DataFrame(bool_vals, {
- columns: this.column_names,
- index: this.index
- });
- return df;
- }
-
- //slice the corresponding arrays from tensor objects
- __get_df_from_tensor(val, col_names) {
- let len = val.shape[0];
- let new_array = [];
- for (let i = 0; i < len; i++) {
- let arr = val.slice([ i ], [ 1 ]).arraySync()[0];
- new_array.push(arr);
- }
- return new DataFrame(new_array, { columns: col_names });
- }
-
- //checks if DataFrame is compaticble for arithmetic operation
- //compatible Dataframe must have only numerical dtypes
- __frame_is_compactible_for_operation() {
- let dtypes = this.dtypes;
- const str = (element) => element == "string";
-
- if (dtypes.some(str)) {
- return false;
- } else {
- return true;
- }
- }
-
- //retreives the corresponding tensors based on specified axis
- __get_ops_tensors(tensors, axis) {
- if (utils.__is_undefined(tensors[1].series)) {
- //check if add operation is on a series or DataFrame
- let tensors_arr = [];
- if (utils.__is_undefined(axis) || axis == 1) {
- //axis = 1 (column)
- tensors_arr.push(tensors[0].row_data_tensor);
- tensors_arr.push(tensors[1]);
- return tensors_arr;
- } else {
- //axis = 0 (rows)
- tensors_arr.push(tensors[0].col_data_tensor);
- tensors_arr.push(tensors[1]);
- return tensors_arr;
- }
- } else {
- //operation is being performed on a Dataframe or Series
- let tensors_arr = [];
- if (utils.__is_undefined(axis) || axis == 1) {
- //axis = 1 (column)
- let this_tensor, other_tensor;
-
- this_tensor = tensors[0].row_data_tensor; //tensorflow uses 1 for rows axis and 0 for column axis
- if (tensors[1].series) {
- other_tensor = tf.tensor(tensors[1].values, [
- 1,
- tensors[1].values.length
- ]);
- } else {
- other_tensor = tensors[1].row_data_tensor;
- }
-
- tensors_arr.push(this_tensor);
- tensors_arr.push(other_tensor);
- return tensors_arr;
- } else {
- //axis = 0 (rows)
- let this_tensor, other_tensor;
-
- this_tensor = tensors[0].row_data_tensor;
- if (tensors[1].series) {
- other_tensor = tf.tensor(tensors[1].values, [
- tensors[1].values.length,
- 1
- ]);
- } else {
- other_tensor = tensors[1].row_data_tensor;
- }
-
- tensors_arr.push(this_tensor);
- tensors_arr.push(other_tensor);
- return tensors_arr;
- }
- }
- }
-
- /**
- * Transpose index and columns.
- * Reflect the DataFrame over its main diagonal by writing rows as columns and vice-versa.
- * The property T is an accessor to the method transpose().
- */
- transpose() {
- let new_values = this.col_data;
- let new_index = this.column_names;
- let new_col_names = this.index;
-
- let df = new DataFrame(new_values, {
- columns: new_col_names,
- index: new_index
- });
- return df;
- }
-
- /**
- * The property T is an accessor to the method transpose().
- */
- get T() {
- return this.transpose();
- }
-
- /**
- * Returns the data types in the DataFrame
- * @return {Array} list of data types for each column
- */
- get ctypes() {
- let cols = this.column_names;
- let d_types = this.col_types;
- let sf = new Series(d_types, { index: cols });
- return sf;
- }
-
- /**
- * Make plots of Series or DataFrame.
- * Uses the Plotly as backend, so supports Plotly's configuration parameters
- * @param {string} div Name of the div to show the plot
- * @returns {Class} Plot class that expoese different plot type
- */
- plot(div) {
- const plt = new Plot(this, div);
- return plt;
- }
-
- /**
- * Returns the Tensorflow tensor backing the DataFrame Object
- * @returns {2D tensor}
- */
- get tensor() {
- return this.row_data_tensor;
- }
-
- /**
- * Sets the data types of an DataFrame
- * @param {Object} kwargs {column: Name of the column to cast, dtype: [float32, int32, string] data type to cast to}
- * @returns {DataFrame}
- */
- astype(kwargs = {}) {
- if (!utils.__key_in_object(kwargs, "column")) {
- throw Error("Value Error: Please specify a column to cast");
- }
-
- if (!utils.__key_in_object(kwargs, "dtype")) {
- throw Error("Value Error: Please specify dtype to cast to");
- }
-
- if (!this.column_names.includes(kwargs["column"])) {
- throw Error(`'${kwargs["column"]}' not found in columns`);
- }
-
- let col_idx = this.column_names.indexOf(kwargs["column"]);
- let new_types = this.col_types;
- let col_values = this.col_data;
-
- new_types[col_idx] = kwargs["dtype"];
- let new_col_values = [];
- let temp_col = col_values[col_idx];
-
- switch (kwargs["dtype"]) {
- case "float32":
- temp_col.map((val) => {
- new_col_values.push(Number(val));
- });
- col_values[col_idx] = new_col_values;
- break;
- case "int32":
- temp_col.map((val) => {
- new_col_values.push(Number(Number(val).toFixed()));
- });
- col_values[col_idx] = new_col_values;
-
- break;
- case "string":
- temp_col.map((val) => {
- new_col_values.push(String(val));
- });
- col_values[col_idx] = new_col_values;
- break;
- default:
- break;
- }
-
- let new_col_obj = {};
- this.column_names.forEach((cname, i) => {
- new_col_obj[cname] = col_values[i];
- });
-
- let df = new DataFrame(new_col_obj, {
- dtypes: new_types,
- index: this.index
- });
- return df;
- }
-
- /**
- * Return the unique values along an axis
- * @param {axis} Int, 0 for row, and 1 for column. Default to 1
- * @return {Object}
- */
- unique(axis = 1) {
- if (axis == undefined || axis > 1 || axis < 0) {
- throw Error(
- `Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}`
- );
- }
- let _unique = {};
- if (axis == 1) {
- //column
- let col_names = this.column_names;
- col_names.forEach((cname) => {
- _unique[cname] = this[cname].unique().values;
- });
- } else {
- let rows = this.values;
- let _index = this.index;
- rows.forEach((row, i) => {
- let data_set = new Set(row);
- _unique[_index[i]] = Array.from(data_set);
- });
- }
-
- return _unique;
- }
-
- /**
- * Return the number of unique value along an axis
- * @param {axis} Int, 0 for row, and 1 for column. Default to 1
- * @return {Series}
- */
- nunique(axis = 1) {
- if (axis == undefined || axis > 1 || axis < 0) {
- throw Error(
- `Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}`
- );
- }
-
- let _nunique = [];
- if (axis == 1) {
- //column
- let col_names = this.column_names;
- col_names.forEach((cname) => {
- _nunique.push(this[cname].unique().values.length);
- });
- let sf = new Series(_nunique, { index: this.column_names });
- return sf;
- } else {
- let rows = this.values;
- rows.forEach((row) => {
- let data_set = new Set(row);
- _nunique.push(Array.from(data_set).length);
- });
- }
- let sf = new Series(_nunique, { index: this.index });
- return sf;
- }
-
- /**
- * Change axes labels. Object values must be unique (1-to-1).
- * Labels not contained in a dict / Series will be left as-is. Extra labels listed don’t throw an error.
- * @param {Object} kwargs {mapper: Dict-like or functions transformations to apply to that axis’ values,
- * axis: Int, 0 for row, and 1 for column. Default to 1,
- * inplace: Whether to return a new DataFrame. If True then value of copy is ignored.
- * @returns {DataFrame}
- */
- rename(kwargs = {}) {
- let params_needed = [ "mapper", "inplace", "axis" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- // utils.__in_object(kwargs, "columns", "value not defined")
- if (!utils.__key_in_object(kwargs, "inplace")) {
- kwargs["inplace"] = false;
- }
- if (!utils.__key_in_object(kwargs, "axis")) {
- kwargs["axis"] = 1;
- }
- if (!utils.__key_in_object(kwargs, "mapper")) {
- throw Error("Please specify a mapper object");
- }
- if (kwargs["axis"] == 1) {
- //columns
- let old_col_names = Object.keys(kwargs["mapper"]);
- let new_col_names = Object.values(kwargs["mapper"]);
- let col_names = [ ...this.column_names ];
-
- old_col_names.forEach((cname, i) => {
- if (!col_names.includes(cname)) {
- throw Error(
- `Label Error: Specified column '${cname}' not found in column axis`
- );
- }
- let idx = col_names.indexOf(cname);
- col_names[idx] = new_col_names[i];
- });
- if (kwargs["inplace"]) {
- this.columns = col_names;
- this.__set_col_property(this, this.col_data, col_names, old_col_names);
- } else {
- let df = this.copy();
- df.columns = col_names;
- df.__set_col_property(df, df.col_data, col_names, old_col_names);
- return df;
- }
- } else {
- //row
- let old_index = Object.keys(kwargs["mapper"]);
- let row_index = this.index;
- let new_index = [];
-
- row_index.forEach((idx) => {
- if (old_index.includes(idx)) {
- new_index.push(kwargs["mapper"][idx]);
- } else {
- new_index.push(idx);
- }
- });
-
- if (kwargs["inplace"]) {
- this.__set_index(new_index);
- } else {
- let df = this.copy();
- df.__set_index(new_index);
- return df;
- }
- }
- }
- /**
- * Sort DataFrame by index
- * @param {*} kwargs {inplace: Boolean, ascending: Bool}
- * @returns DataFrame
- */
- sort_index(kwargs = {}) {
- let inplace =
- typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"];
- let asc =
- typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"];
-
- let index_val = this.index;
- let [ data, index ] = this.__sort_by(index_val, index_val, asc);
-
- if (inplace) {
- this.__update_frame_in_place(data, null, null, index, null);
- } else {
- let df = this.copy();
- df.__update_frame_in_place(data, null, null, index, null);
- return df;
- }
- }
-
- /**
- * Sort a Dataframe in ascending or descending order by a specified column name.
- * @param {kwargs} Object, {by: Column name to sort by
- * ascending (Bool): Whether to return sorted values in ascending order or not,
- * inplace (Bool): Whether to perform sorting on the original Series or not}
- * @returns {Series}
- */
- sort_values(kwargs = {}) {
- if (!utils.__key_in_object(kwargs, "by")) {
- throw Error(`use col_name to specify column name`);
- }
-
- let inplace =
- typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"];
- let asc =
- typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"];
- let index_val = this.index;
- let column_val = this.column(kwargs["by"]).values;
- let [ data, index ] = this.__sort_by(column_val, index_val, asc);
-
- if (inplace) {
- this.__update_frame_in_place(data, null, null, index, null);
- } else {
- let df = this.copy();
- df.__update_frame_in_place(data, null, null, index, null);
- return df;
- }
- }
-
- //set all columns to DataFrame Property. This ensures easy access to columns as Series
- __set_col_property(self, col_vals, col_names, old_col_names) {
- //delete old name
- old_col_names.forEach((name) => {
- delete self[name];
- });
-
- col_vals.forEach((col, i) => {
- // self[col_names[i]] = new Series(col, { columns: col_names[i], index: self.index })
- Object.defineProperty(self, col_names[i], {
- get() {
- return new Series(col, { columns: col_names[i], index: self.index });
- },
- set(value) {
- this.addColumn({ column: col_names[i], value: value });
- }
- });
- });
- }
-
- //update a DataFrame in place
- __update_frame_in_place(row_data, column_names, col_obj, index, dtypes) {
- if (row_data != undefined) {
- this.data = row_data;
- } else {
- //check column is available and create row from column
- if (col_obj != undefined) {
- let _res = utils._get_row_and_col_values(col_obj);
- this.data = _res[0];
- this.columns = _res[1];
- column_names = _res[1];
- }
- }
-
- if (col_obj != undefined) {
- this.col_data = Object.values(col_obj);
- this.columns = Object.keys(col_obj);
- column_names = Object.keys(col_obj);
- } else {
- //check if row data is available and create column data from rows
- if (row_data != undefined) {
- this.col_data = utils.__get_col_values(row_data); //get column data from row
- }
- }
-
- if (column_names != undefined) {
- this.columns = column_names;
- }
- if (index != undefined) {
- this.index_arr = index;
- }
- if (dtypes != undefined) {
- this.col_types = dtypes;
- }
- }
-
- __sort_by(col_value, df_index, asc) {
- let values = this.values;
-
- let sorted_val = utils.__sort(col_value, asc);
- let duplicate_obj = utils.__get_duplicate(col_value);
-
- let data = [];
- let indexs = [];
- for (let row_i = 0; row_i < sorted_val.length; row_i++) {
- let val = sorted_val[row_i];
- let index = null;
-
- if (val in duplicate_obj) {
- index = duplicate_obj[val]["index"][0];
- duplicate_obj[val]["index"].splice(0, 1);
- } else {
- index = col_value.indexOf(val);
- }
-
- data.push(values[index]);
- indexs.push(df_index[index]);
- }
-
- return [ data, indexs ];
- }
-
- /**
- * Append rows to a DataFrame
- * @param {val} val Array | Series to append to the object
- * @return DataFrame
- */
- append(val) {
- let df2 = null;
- if (Array.isArray(val)) {
- if (Array.isArray(val[0])) {
- if (val[0].length != this.shape[1]) {
- throw Error(
- `length Mixmatch: The lenght of provided value (${val.length}) does not match the original DataFrame (${this.shape[1]})`
- );
- }
- df2 = new DataFrame(val);
- }
- } else if (utils.__is_object(val)) {
- df2 = new DataFrame(val);
- } else if (val instanceof DataFrame) {
- df2 = val.copy();
- }
-
- let concat_df = concat({ df_list: [ this, df2 ], axis: 0 });
-
- return concat_df;
- }
-}
diff --git a/src/lib/danfo/core/generic.js b/src/lib/danfo/core/generic.js
deleted file mode 100644
index 90bb2ec..0000000
--- a/src/lib/danfo/core/generic.js
+++ /dev/null
@@ -1,500 +0,0 @@
-/**
-* Copyright 2020, JsData.
-* All rights reserved.
-*
-* This source code is licensed under the MIT license found in the
-* LICENSE file in the root directory of this source tree.
-
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
- *
-*/
-
-import { tensor, Tensor } from "@tensorflow/tfjs";
-import { table } from "table";
-import { Utils } from "./utils";
-import { Configs } from "../config/config";
-
-
-const utils = new Utils();
-const config = new Configs(); //package wide configuration object
-export default class NDframe {
- /**
- * N-Dimensiona data structure. Stores multi-dimensional
- * data in a size-mutable, labeled data structure. Analogous to the Python Pandas DataFrame.
- *
- * @param {data} Array JSON, Tensor. Block of data.
- * @param {kwargs} Object Optional Configuration Object
- * {columns: Array of column names. If not specified and data is an array of array, use range index.
- * dtypes: Data types of the columns,
- * index: row index for subseting array }
- *
- * @returns NDframe
- */
-
- constructor(data, kwargs = {}) {
- this.kwargs = kwargs;
-
- if (data instanceof Tensor) {
- data = data.arraySync();
- }
-
- if (utils.__is_1D_array(data)) {
- this.series = true;
- this._read_array(data);
- } else {
- this.series = false;
- if (utils.__is_object(data[0])) {
- //check the type of the first object in the data
- this._read_object(data, 1); //type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}]
- } else if (utils.__is_object(data)) {
- this._read_object(data, 2); //type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}]
- } else if (
- Array.isArray(data[0]) ||
- utils.__is_number(data[0]) ||
- utils.__is_string(data[0])
- ) {
- this._read_array(data);
- } else {
- throw new Error("File format not supported");
- }
- }
- }
-
- /**
- *
- * @param {Array} data
- * Read array of data into NDFrame
- */
- _read_array(data) {
- this.data = utils.__replace_undefined_with_NaN(data, this.series);
- this.row_data_tensor = tensor(this.data);
-
- if (this.series) {
- this.col_data = [ this.values ];
- } else {
- this.col_data = utils.__get_col_values(this.data);
- }
-
- this.col_data_tensor = tensor(this.col_data); //data saved as 2D column tensors
-
- if ("index" in this.kwargs) {
- this.__set_index(this.kwargs["index"]);
- } else {
- this.index_arr = [ ...Array(this.row_data_tensor.shape[0]).keys() ];
- }
-
- if (this.ndim == 1) {
- //series array
- if ("columns" in this.kwargs) {
- this.columns = this.kwargs["columns"];
- } else {
- this.columns = [ "0" ];
- }
- } else {
- //2D Array
- if ("columns" in this.kwargs) {
- if (
- this.kwargs["columns"].length == Number(this.row_data_tensor.shape[1])
- ) {
- this.columns = this.kwargs["columns"];
- } else {
- throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has length of ${this.row_data_tensor.shape[1]}`;
- }
- } else {
- this.columns = [ ...Array(this.row_data_tensor.shape[1]).keys() ];
- }
- }
-
- if ("dtypes" in this.kwargs) {
- this._set_col_types(this.kwargs["dtypes"], false);
- } else {
- this._set_col_types(null, true); //infer dtypes
- }
- }
-
- /**
- * Convert Javascript Object of arrays into NDFrame
- * @param {*} data Object of Arrays
- * @param {*} type type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}],
- * type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}]
- */
- _read_object(data, type) {
- if (type == 2) {
- let [ row_arr, col_names ] = utils._get_row_and_col_values(data);
- this.kwargs["columns"] = col_names;
- this._read_array(row_arr);
- } else {
- let data_arr = data.map((item) => {
- return Object.values(item);
- });
-
- this.data = utils.__replace_undefined_with_NaN(data_arr, this.series); //Defualt array data in row format
- this.row_data_tensor = tensor(this.data); //data saved as row tensors
- this.kwargs["columns"] = Object.keys(Object.values(data)[0]); //get names of the column from the first entry
-
- if (this.series) {
- this.col_data = [ this.values ]; //data saved as 1D column tensors
- } else {
- this.col_data = utils.__get_col_values(this.data);
- }
-
- this.col_data_tensor = tensor(this.col_data); //data saved as 2D column tensors
-
- if ("index" in this.kwargs) {
- this.__set_index(this.kwargs["index"]);
- } else {
- this.index_arr = [ ...Array(this.row_data_tensor.shape[0]).keys() ];
- }
-
- if (this.ndim == 1) {
- //series array
- if (!this.kwargs["columns"]) {
- this.columns = [ "0" ];
- } else {
- this.columns = this.kwargs["columns"];
- }
- } else {
- //2D Array
- if ("columns" in this.kwargs) {
- if (
- this.kwargs["columns"].length ==
- Number(this.row_data_tensor.shape[1])
- ) {
- this.columns = this.kwargs["columns"];
- } else {
- throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has column length of ${this.row_data_tensor.shape[1]}`;
- }
- } else {
- this.columns = [ ...Array(this.row_data_tensor.shape[1]).keys() ];
- }
- }
-
- if ("dtypes" in this.kwargs) {
- this._set_col_types(this.kwargs["dtypes"], false);
- } else {
- this._set_col_types(null, true); //infer dtypes
- }
- }
- }
-
- /**
- * Sets the data type of the NDFrame. Supported types are ['float32', "int32", 'string', 'boolean']
- * @param {Array} dtypes Array of data types.
- * @param {Boolean} infer Whether to automatically infer the dtypes from the Object
- */
- _set_col_types(dtypes, infer) {
- const __supported_dtypes = [ "float32", "int32", "string", "boolean" ];
-
- if (infer) {
- if (this.series) {
- this.col_types = utils.__get_t(this.values);
- } else {
- this.col_types = utils.__get_t(this.col_data);
- }
- } else {
- if (this.series) {
- this.col_types = dtypes;
- } else {
- if (dtypes.length != this.columns.length) {
- throw new Error(
- `length Mixmatch: Length of specified dtypes is ${dtypes.length}, but length of columns is ${this.columns.length}`
- );
- }
- if (Array.isArray(dtypes)) {
- dtypes.forEach((type, indx) => {
- if (!__supported_dtypes.includes(type)) {
- throw new Error(
- `dtype error: dtype specified at index ${indx} is not supported`
- );
- }
- });
- this.col_types = dtypes;
- } else {
- throw new Error(`dtypes must be an Array of types`);
- }
- }
- }
- }
-
- /**
- * Returns the data types in the DataFrame
- * @return {Array} list of data types for each column
- */
- get dtypes() {
- // let col_data = utils.get_col_values(this.data)
- // this.col_types = utils.__get_t(col_data)
- // let sf = new Series({dtypes: this.col_types, index: this.column_names})
- return this.col_types;
- }
-
- /**
- * Gets dimension of the NDFrame
- * @returns {Integer} dimension of NDFrame
- */
- get ndim() {
- if (this.series) {
- return 1;
- } else {
- return this.row_data_tensor.shape.length;
- }
- }
-
- /**
- * Gets values for index and columns
- * @return {Object} axes configuration for index and columns of NDFrame
- */
- get axes() {
- let axes = {
- index: this.index,
- columns: this.columns
- };
- return axes;
- }
-
- /**
- * Gets index of the NDframe
- * @return {Array} array of index from series
- */
- get index() {
- return this.index_arr;
- }
-
- /**
- * Sets index of the NDFrame
- */
- __set_index(labels) {
- if (!Array.isArray(labels)) {
- throw Error("Value Error: index must be an array");
- }
- if (labels.length > this.shape[0] || labels.length < this.shape[0]) {
- throw Error("Value Error: length of labels must match row shape of data");
- }
- this.index_arr = labels;
- }
-
- /**
- * Generate a new index for NDFrame.
- */
- __reset_index() {
- let new_idx = [ ...Array(this.values.length).keys() ];
- this.index_arr = new_idx;
- }
-
- /**
- * Gets a sequence of axis dimension along row and columns
- * @returns {Array} the shape of the NDFrame
- */
- get shape() {
- if (this.series) {
- return [ this.values.length, 1 ];
- } else {
- return this.row_data_tensor.shape;
- }
- }
-
- /**
- * Gets the values in the NDFrame in JS array
- * @returns {Array} Arrays of arrays of data instances
- */
- get values() {
- return this.data;
- }
-
- /**
- * Gets the column names of the data
- * @returns {Array} strings of column names
- */
- get column_names() {
- return this.columns;
- }
-
- /**
- * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values
- * gets mapped to True values. Everything else gets mapped to False values.
- * @return {Array}
- */
- __isna() {
- let new_arr = [];
- if (this.series) {
- this.values.map((val) => {
- // eslint-disable-next-line use-isnan
- if (val == NaN) {
- new_arr.push(true);
- } else if (isNaN(val) && typeof val != "string") {
- new_arr.push(true);
- } else {
- new_arr.push(false);
- }
- });
- } else {
- let row_data = this.values;
- row_data.map((arr) => {
- let temp_arr = [];
- arr.map((val) => {
- // eslint-disable-next-line use-isnan
- if (val == NaN) {
- temp_arr.push(true);
- } else if (isNaN(val) && typeof val != "string") {
- temp_arr.push(true);
- } else {
- temp_arr.push(false);
- }
- });
- new_arr.push(temp_arr);
- });
- }
- return new_arr;
- }
-
- /*
- * Gets binary size of the NDFrame
- * @returns {String} size of the NDFrame
- */
- get size() {
- return this.row_data_tensor.size;
- }
-
- /**
- * Return object data as comma-separated values (csv).
- * @returns {Promise} CSV representation of Object data
- */
- async to_csv() {
- if (this.series) {
- let csv = this.values.join(",");
- return csv;
- } else {
- let records = this.values;
- let header = this.column_names.join(",");
-
- let csv_str = `${header}\n`;
- records.forEach((val) => {
- let row = `${val.join(",")}\n`;
- csv_str += row;
- });
- return csv_str;
- }
- }
-
- /**
- * Return object as JSON string.
- * @returns {Promise } JSON representation of Object data
- */
- async to_json() {
- if (this.series) {
- let obj = {};
- obj[this.column_names[0]] = this.values;
- let json = JSON.stringify(obj);
- return json;
- } else {
- let values = this.values;
- let header = this.column_names;
- let json_arr = [];
- values.forEach((val) => {
- let obj = {};
- header.forEach((h, i) => {
- obj[h] = val[i];
- });
- json_arr.push(obj);
- });
- return JSON.stringify(json_arr);
- }
- }
-
- /**
- * Prints the data in a Series as a grid of row and columns
- */
- toString() {
- let table_width = config.get_width;
- let table_truncate = config.get_truncate;
- let max_row = config.get_max_row;
- let max_col_in_console = config.get_max_col_in_console;
-
- // let data;
- let data_arr = [];
- let table_config = {};
- // let idx = this.index
- let col_len = this.columns.length;
- // let row_len = this.values.length - 1
- let header = [];
-
- if (col_len > max_col_in_console) {
- //truncate displayed columns to fit in the console
- let first_4_cols = this.columns.slice(0, 4);
- let last_3_cols = this.columns.slice(col_len - 4);
- //join columns with truncate ellipse in the middle
- header = [ "" ].concat(first_4_cols).concat([ "..." ]).concat(last_3_cols);
-
- let sub_idx, values_1, value_2;
-
- if (this.values.length > max_row) {
- //slice Object to show [max_rows]
- let df_subset_1 = this.iloc({
- rows: [ `0:${max_row}` ],
- columns: [ "0:4" ]
- });
- let df_subset_2 = this.iloc({
- rows: [ `0:${max_row}` ],
- columns: [ `${col_len - 4}:` ]
- });
- sub_idx = this.index.slice(0, max_row);
- values_1 = df_subset_1.values;
- value_2 = df_subset_2.values;
- } else {
- let df_subset_1 = this.iloc({ rows: [ "0:" ], columns: [ "0:4" ] });
- let df_subset_2 = this.iloc({
- rows: [ "0:" ],
- columns: [ `${col_len - 4}:` ]
- });
- sub_idx = this.index.slice(0, max_row);
- values_1 = df_subset_1.values;
- value_2 = df_subset_2.values;
- }
-
- // merge dfs
- sub_idx.map((val, i) => {
- let row = [ val ].concat(values_1[i]).concat([ "..." ]).concat(value_2[i]);
- data_arr.push(row);
- });
- } else {
- //display all columns
- header = [ "" ].concat(this.columns);
- let idx, values;
- if (this.values.length > max_row) {
- //slice Object to show a max of [max_rows]
- let data = this.loc({ rows: [ `0:${max_row}` ], columns: this.columns });
- idx = data.index;
- values = data.values;
- } else {
- values = this.values;
- idx = this.index;
- }
-
- // merge cols
- idx.forEach((val, i) => {
- let row = [ val ].concat(values[i]);
- data_arr.push(row);
- });
- }
-
- //set column width of all columns
- table_config[0] = 10;
- for (let index = 1; index < header.length; index++) {
- table_config[index] = { width: table_width, truncate: table_truncate };
- }
-
- let table_data = [ header ].concat(data_arr); //Adds the column names to values before printing
- return table(table_data, { columns: table_config });
- }
-
- /**
- * Pretty prints n number of rows in a DataFrame or Series in the console
- * @param {rows} Number of rows to print
- */
- print() {
- console.log(this + "");
- }
-}
diff --git a/src/lib/danfo/core/get_dummies.js b/src/lib/danfo/core/get_dummies.js
deleted file mode 100644
index 32a5391..0000000
--- a/src/lib/danfo/core/get_dummies.js
+++ /dev/null
@@ -1,139 +0,0 @@
-import { DataFrame } from "./frame";
-import { Utils } from "./utils";
-
-const utils = new Utils;
-
-function oneHot(in_data, prefix, prefix_sep) {
- let data_set = new Set(in_data);
- let labels = Array.from(data_set);
- let prefix_labels = null;
- if (prefix) {
- prefix_labels = labels.map((x) => {
- return prefix + prefix_sep + x;
- });
- } else {
- prefix_labels = labels.map((x) => {
- return x;
- });
- }
-
- let onehot_data = utils.__zeros(in_data.length, labels.length);
-
- for (let i = 0; i < in_data.length; i++) {
-
- let elem = in_data[i];
- let elem_index = labels.indexOf(elem);
- onehot_data[i][elem_index] = 1;
- }
-
- return [ onehot_data, prefix_labels ];
-
-}
-
-/**
- * Generate one hot encoding for categorical variable in arrays |Serie | and Dataframe
- * @param {kwargs} kwargs { data : Array | Series | DataFrame,
- * prefix_sep: String e.g "_",
- * prefix: String | Array of String,
- * columns: [Array] columns to be encoded in DataFrame.
- * }
- */
-function get_dummy(kwargs = {}) {
- utils.__in_object(kwargs, "data", "data not provided");
-
- let prefix = kwargs["prefix"] || null;
- let prefix_sep = kwargs["prefix_sep"] || [ "_" ];
- let columns = kwargs["columns"] || null;
-
- let is_dataframe = false;
- let in_data = null;
-
- if (Array.isArray(kwargs["data"])) {
- in_data = kwargs["data"];
- } else if (kwargs["data"] instanceof DataFrame) {
- in_data = kwargs["data"];
- is_dataframe = true;
- } else {
- in_data = kwargs["data"].values;
- }
-
- if (!is_dataframe) {
- let [ onehot_data, prefix_labels ] = oneHot(in_data, prefix, prefix_sep);
-
- return new DataFrame(onehot_data, { columns: prefix_labels });
- } else {
-
- let column_index = [];
- if (!columns) {
- columns = [];
- in_data.col_types.map((x, i) => {
-
- if (x == "string") {
- let name_column = in_data.columns[i];
- columns.push(name_column);
- column_index.push(i);
- }
- });
- } else {
-
- columns.forEach((x) => {
- let col_idx = columns.indexOf(x);
- column_index.push(col_idx);
- });
- }
-
- if (prefix) {
- if (Array.isArray(prefix)) {
- if (prefix.length != columns.length) {
- throw new Error("prefix must be the same length with the number of onehot encoding column");
- }
- } else {
- throw new Error("prefix for dataframe must be an array");
- }
- } else {
- prefix = columns;
- }
-
- let df_data = in_data.values;
- let df_columns = in_data.columns;
- let col_data = in_data.col_data;
-
- let column_data = [];
- column_index.forEach((x) => {
- column_data.push(col_data[x]);
- });
-
- let one_hotColumns = [];
- let one_hotData = [];
- column_data.forEach((data, i) => {
-
- let [ onehot_data, prefix_labels ] = oneHot(data, prefix[i], prefix_sep);
- one_hotColumns.push(...prefix_labels);
-
- if (one_hotData.length == 0) {
- one_hotData.push(...onehot_data);
- } else {
- onehot_data.forEach((x, i) => {
- one_hotData[i].push(...x);
- });
- }
-
- });
-
- let final_data = df_data.map((elem, i) => {
-
- let ele = elem.slice();
- let dt = utils.__remove_arr(ele, column_index);
- dt.push(...one_hotData[i]);
- return dt;
- });
-
- let final_columns = utils.__remove_arr(df_columns, column_index);
- final_columns.push(...one_hotColumns);
-
- return new DataFrame(final_data, { columns: final_columns });
- }
-
-}
-
-export const get_dummies = get_dummy;
diff --git a/src/lib/danfo/core/groupby.js b/src/lib/danfo/core/groupby.js
deleted file mode 100644
index 91f34d3..0000000
--- a/src/lib/danfo/core/groupby.js
+++ /dev/null
@@ -1,511 +0,0 @@
-import { DataFrame } from "./frame";
-import { Utils } from "./utils";
-import { Series } from "./series";
-const utils = new Utils;
-
-/**
- * The class performs all groupby operation on a dataframe
- * involveing all aggregate funciton
- * @param {col_dict} col_dict Object of unique keys in the group by column
- * @param {key_col} key_col Array contains the column names
- * @param {data} Array the dataframe data
- * @param {column_name} Array of all column name in the dataframe.
- */
-export class GroupBy {
- constructor(col_dict, key_col, data, column_name) {
-
- this.key_col = key_col;
- this.col_dict = col_dict;
- this.data = data;
- this.column_name = column_name;
- this.data_tensors = {}; //store the tensor version of the groupby data
-
- }
-
- /**
- * Group the dataframe by the column by
- * creating an object to store the grouping
- * @returns Groupby data structure
- */
- group(){
-
- if (this.key_col.length == 2){ //check if the dataframe is group by two columns
-
-
- for (var i = 0; i < this.data.length; i++){
-
- let col1_index = this.column_name.indexOf(this.key_col[0]);
- let col2_index = this.column_name.indexOf(this.key_col[1]);
-
- let value = this.data[i];
-
- let col1_value = value[col1_index];
- let col2_value = value[col2_index];
-
-
- if (Object.prototype.hasOwnProperty.call(this.col_dict, col1_value)){
- if (Object.prototype.hasOwnProperty.call(this.col_dict[col1_value], col2_value)){
-
- this.col_dict[col1_value][col2_value].push(value);
- }
-
- }
-
- }
-
- for (var key in this.col_dict){
- this.data_tensors[key] = {};
-
- for (var key2 in this.col_dict[key]){
-
- let data = this.col_dict[key][key2];
-
- if (data.length == 0){
- delete this.col_dict[key][key2]; //delete the empty key.
- } else {
- this.data_tensors[key][key2] = new DataFrame(data, { columns:this.column_name });
- }
-
- }
- }
- } else {
- for (let i = 0; i < this.data.length; i++){
-
- let col1_index = this.column_name.indexOf(this.key_col[0]);
-
- let value = this.data[i];
-
- let col1_value = value[col1_index];
-
- if (Object.prototype.hasOwnProperty.call(this.col_dict, col1_value)){
-
- this.col_dict[col1_value].push(value);
-
- }
- }
- for (let key in this.col_dict){
- let data = this.col_dict[key];
-
- this.data_tensors[key] = new DataFrame(data, { columns:this.column_name });
-
- }
-
- }
-
- return this;
-
- }
-
- /**
- * obtain the column for each group
- * @param {col_name} col_name [Array]--> array of column names
- * @return Groupby data structure
- */
- col(col_names){
- this.selected_column = col_names; // store col_names for use later in .apply
- if (Array.isArray(col_names)){
-
- for (let i = 0; i < col_names.length; i++){
-
- let col_name = col_names[i];
- if (!this.column_name.includes(col_name)){
- throw new Error(`Column ${col_name} does not exist in groups`);
- }
- }
- } else {
- throw new Error(`Col_name must be an array of column`);
- }
-
- // let group_col_name = col_names; // store the column name
- let group_col = {};
- if (this.key_col.length == 2){
-
- for (var key1 in this.data_tensors){
-
- group_col[key1] = {};
- for (var key2 in this.data_tensors[key1]){
-
- group_col[key1][key2] = [];
- for (let i = 0; i < col_names.length; i++){
- let col_name = col_names[i];
- let data = this.data_tensors[key1][key2].column(col_name);
- group_col[key1][key2].push(data);
- }
-
- }
- }
- } else {
- for (let key1 in this.data_tensors){
-
- group_col[key1] = [];
- for (let i = 0; i < col_names.length; i++){
- let col_name = col_names[i];
- let data = this.data_tensors[key1].column(col_name);
- group_col[key1].push(data);
- }
-
- }
- }
- const gp = new GroupBy(
- null,
- this.key_col,
- null,
- col_names
- );
-
- gp.group_col = group_col;
- gp.group_col_name = col_names;
- // return gp;
- return gp;
- }
-
-
- /**
- * Basic root of all column arithemetic in groups
- * @param {operation} operatioin String
- */
- arithemetic(operation){
-
- let ops_name = [ "mean", "sum", "count", "mode", "std", "var", "cumsum", "cumprod",
- "cummax", "cummin" ];
-
- let ops_map = {
- "mean": "mean()",
- "sum": "sum()",
- "mode": "mode()",
- "count": "count()",
- "std" : "std()",
- "var" : "var()",
- "cumsum" : "cumsum().values",
- "cumprod": "cumprod().values",
- "cummax" : "cummax().values",
- "cummin" : "cummin().values"
- };
- let is_array = false;
- //the local variable to store variables to be used in eval
- // this seems not to be needed in Node version, since local
- //variable are easily accessed in the eval function
- let local = null;
-
- if (Array.isArray(operation)){
- is_array = true;
- }
-
- if (this.key_col.length == 2){
-
- let count_group = {};
-
- for (var key1 in this.group_col){
-
- count_group[key1] = {};
- for (var key2 in this.group_col[key1]){
-
- count_group[key1][key2] = [];
- for (let i = 0; i < this.group_col[key1][key2].length; i++ ){
- let data = null;
- if (is_array){
- let op = operation[i];
- if (!ops_name.includes(op)){
- throw new Error("operation does not exist");
- }
- local = this.group_col[key1][key2][i];
- data = eval(`local.${ops_map[op]}`);
-
- } else {
- local = this.group_col[key1][key2][i];
- data = eval(`local.${operation}`);
- }
- count_group[key1][key2].push(data);
-
- }
-
- }
- }
- return count_group;
-
- } else {
- let count_group = {};
-
- for (let key1 in this.group_col){
-
- count_group[key1] = [];
- for (let i = 0; i < this.group_col[key1].length; i++ ){
- let data = null;
- if (is_array){
- let op = operation[i];
- if (!ops_name.includes(op)){
- throw new Error("operation does not exist");
- }
- local = this.group_col[key1][i];
- data = eval(`local.${ops_map[op]}`);
-
- } else {
- local = this.group_col[key1][i];
- data = eval(`local.${operation}`);
- }
-
- count_group[key1].push(data);
-
- }
- }
-
- return count_group;
- }
-
-
- }
-
- operations(ops, name) {
- if (!this.group_col) {
- let column = this.column_name.filter((val) => !this.key_col.includes(val));
- let col_gp = this.col(column);
- let value = col_gp.arithemetic(ops);
- let df = col_gp.to_DataFrame(col_gp.key_col, col_gp.group_col_name, value, name);
- return df;
- } else {
- let value = this.arithemetic(ops);
- let df = this.to_DataFrame(this.key_col, this.group_col_name, value, name);
- return df;
- }
- }
- count(){
- return this.operations("count()", "count");
- }
-
- sum(){
- return this.operations("sum()", "sum");
- }
-
- std(){
- return this.operations("std()", "std");
- }
-
- var(){
- return this.operations("var()", "var");
- }
-
- mean(){
- return this.operations("mean()", "mean");
- }
-
- cumsum(){
- return this.operations("cumsum().values", "cumsum");
- }
- cummax(){
- return this.operations("cummax().values", "cummax");
- }
-
- cumprod(){
- return this.operations("cumprod().values", "cumprod");
- }
-
- cummin(){
- return this.operations("cummin().values", "cummin");
- }
-
- max(){
- return this.operations("max()", "max");
- }
-
- min(){
- return this.operations("min()", "min");
- }
-
- /**
- * returns dataframe of a group
- * @param {*} key [Array]
- */
- get_groups(key){
-
- if (this.key_col.length == 2){
-
- if (key.length == 2){
- let key1 = key[0];
- let key2 = key[1];
-
- utils.__is_object(this.data_tensors, key1, `Key Error: ${key1} not in object`);
- return this.data_tensors[key1][key2];
- } else { throw new Error("specify the two group by column"); }
- } else if (this.key_col.length == 1){
-
- if (key.length == 1){
-
- utils.__is_object(this.data_tensors, key[0], `Key Error: ${key[0]} not in object`);
- return this.data_tensors[key[0]];
- } else { throw new Error("specify the one group by column"); }
- }
- return this.data_tensors[key];
- }
-
- /**
- * Map every column to an operaton
- * @param {kwargs} kwargs {column name: math operation}
- * @example .agg({"A": "mean","B": "sum","C":"count"})
- */
- agg(kwargs = {}){
-
- let columns = Object.keys(kwargs);
- let operations = columns.map((x) => { return kwargs[x].toLocaleLowerCase(); });
-
- let col_gp = this.col(columns);
-
- let data = col_gp.arithemetic(operations);
- let df = this.to_DataFrame(col_gp.key_col, col_gp.group_col_name, data, operations);
-
- return df;
- }
-
- to_DataFrame(key_col, col, data, ops){
-
- if (key_col.length == 2){
- let df_data = [];
- for (let key_1 in data){
-
- let key_val = data[key_1];
-
- for (let key_2 in key_val){
- let k_data = key_val[key_2];
- let key_data = [];
-
-
- if (Array.isArray(k_data[0])){
- for (let i = 0; i < k_data.length; i++){
- let col_data = k_data[i];
-
- for (let j = 0; j < col_data.length; j++ ){
-
- if (typeof key_data[j] === "undefined" ){
- key_data[j] = [];
- key_data[j][0] = isNaN(parseInt(key_1)) ? key_1 : parseInt(key_1);
- key_data[j][1] = isNaN(parseInt(key_2)) ? key_2 : parseInt(key_2);
- key_data[j].push(col_data[j]);
- } else {
- key_data[j].push(col_data[j]);
- }
- }
- }
- df_data.push(...key_data);
-
- } else {
- key_data[0] = isNaN(parseInt(key_1)) ? key_1 : parseInt(key_1);
- key_data[1] = isNaN(parseInt(key_2)) ? key_2 : parseInt(key_2);
- key_data.push(...k_data);
- df_data.push(key_data);
- }
-
-
- }
-
- }
- let column = [ ...key_col ];
-
- let group_col = col.slice().map((x, i) => {
- if (Array.isArray(ops)){
- return `${x}_${ops[i]}`;
- }
- return `${x}_${ops}`;
- });
- column.push(...group_col);
- return new DataFrame(df_data, { columns: column });
- } else {
- let df_data = [];
- for (let key_1 in data){
-
- let key_val = data[key_1];
-
- let key_data = [];
- if (Array.isArray(key_val[0])){
- for (let i = 0; i < key_val.length; i++){
- let col_data = key_val[i];
-
- for (let j = 0; j < col_data.length; j++ ){
-
- if (typeof key_data[j] === "undefined" ){
- key_data[j] = [];
- key_data[j][0] = isNaN(parseInt(key_1)) ? key_1 : parseInt(key_1);
- key_data[j].push(col_data[j]);
- } else {
- key_data[j].push(col_data[j]);
- }
- }
- df_data.push(...key_data);
- }
-
- } else {
- key_data[0] = isNaN(parseInt(key_1)) ? key_1 : parseInt(key_1);
- key_data.push(...key_val);
- df_data.push(key_data);
- }
-
- }
- let column = [ ...key_col ];
- let group_col = col.slice().map((x, i) => {
- if (Array.isArray(ops)){
- return `${x}_${ops[i]}`;
- }
- return `${x}_${ops}`;
- });
- column.push(...group_col);
-
- return new DataFrame(df_data, { columns: column });
- }
- }
-
- apply(callable){
- let df_data;
- let column;
- if (!this.group_col) {
- column = this.column_name.filter((val) => !this.key_col.includes(val));
- let col_gp = this.col(column);
- df_data = col_gp.group_col;
- } else {
- column = this.group_col_name;
- df_data = this.group_col;
- }
- let data = [];
- let count_group = {};
- if (this.key_col.length == 2) {
-
- for (let key in this.data_tensors) {
- count_group[key] = {};
- for (let key2 in this.data_tensors[key]) {
- count_group[key][key2] = [];
- for (let i = 0; i < df_data[key][key2].length; i++ ) {
- let callable_rslt = callable(df_data[key][key2][i]);
- if (callable_rslt instanceof DataFrame) {
- count_group[key][key2].push(callable_rslt.values);
- } else {
- if (callable_rslt instanceof Series) {
- count_group[key][key2].push(callable_rslt.values);
- } else {
- count_group[key][key2].push(callable_rslt);
- }
- }
- }
-
-
- }
- }
- } else {
- for (let key in df_data) {
- count_group[key] = [];
- for (let i = 0; i < df_data[key].length; i++ ){
- let callable_rslt = callable(df_data[key][i]);
- if (callable_rslt instanceof DataFrame) {
- count_group[key].push(callable_rslt.values);
- } else {
- if (callable_rslt instanceof Series) {
- count_group[key].push(callable_rslt.values);
- } else {
- count_group[key].push(callable_rslt);
- }
-
- }
- }
-
- }
- }
- return this.to_DataFrame(this.key_col, column, count_group, "apply");
- }
-
-}
diff --git a/src/lib/danfo/core/indexing.js b/src/lib/danfo/core/indexing.js
deleted file mode 100644
index 8383ff1..0000000
--- a/src/lib/danfo/core/indexing.js
+++ /dev/null
@@ -1,191 +0,0 @@
-import { Utils } from "./utils";
-const utils = new Utils();
-
-
-/**
- * Obtain the defined the set of row and column index
- * @param {*} kwargs object {rows:Array, columns:Array of column name, type: ["iloc","loc"]}
- * @return Array
- */
-export const indexLoc = (ndframe, kwargs) => {
-
- let rows = null;
- let columns = null;
- let isColumnSplit = false;
-
- if (Object.prototype.hasOwnProperty.call(kwargs, "rows")) { //check if the object has the key
- if (Array.isArray(kwargs["rows"])) {
-
- if (kwargs["rows"].length == 1 && typeof kwargs["rows"][0] == "string") {
- //console.log("here", kwargs["rows"].length)
- if (kwargs["rows"][0].includes(":")) {
-
- let row_split = kwargs["rows"][0].split(":");
-
- if (kwargs['type'] == 'loc') {
- //get index of first and last occurence of label
- let start, end;
- if (isNaN(Number(row_split[0]))) {
- start = ndframe.index.indexOf(row_split[0]);
- } else {
- start = Number(row_split[0]);
- }
-
- if (isNaN(Number(row_split[1]))) {
- end = ndframe.index.lastIndexOf(row_split[1]) - 1 || (ndframe.values.length - 1);
- } else {
- end = Number(row_split[1]) - 1 || (ndframe.values.length - 1);
- }
- rows = utils.__range(start, end);
- } else {
- let start = parseInt(row_split[0]) || 0;
- let end = parseInt(row_split[1]) - 1 || (ndframe.values.length - 1);
-
- if (typeof start == "number" && typeof end == "number") {
- rows = utils.__range(start, end);
- }
- }
-
- } else {
- if (kwargs["type"] == "loc") {
- let row_idx = [];
- ndframe.index.map((idx, i) => {
- if (kwargs['rows'][0] == idx) {
- row_idx.push(i);
- }
- });
- rows = row_idx;
- } else {
- throw new Error("Slice index must be separated by ':'");
- }
- }
- } else {
- if (kwargs["type"] == "loc") {
- //get all the index of specified labels
- let row_idx = [];
- ndframe.index.map((idx, i) => {
- if (kwargs['rows'].includes(idx)) {
- row_idx.push(i);
- }
- });
- rows = row_idx;
- } else {
- //return int index
- rows = kwargs["rows"];
- }
- }
- } else {
- throw new Error("rows parameter must be a Array");
- }
- } else {
- if (kwargs["type"] == "loc") {
- rows = utils.__range(0, Number(ndframe.shape[0]) - 1);
- // throw new Error("Invalid syntax, please specify a slice label")
- } else {
- rows = utils.__range(0, Number(ndframe.shape[0]) - 1);
- }
- }
-
- if (Object.prototype.hasOwnProperty.call(kwargs, "columns")) {
- if (Array.isArray(kwargs["columns"])) {
- if (kwargs["columns"].length == 1 && kwargs["columns"][0].includes(":")) {
-
- let row_split = kwargs["columns"][0].split(":");
- let start, end;
-
- if (kwargs["type"] == "iloc" || (row_split[0] == "")) {
- start = parseInt(row_split[0]) || 0;
- end = parseInt(row_split[1]) - 1 || (ndframe.values[0].length - 1);
- } else {
-
- start = parseInt(ndframe.columns.indexOf(row_split[0]));
- end = parseInt(ndframe.columns.indexOf(row_split[1])) - 1;
- }
-
-
- if (typeof start == "number" && typeof end == "number") {
-
- columns = utils.__range(start, end);
- isColumnSplit = true;
- }
-
- } else {
- columns = kwargs["columns"];
- }
-
- } else {
- throw new Error("columns must be a list");
- }
- } else {
- //Return all column
- if (kwargs["type"] == "loc") {
- columns = ndframe.column_names;
- } else {
- columns = utils.__range(0, Number(ndframe.shape[1]) - 1);
- }
- }
-
- let data_values = ndframe.values;
- let new_data = []; // store the data from the for loop
-
- for (var index = 0; index < rows.length; index++) {
- let row_val = rows[index];
- let max_rowIndex = data_values.length - 1; //obtain the maximum row index
-
- if (row_val > max_rowIndex) { //check if the input row index is greater than the maximum row index
- throw new Error(`Specified row index ${row_val} is bigger than maximum row index of ${max_rowIndex}`);
- }
-
- if (Array.isArray(data_values[0])){
-
- let value = data_values[row_val];
- let row_data = [];
-
-
- for (var i in columns) {
- var col_index;
- if (kwargs["type"] == "loc" && !isColumnSplit) {
- col_index = ndframe.columns.indexOf(columns[i]); //obtain the column index
-
- if (col_index == -1) {
- throw new Error(`Column ${columns[i]} does not exist`);
- }
- } else {
- col_index = columns[i];
- let max_colIndex = ndframe.columns.length - 1; //assign the maximum column index to a value
-
- if (col_index > max_colIndex) {
- throw new Error(`column index ${col_index} is bigger than ${max_colIndex}`);
- }
- }
-
- let elem = value[col_index]; //obtain the element at the column index
- row_data.push(elem);
- }
-
- new_data.push(row_data); //store the data for each row in the new_data
-
- } else {
-
- new_data.push(data_values[row_val]);
- }
-
- }
-
- let column_names = [];
- if (kwargs["type"] == "iloc" || isColumnSplit) {
- // let axes = ndframe.axes
- columns.map((col) => {
- column_names.push(ndframe.columns[col]);
- });
- } else {
- column_names = columns;
- }
-
- //get index of columns
- let final_row = [];
- rows.forEach((i) => {
- final_row.push(ndframe.index[i]);
- });
- return [ new_data, column_names, final_row ];
-};
diff --git a/src/lib/danfo/core/merge.js b/src/lib/danfo/core/merge.js
deleted file mode 100644
index 718c0b4..0000000
--- a/src/lib/danfo/core/merge.js
+++ /dev/null
@@ -1,321 +0,0 @@
-import { DataFrame } from './frame';
-import { Utils } from "./utils";
-
-const utils = new Utils;
-export class Merge {
-
- constructor(kwargs) {
-
- //check if keys exist in kwargs
- utils.__in_object(kwargs, "left");
- utils.__in_object(kwargs, "right");
- utils.__in_object(kwargs, "on");
- // utils.__in_object(kwargs, "how")
- if (!utils.__key_in_object(kwargs, "how")){
- this.how = 'inner';
- kwargs['how'] = 'inner';
- } else {
- this.how = kwargs['how'];
- }
-
- this.left = null;
- this.right = null;
- this.on = null;
- // this.how = null;
-
- let how_keys = [ "outer", "inner", "left", "right" ];
-
- if ((kwargs["left"] instanceof DataFrame) && (kwargs["right"] instanceof DataFrame)) {
- this.left = kwargs["left"];
- this.right = kwargs["right"];
- } else {
- throw new Error("The left and right key value must be a dataFrame");
- }
-
- if (Array.isArray(kwargs["on"])) {
- this.on = kwargs["on"];
- } else {
- throw new Error("key 'on' must be a list");
- }
-
- if (how_keys.includes(kwargs["how"])) {
-
- this.how = kwargs["how"];
- } else {
- throw new Error(`${kwargs["how"]} specify in keyword how is not recognise`);
- }
-
- this.left_col_index = [];
- this.right_col_index = [];
-
- //find the index of the columns
- for (let i = 0; i < this.on.length; i++) {
-
- if (this.left.columns.includes(this.on[i]) && this.right.columns.includes(this.on[i])) {
-
- let left_index = this.left.columns.indexOf(this.on[i]);
- let right_index = this.right.columns.indexOf(this.on[i]);
-
- this.left_col_index.push(left_index);
- this.right_col_index.push(right_index);
- }
- }
-
- this.left_key_dict = {};
- this.right_key_dict = {};
-
- let left_values = this.left.values;
- let right_values = this.right.values;
-
-
- /**
- * Create a dictionary for both left and right dataframe
- containing the key combination of columns used as keys, and
- the value of such keys combination are the rows having this
- keys combination.
- */
- for (let i = 0; i < left_values.length; i++) {
-
- let left_value = left_values[i];
- let right_value = right_values[i];
-
- let right_key_comb = "";
- let left_key_comb = "";
-
- //get the value in the column index
- for (let j = 0; j < this.left_col_index.length; j++) {
- let index = this.left_col_index[j];
-
- left_key_comb += `_${left_value[index]}`;
- }
-
- let self = this; // assign the this scope to self
- //filter out the value that are not the column key
- let left_value_filter = left_value.filter(function (val, index) {
- return !self.left_col_index.includes(index);
- });
-
- //check if the key combination already exist or not
- //before storing the key combination and the value
- //associated with it
- if (utils.__key_in_object(this.left_key_dict, left_key_comb)) {
- this.left_key_dict[left_key_comb].push(left_value_filter);
- } else {
- this.left_key_dict[left_key_comb] = [ left_value_filter ];
- }
-
- }
- for (let i = 0; i < right_values.length; i++) {
- let right_value = right_values[i];
- let right_key_comb = "";
-
- for (let j = 0; j < this.right_col_index.length; j++) {
- let index = this.right_col_index[j];
-
- right_key_comb += `_${right_value[index]}`;
- }
- let self = this;
- let right_value_filter = right_value.filter(function (val, index) {
- return !self.right_col_index.includes(index);
- });
-
- if (utils.__key_in_object(this.right_key_dict, right_key_comb)) {
- this.right_key_dict[right_key_comb].push(right_value_filter);
- } else {
- this.right_key_dict[right_key_comb] = [ right_value_filter ];
- }
- }
-
-
- //create column
- this.__create_columns();
-
- let data = null;
- switch (this.how) {
-
- case "outer":
- data = this.outer();
- break;
- case "inner":
- data = this.inner();
- break;
- case "left":
- data = this.left_merge();
- break;
- case "right":
- data = this.right_merge();
- break;
- }
-
- // eslint-disable-next-line no-self-assign
- let df = new DataFrame(data = data, { columns: this.columns });
-
- return df;
- }
-
- __create_columns() {
-
- let self = this;
- self.left_col = self.left.columns.filter((val, index) => {
- return !self.left_col_index.includes(index);
- });
-
- self.right_col = self.right.columns.filter((val, index) => {
- return !self.right_col_index.includes(index);
- });
-
- self.columns = [ ...self.on ];
- let column_duplicate = {};
-
- let temp_column = [ ...self.left_col ];
- temp_column.push(...self.right_col);
-
- for (let i = 0; i < temp_column.length; i++) {
-
- let col = temp_column[i];
- if (utils.__key_in_object(column_duplicate, col)) {
-
- let col_name = `${col}_${column_duplicate[col]}`;
- self.columns.push(col_name);
-
- column_duplicate[col] += 1;
- } else {
- self.columns.push(col);
- column_duplicate[col] = 1;
- }
- }
- }
-
- outer() {
-
- let keys = Object.keys(this.left_key_dict); // obtain the keys of the left dataframe
-
- keys.push(...Object.keys(this.right_key_dict));
-
- keys = Array.from(new Set(keys)); // obtain the unique keys
-
- let data = this.basic(keys);
-
- return data;
-
- }
-
- inner() {
-
- let left_keys = Object.keys(this.left_key_dict);
- let right_keys = Object.keys(this.right_key_dict);
-
- let keys = left_keys.filter((val) => {
- return right_keys.includes(val);
- });
-
- let data = this.basic(keys);
-
- return data;
- }
-
- left_merge() {
-
- let keys = Object.keys(this.left_key_dict);
- let data = this.basic(keys);
-
- return data;
-
- }
-
- right_merge() {
- let keys = Object.keys(this.right_key_dict);
- let data = this.basic(keys);
-
- return data;
- }
-
- basic(keys) {
-
- let data = [];
-
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i];
-
- let key_array = key.split("_").filter((val) => {
- return val != "";
- });
-
- if (utils.__key_in_object(this.left_key_dict, key)) {
- let left_row = this.left_key_dict[key];
-
-
- for (let left_i = 0; left_i < left_row.length; left_i++) {
-
- let left_row_row = left_row[left_i];
-
- if (utils.__key_in_object(this.right_key_dict, key)) {
-
- let right_row = this.right_key_dict[key];
-
- for (let r_i = 0; r_i < right_row.length; r_i++) {
-
- let right_row_row = right_row[r_i];
-
-
- let inner_data = key_array.slice(0);
- inner_data.push(...left_row_row);
- inner_data.push(...right_row_row);
-
-
- data.push(inner_data);
- }
- } else {
- let nan_array = Array(this.right_col.length);
-
- for (let i = 0; i < this.right_col.length; i++) {
- nan_array[i] = NaN;
- }
-
- let inner_data = key_array.slice(0);
- inner_data.push(...left_row_row);
- inner_data.push(...nan_array);
- data.push(inner_data);
- }
- }
- } else {
-
- let right_row = this.right_key_dict[key];
-
- for (let i = 0; i < right_row.length; i++) {
-
- let right_row_row = right_row[i];
-
- let nan_array = Array(this.left_col.length);
-
- for (let j = 0; j < nan_array.length; j++) {
- nan_array[j] = NaN;
- }
-
- let inner_data = key_array.slice(0);
- inner_data.push(...nan_array);
- inner_data.push(...right_row_row);
- data.push(inner_data);
- }
- }
- }
- return data;
-
- }
-}
-
-
-/**
-* Merge DataFrame or named Series objects with a database-style join.
-* The join is done on columns or indexes. If joining columns on columns, the DataFrame indexes will be ignored. Otherwise
-* if joining indexes on indexes or indexes on a column or columns, the index will be passed on.
-* @param {kwargs}{left: DataFrame;
-* right: DataFrame | Named Series, Object to merge with;
-* on: label, Column or index level names to join on. These must be found in both DataFrames;
-* how: {‘left’, ‘right’, ‘outer’, ‘inner’}. Type of merge to be performed.
-* @returns {DataFrame}
-*/
-export const merge = (kwargs) => {
- let merge = new Merge(kwargs);
- return merge;
-};
diff --git a/src/lib/danfo/core/series.js b/src/lib/danfo/core/series.js
deleted file mode 100644
index 06e4168..0000000
--- a/src/lib/danfo/core/series.js
+++ /dev/null
@@ -1,1306 +0,0 @@
-/**
-* Copyright 2020, JsData
-* All rights reserved.
-*
-* This source code is licensed under the MIT license found in the
-* LICENSE file in the root directory of this source tree.
-
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
- *
-*/
-
-
-import * as tf from "@tensorflow/tfjs";
-import { variance, std, median, mode } from 'mathjs';
-import { Utils } from "./utils";
-import { Str } from "./strings";
-import NDframe from "./generic";
-import { table } from 'table';
-import { Configs } from '../config/config';
-import { TimeSeries } from './timeseries';
-import { Plot } from '../plotting/plot';
-import { indexLoc } from './indexing';
-
-
-const utils = new Utils();
-const config = new Configs(); //package wide configuration object
-
-
-/**
- * One-dimensional ndarray with axis labels (including time series).
- * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index.
- * Operations between Series (+, -, /, , *) align values based on their associated index values– they need not be the same length.
- * @param {data} data Array, JSON of 1D values
- * @param {kwargs} Object {columns: column names, dtypes : data type of values}
- *
- * @returns Series
- */
-export class Series extends NDframe {
- constructor(data, kwargs) {
- if (Array.isArray(data[0]) || utils.__is_object(data[0])) {
- data = utils.__convert_2D_to_1D(data);
- super(data, kwargs);
- } else {
- super(data, kwargs);
- }
- }
-
-
- /**
- * Returns a Series in Tensorflow's tensor format
- * @returns {1D Tensor}
- */
- get tensor() {
- return tf.tensor(this.values).asType(this.dtypes[0]);
- }
-
-
- /**
- * Returns the first n values in a Series
- * @param {rows} Number of rows to return
- * @returns {Series}
- */
- head(rows = 5) {
- if (rows > this.shape[0] || rows < 1) {
- //return all values
- return new Series(this.values, { columns: this.column_names });
- } else {
- let data = this.values.slice(0, rows);
- return new Series(data, { columns: this.column_names });
- }
-
- }
-
-
- /**
- * Returns the last n values in a Series
- * @param {rows} number of rows to return
- * @returns {Series}
- */
- tail(rows = 5) {
- if (rows > this.values.length || rows < 1) {
- //return all values
- return new Series(this.values, { columns: this.column_names });
- } else {
- let data = this.values.slice(this.shape[0] - rows);
- let idx = this.index.slice(this.shape[0] - rows);
- let sf = new Series(data, { columns: this.column_names, index: idx });
- return sf;
- }
-
- }
-
- /**
- * Gets [num] number of random rows in a dataframe
- * @param {num} rows --> The number of rows to return
- * @param {seed} seed --> (Optional) An integer specifying the random seed that will be used to create the distribution.
- * @returns {Promise} resolves to a Series object
- */
- async sample(num = 5, seed = 1) {
- if (num > this.shape[0]) {
- throw new Error("Sample size n cannot be bigger than size of dataset");
- }
- if (num < -1 || num == 0) {
- throw new Error("Sample size cannot be less than -1 or 0");
- }
- num = num === -1 ? this.shape[0] : num;
- const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray();
- const sf = this.iloc(shuffled_index);
- return sf;
- }
-
- /**
- * Return Addition of series and other, element-wise (binary operator add).
- * Equivalent to series + other
- * @param {other} Series or Number to add
- * @returns {Series}
- */
- add(other) {
- if (utils.__is_number(other)) {
- //broadcast addition
- let sum = this.row_data_tensor.add(other).arraySync();
- return new Series(sum, { columns: this.column_names });
- } else {
- if (this.__check_series_op_compactibility) {
- let sum = this.tensor.add(other.tensor).arraySync();
- return new Series(sum, { columns: this.column_names });
- }
- }
- }
-
-
- /**
- * Returns the subtraction between a series and other, element-wise (binary operator subtraction).
- * Equivalent to series - other
- * @param {other} Series, Number to subtract
- * @returns {Series}
- */
- sub(other) {
- if (utils.__is_number(other)) {
- let sub = this.tensor.sub(other).arraySync();
- return new Series(sub, { columns: this.column_names });
- } else {
- if (this.__check_series_op_compactibility) {
- let sub = this.tensor.sub(other.tensor).arraySync();
- return new Series(sub, { columns: this.column_names });
- }
- }
- }
-
-
- /**
- * Return Multiplication of series and other, element-wise (binary operator mul).
- * Equivalent to series * other
- * @param {other} Series, Number to multiply with.
- * @returns {Series}
- */
- mul(other) {
- if (utils.__is_number(other)) {
- let mul = this.tensor.mul(other).arraySync();
- return new Series(mul, { columns: this.column_names });
- } else {
- if (this.__check_series_op_compactibility) {
- let mul = this.tensor.mul(other.tensor).arraySync();
- return new Series(mul, { columns: this.column_names });
- }
- }
- }
-
-
- /**
- * Return division of series and other, element-wise (binary operator div).
- * Equivalent to series / other
- * @param {other} Series, Number to divide with.
- * @returns {Series}
- */
- div(other, round = true) {
- if (utils.__is_number(other)) {
- let div_result = this.tensor.div(other);
- return new Series(div_result.arraySync(), { columns: this.column_names, dtypes: [ div_result.dtype ] });
- } else {
- if (this.__check_series_op_compactibility) {
- let dtype;
- //Check if caller needs a float division
- if (round) {
- dtype = "float32";
- } else {
- dtype = "int32";
- }
- //dtype may change after division because of how TFJS works internally, so save dtypes first
- let tensor1 = this.tensor.asType(dtype);
- let tensor2 = other.tensor.asType(dtype);
- let result = tensor1.div(tensor2);
- return new Series(result.arraySync(), { columns: this.column_names, dtypes: [ result.dtype ] });
- }
- }
- }
-
- /**
- * Return Exponential power of series and other, element-wise (binary operator pow).
- * Equivalent to series ** other
- * @param {other} Series, Number to multiply with.
- */
- pow(other) {
- if (utils.__is_number(other)) {
- let pow_result = this.tensor.pow(other).arraySync();
- return new Series(pow_result, { columns: this.column_names });
- } else {
- if (this.__check_series_op_compactibility) {
- let pow_result = this.tensor.pow(other.tensor).arraySync();
- return new Series(pow_result, { columns: this.column_names });
- }
- }
- }
-
- /**
- * Return Modulo of series and other, element-wise (binary operator mod).
- * Equivalent to series % other
- * @param {other} Series, Number
- * @returns {Series}
- */
- mod(other) {
- if (utils.__is_number(other)) {
- let mod_result = this.tensor.mod(other).arraySync();
- return new Series(mod_result, { columns: this.column_names });
- } else {
- if (this.__check_series_op_compactibility) {
- let mod_result = this.tensor.mod(other.tensor).arraySync();
- return new Series(mod_result, { columns: this.column_names });
- }
- }
- }
-
-
- /**
- * Returns the mean of elements in Series
- * @returns {Series}
- */
- mean() {
- utils._throw_str_dtype_error(this, 'mean');
- let values = utils._remove_nans(this.values);
- let mean = tf.tensor(values).mean().arraySync();
- return mean;
- }
-
-
- /**
- * Returns the median of elements in Series
- * @returns {Series}
- */
- median() {
- utils._throw_str_dtype_error(this, 'median');
- let values = utils._remove_nans(this.values);
- let median_val = median(values);
- return median_val;
- }
-
-
- /**
- * Returns the modal value of elements in Series
- * @returns {Number}
- */
- mode() {
- utils._throw_str_dtype_error(this, 'median');
- let values = utils._remove_nans(this.values);
- let modal_val = mode(values);
- return modal_val;
- }
-
-
- /**
- * Returns the minimum value in a Series
- * @returns {Number}
- */
- min() {
- utils._throw_str_dtype_error(this, 'min');
- let min = this.row_data_tensor.min().arraySync();
- return min;
-
- }
-
- /**
- * Returns the maximum value in a Series
- * @returns {Number}
- */
- max() {
- utils._throw_str_dtype_error(this, 'max');
- let max = this.row_data_tensor.max().arraySync();
- return max;
-
- }
-
-
- /**
- * Return the sum of the values in a series.
- * This is equivalent to the method tf.sum
- * @returns {Number}, sum of values in Series
- */
- sum() {
- utils._throw_str_dtype_error(this, 'sum');
- if (this.dtypes[0] == "boolean") {
- let temp_sum = this.row_data_tensor.sum().arraySync();
- return Number(temp_sum);
- }
- let temp_sum = this.row_data_tensor.sum().arraySync();
- return Number(temp_sum.toFixed(5));
- }
-
-
- /**
- * Return number of non-null elements in a Series
- * @returns {Number}, Count of non-null values
- */
- count() {
- return utils.__count_nan(this.values, true, true);
- }
-
-
- /**
- * Return maximum of series and other, element-wise (binary operator div).
- * @param {other} Series, Numbers to check maximum against
- * @returns {Series}
- */
- maximum(other) {
- if (utils.__is_number(other)) {
- let max_result = this.row_data_tensor.maximum(other);
- return new Series(max_result.arraySync(), {
- columns: this.column_names,
- dtypes: max_result.dtype,
- index: this.index
- });
- } else {
- if (this.__check_series_op_compactibility) {
- let tensor1 = this.row_data_tensor;
- let tensor2 = other.tensor;
- let result = tensor1.maximum(tensor2).arraySync();
- return new Series(result, { columns: this.column_names, index: this.index });
- }
- }
- }
-
- /**
- * Return maximum of series and other, element-wise (binary operator div).
- * @param {other} Series, Numbers to check maximum against
- * @returns {Series}
- */
- minimum(other) {
- if (utils.__is_number(other)) {
- let max_result = this.row_data_tensor.minimum(other);
- return new Series(max_result.arraySync(), {
- columns: this.column_names,
- dtypes: max_result.dtype,
- index: this.index
- });
- } else {
- if (this.__check_series_op_compactibility) {
- let tensor1 = this.tensor;
- let tensor2 = other.tensor;
- let result = tensor1.minimum(tensor2).arraySync();
- return new Series(result, { columns: this.column_names, index: this.index });
- }
- }
- }
-
-
- /**
- * Round each value in a Series to the given number of decimals.
- * @param {dp} Number, Numbers of Decimal places to round to
- * @returns {Series}
- */
- round(dp) {
- if (utils.__is_undefined(dp)) {
- //use tensorflow round function to roound to the nearest whole number
- let result = tf.round(this.row_data_tensor).arraySync();
- return new Series(result, { columns: this.column_names, index: this.index });
-
- } else {
- let result = utils.__round(this.values, dp, true);
- return new Series(result, { columns: this.column_names, index: this.index });
-
- }
-
- }
-
- /**
- * Return sample standard deviation over requested axis.
- * @returns {Number}
- */
- std() {
- utils._throw_str_dtype_error(this, 'std');
- let values = utils._remove_nans(this.values);
- // TODO: Use Tensorflow ops for faster computation
- let std_val = std(values); //using math.js
- return std_val;
-
- }
-
- /**
- * Return unbiased variance of Series.
- * @returns {Number}
- */
- var() {
- utils._throw_str_dtype_error(this, 'std');
- let values = utils._remove_nans(this.values);
- // TODO: Use Tensorflow ops for faster computation
- let var_val = variance(values); //using math.js
- return var_val;
-
- }
-
- /**
- * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values,
- * gets mapped to True values. Everything else gets mapped to False values.
- * @return {Series}
- */
- isna() {
- let new_arr = this.__isna();
- let sf = new Series(new_arr, {
- index: this.index,
- columns: this.column_names,
- dtypes: [ "boolean" ]
- });
- return sf;
- }
-
- /**
- * Replace NaN or undefined with a specified value"
- * @param {kwargs}, {"value": the new value to replace the old value with, inplace: Perform operation inplace or not}
- * @return {Series}
- */
- fillna(kwargs = {}) {
- let params_needed = [ "value", "inplace" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs['inplace'] = kwargs['inplace'] || false;
-
- if (!("value" in kwargs)) {
- throw Error('Value Error: Must specify value to replace with');
- }
-
- let new_values = [];
- this.values.forEach((val) => {
- if (isNaN(val) && typeof val != "string") {
- new_values.push(kwargs['value']);
- } else {
- new_values.push(val);
- }
- });
-
- if (kwargs['inplace']) {
- this.data = new_values;
- } else {
- let sf = new Series(new_values, {
- columns: this.column_names,
- index: this.index,
- dtypes: this.dtypes
- });
- return sf;
- }
- }
-
-
- /**
- * Sort a Series in ascending or descending order by some criterion.
- * @param {kwargs} Object, {ascending (Bool): Whether to return sorted values in ascending order or not,
- * inplace (Bool): Whether to perform sorting on the original Series or not}
- * @returns {Series}
- */
- sort_values(kwargs = {}) {
- let params_needed = [ "inplace", "ascending" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- if (!('ascending' in kwargs)) {
- kwargs['ascending'] = true;
- }
-
- if (!('inplace' in kwargs)) {
- kwargs['inplace'] = false;
- }
-
- let sorted_values = [];
- let arr_obj = [ ...this.values ];
- let range_idx = utils.__range(0, this.index.length - 1);
- let sorted_idx = utils._sort_arr_with_index(range_idx, arr_obj, this.dtypes[0]);
-
- sorted_idx.forEach((idx) => {
- sorted_values.push(this.values[idx]);
- });
-
- if (kwargs['ascending']) {
- sorted_values = sorted_values.reverse();
- sorted_idx = sorted_idx.reverse();
- }
-
- if (kwargs['inplace']) {
- this.data = sorted_values;
- this.__set_index(sorted_idx);
- } else {
- let sf = new Series(sorted_values, { columns: this.column_names, index: sorted_idx });
- return sf;
- }
- }
-
-
- /**
- * Makes a deep copy of a Series
- * @returns {Series}
- */
- copy() {
-
- let sf = new Series([ ...this.values ], {
- columns: [ ...this.column_names ],
- index: [ ...this.index ],
- dtypes: [ ...this.dtypes[0] ]
- });
- return sf;
- }
-
-
- /**
- * Generate descriptive statistics.
- * Descriptive statistics include those that summarize the central tendency,
- * dispersion and shape of a dataset’s distribution, excluding NaN values.
- * @returns {Series}
- */
- describe() {
- if (this.dtypes[0] == "string") {
- return null;
- } else {
-
- let index = [ 'count', 'mean', 'std', 'min', 'median', 'max', 'variance' ];
- let count = this.count();
- let mean = this.mean();
- let std = this.std();
- let min = this.min();
- let median = this.median();
- let max = this.max();
- let variance = this.var();
-
- let vals = [ count, mean, std, min, median, max, variance ];
- let sf = new Series(vals, { columns: this.columns, index: index });
- return sf;
-
- }
-
-
- }
-
-
- /**
- * Returns Series with the index reset.
- * This is useful when index is meaningless and needs to be reset to the default before another operation.
- * @param {kwargs} {inplace: Modify the Series in place (do not create a new object}
- */
- reset_index(kwargs = {}) {
- let params_needed = [ "inplace" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs['inplace'] = kwargs['inplace'] || false;
-
- if (kwargs['inplace']) {
- this.__reset_index();
- } else {
- let sf = this.copy();
- sf.__reset_index();
- return sf;
- }
- }
-
- /**
- * Returns Series with the specified index.
- * Set the Series index (row labels) using an array of the same length.
- * @param {kwargs} {index: Array of new index values,
- * inplace: If operation should happen inplace
- * }
- */
- set_index(kwargs = {}) {
-
- let params_needed = [ "index", "inplace" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
-
- kwargs['inplace'] = kwargs['inplace'] || false;
-
- if (!('index' in kwargs)) {
- throw Error("Index ValueError: You must specify an array of index");
- }
-
- if (kwargs['index'].length != this.index.length) {
- throw Error(`Index LengthError: Lenght of new Index array ${kwargs['index'].length} must match lenght of existing index ${this.index.length}`);
- }
-
- if (kwargs['inplace']) {
- this.index_arr = kwargs['index'];
- } else {
- let sf = this.copy();
- sf.__set_index(kwargs['index']);
- return sf;
- }
- }
-
-
- /**
- * Checks if two series are compatible for a mathematical operation
- * @param {Series} other Series to compare against
- * @returns{boolean}
- */
- __check_series_op_compactibility(other) {
- if (utils.__is_undefined(other.series)) {
- throw Error("param [other] must be a Series or a single value that can be broadcasted");
- }
- if (other.values.length != this.values.length) {
- throw Error("Shape Error: Series shape do not match");
- }
- if (this.dtypes[0] != 'float' || this.dtypes[0] != 'int') {
- throw Error(`dtype Error: Cannot perform operation on type ${this.dtypes[0]} with type ${other.dtypes[0]}`);
- }
- if (other.dtypes[0] != 'float' || other.dtypes[0] != 'int') {
- throw Error(`dtype Error: Cannot perform operation on type ${other.dtypes[0]} with type ${this.dtypes[0]}`);
- }
-
- return true;
- }
-
- /**
- * map all the element in a column to a variable or function
- * @param{callable} callable can either be a funtion or an object
- * @return {Array}
- */
- map(callable) {
- let is_callable = utils.__is_function(callable);
-
- let data = this.data.map((val) => {
- if (is_callable) {
- return callable(val);
- } else {
- if (utils.__is_object(callable)) {
-
- if (val in callable) {
- return callable[val];
- } else {
- return NaN;
- }
- } else {
- throw new Error("callable must either be a function or an object");
- }
- }
- });
- let sf = new Series(data, {
- columns: this.column_names,
- index: this.index
- });
- return sf;
- }
-
- /**
- * Applies a function to each element of a Series
- * @param {Function} Function to apply to each element of the series
- * @return {Array}
- */
- apply(callable) {
- let is_callable = utils.__is_function(callable);
-
- if (!is_callable) {
- throw new Error("the arguement most be a function");
- }
-
- let data = this.data.map((val) => {
- return callable(val);
- });
- return new Series(data, { columns: this.column_names, index: this.index });
- }
-
- /**
- * Returns the unique value(s) in a Series
- * @return {Series}
- */
- unique() {
-
- let data_set = new Set(this.values);
- let series = new Series(Array.from(data_set));
-
- return series;
-
- }
-
- /**
- * Return the number of unique value in a series
- * @return {int}
- */
- nunique() {
- return this.unique().values.length;
- }
-
- /**
- * Returns unique values and their counts in a Series
- * @return {Series}
- */
- value_counts() {
-
- let s_data = this.values;
- let data_dict = {};
-
- for (let i = 0; i < s_data.length; i++) {
- let val = s_data[i];
-
- if (val in data_dict) {
- data_dict[val] += 1;
- } else {
- data_dict[val] = 1;
- }
- }
-
- let index = Object.keys(data_dict).map((x) => {
- return parseInt(x) ? parseInt(x) : x;
- });
- let data = Object.values(data_dict);
-
- let series = new Series(data, { index: index });
- return series;
-
- }
-
- /**
- * Returns the absolute values in Series
- * @return {series}
- */
- abs() {
- let abs_data = this.row_data_tensor.abs().arraySync();
- return new Series(utils.__round(abs_data, 2, true));
- }
-
-
- /**
- * Returns the cumulative sum over a Series
- * @return {Series}
- */
- cumsum() {
- let data = this.__cum_ops("sum");
- return data;
- }
-
- /**
- * Returns cumulative minimum over a Series
- * @returns series
- */
- cummin() {
- let data = this.__cum_ops("min");
- return data;
- }
-
- /**
- * Returns cumulative maximum over a Series
- * @returns series
- */
- cummax() {
- let data = this.__cum_ops("max");
- return data;
- }
-
- /**
- * Returns cumulative product over a Series
- * @returns series
- */
- cumprod() {
- let data = this.__cum_ops("prod");
- return data;
- }
-
-
- /**
- * Returns Less than of series and other. Supports element wise operations
- * @param {other} Series, Scalar
- * @return {Series}
- */
- lt(other) {
- return this.__bool_ops(other, "lt");
- }
-
- /**
- * Returns Greater than of series and other. Supports element wise operations
- * @param {other} Series, Scalar
- * @return {Series}
- */
- gt(other) {
- return this.__bool_ops(other, "gt");
- }
-
- /**
- * Returns Less than or Equal to of series and other. Supports element wise operations
- * @param {other} Series, Scalar
- * @return {Series}
- */
- le(other) {
- return this.__bool_ops(other, "le");
- }
-
- /**
- * Returns Greater than or Equal to of series and other. Supports element wise operations
- * @param {other} Series, Scalar
- * @return {Series}
- */
- ge(other) {
- return this.__bool_ops(other, "ge");
- }
-
- /**
- * Returns Not Equal to of series and other. Supports element wise operations
- * @param {other} Series, Scalar
- * @return {Series}
- */
- ne(other) {
- return this.__bool_ops(other, "ne");
- }
-
-
- /**
- * Returns Equal to of series and other. Supports element wise operations
- * @param {other} Series, Scalar
- * @return {Series}
- */
- eq(other) {
- return this.__bool_ops(other, "eq");
- }
-
- /**
- * Replace all occurence of a value with a new value"
- * @param {kwargs}, {"replace": the value you want to replace,
- * "with": the new value you want to replace the olde value with,
- * inplace: Perform operation inplace or not}
- * @return {Series}
- */
- replace(kwargs = {}) {
- let params_needed = [ "replace", "with", "inplace" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs['inplace'] = kwargs['inplace'] || false;
-
- if (!("replace" in kwargs)) {
- throw Error("Params Error: Must specify param 'replace'");
- }
-
- if (!("with" in kwargs)) {
- throw Error("Params Error: Must specify param 'with'");
- }
-
- let replaced_arr = [];
- let old_arr = this.values;
-
- old_arr.forEach((val) => {
- if (val == kwargs['replace']) {
- replaced_arr.push(kwargs['with']);
- } else {
- replaced_arr.push(val);
- }
- });
-
- if (kwargs['inplace']) {
- this.data = replaced_arr;
- } else {
- let sf = new Series(replaced_arr, {
- index: this.index,
- columns: this.columns,
- dtypes: this.dtypes
- });
- return sf;
- }
-
- }
-
-
- /**
- * Return a new Series with missing values (NaN) removed.
- * @param {kwargs} {inplace: Perform operation inplace or not}
- * @return {Series}
- */
- dropna(kwargs = {}) {
- let params_needed = [ "inplace" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs['inplace'] = kwargs['inplace'] || false;
-
- let old_values = this.values;
- let old_index = this.index;
- let new_values = [];
- let new_index = [];
- let isna_vals = this.isna().values;
-
- isna_vals.forEach((val, i) => {
- if (!val) {
- new_values.push(old_values[i]);
- new_index.push(old_index[i]);
- }
- });
- if (kwargs['inplace']) {
- this.index_arr = new_index;
- this.data = new_values;
- } else {
- let sf = new Series(new_values, {
- columns: this.column_names,
- index: new_index,
- dtypes: this.dtypes
- });
- return sf;
- }
-
- }
-
- /**
- * Return the integer indices that would sort the Series.
- * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order
- * @return {Series}
- */
- argsort(ascending = true) {
- let sorted_index = this.sort_values({ ascending: ascending }).index;
- let sf = new Series(sorted_index);
- return sf;
- }
-
- /**
- * Return int position of the largest value in the Series.
- * @return {Number}
- */
- argmax() {
- return this.row_data_tensor.argMax().arraySync();
- }
-
-
- /**
- * Return int position of the smallest value in the Series.
- * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order
- * @return {Series}
- */
- argmin() {
- return this.row_data_tensor.argMin().arraySync();
-
- }
-
-
- /**
- * Returns dtype of Series
- * @return {string}
- */
- get dtype() {
- return this.dtypes[0];
- }
-
- /**
- * Return Series with duplicate values removed
- * @param {kwargs} {inplace: Perform operation inplace or not,
- * keep: first | last which dupliate value to keep}
- * @return {Series}
- */
- drop_duplicates(kwargs = {}) {
- let params_needed = [ "inplace", "keep" ];
- utils._throw_wrong_params_error(kwargs, params_needed);
-
- kwargs['inplace'] = kwargs['inplace'] || false;
- kwargs['keep'] = kwargs['keep'] || "first";
-
-
- let data_arr, old_index;
- if (kwargs['keep'] == "last") {
- data_arr = this.values.reverse();
- old_index = this.index.reverse();
- } else {
- data_arr = this.values;
- old_index = this.index;
- }
-
- let new_index = [];
- let new_arr = [];
-
- data_arr.forEach((val, i) => {
- if (!new_arr.includes(val)) {
- new_index.push(old_index[i]);
- new_arr.push(val);
- }
- });
-
- if (kwargs['keep'] == "last") {
- //re-reversed the array and index to its true ordering
- new_arr = new_arr.reverse();
- new_index = new_index.reverse();
- }
-
- if (kwargs['inplace']) {
- this.data = new_arr;
- this.index_arr = new_index;
- } else {
- let sf = new Series(new_arr, {
- index: new_index,
- columns: this.column_names,
- dtypes: this.dtypes
- });
- return sf;
- }
-
- }
-
-
- /**
- * Prints the data in a Series as a grid of row and columns
- */
- toString() {
- let table_width = 20;
- let table_truncate = 20;
- let max_row = config.get_max_row;
- let data_arr = [];
- let table_config = {};
- let header = [ "" ].concat(this.columns);
- let idx, data;
-
- if (this.values.length > max_row) {
- //slice Object to show a max of [max_rows]
- data = this.values.slice(0, max_row);
- idx = this.index.slice(0, max_row);
- } else {
- data = this.values;
- idx = this.index;
- }
-
- idx.forEach((val, i) => {
- let row = [ val ].concat(data[i]);
- data_arr.push(row);
- });
-
- //set column width of all columns
- table_config[0] = 10;
- table_config[1] = { width: table_width, truncate: table_truncate };
-
- let table_data = [ header ].concat(data_arr); //Add the column names to values before printing
- return table(table_data, { columns: table_config });
- }
-
- /**
- * Perform boolean operations on bool values
- * @param {*} other Other series to compare with
- * @param {string} b_ops name of operation to perform [ne, ge, le, gt, lt, eq]
- */
- __bool_ops(other, b_ops) {
- let r_series;
- let l_series = this.values;
-
- if (typeof other == "number") {
- r_series = [ ...l_series ].fill(other); //create array of repeated value for broadcasting
- } else {
- if (!(other instanceof Series)) {
- throw new Error("Value Error: 'other' must be an instance of Series");
- }
- r_series = other.values;
- }
-
- if (!(l_series.length === r_series.length)) {
- throw new Error("Length Error: Both series must be of the same length");
- }
-
- let data = [];
-
- for (let i = 0; i < l_series.length; i++) {
-
- let l_val = l_series[i];
- let r_val = r_series[i];
- let bool = null;
- switch (b_ops) {
-
- case "lt":
- bool = l_val < r_val ? true : false;
- data.push(bool);
- break;
- case "gt":
- bool = l_val > r_val ? true : false;
- data.push(bool);
- break;
- case "le":
- bool = l_val <= r_val ? true : false;
- data.push(bool);
- break;
- case "ge":
- bool = l_val >= r_val ? true : false;
- data.push(bool);
- break;
- case "ne":
- bool = l_val != r_val ? true : false;
- data.push(bool);
- break;
- case "eq":
- bool = l_val === r_val ? true : false;
- data.push(bool);
- break;
- }
- }
- return new Series(data);
-
- }
-
- /**
- * perform cumulative operation on series data
- * @returns array
- */
- __cum_ops(ops) {
-
- let s_data = this.values;
- let temp_val = s_data[0];
- let data = [ temp_val ];
-
- for (let i = 1; i < s_data.length; i++) {
-
- let curr_val = s_data[i];
- switch (ops) {
- case "max":
- if (curr_val > temp_val) {
- data.push(curr_val);
- temp_val = curr_val;
- } else {
- data.push(temp_val);
- }
- break;
- case "min":
- if (curr_val < temp_val) {
- data.push(curr_val);
- temp_val = curr_val;
- } else {
- data.push(temp_val);
- }
- break;
- case "sum":
- temp_val = temp_val + curr_val;
- data.push(temp_val);
- break;
- case "prod":
- temp_val = temp_val * curr_val;
- data.push(temp_val);
- break;
-
- }
- }
- return new Series(data);
- }
-
-
- /**
- * Cast Series to specified data type
- * @param {string} dtype data type to cast to [float32, int32, string, boolean]
- *@returns {Series}
- */
- astype(dtype) {
- const __supported_dtypes = [ 'float32', "int32", 'string', 'boolean' ];
-
- if (!dtype) {
- throw Error("Value Error: Please specify dtype to cast to");
- }
-
- if (!__supported_dtypes.includes(dtype)) {
- throw Error(`dtype ${dtype} not supported. dtype must be one of ${__supported_dtypes}`);
- }
-
- let col_values = this.values;
- let new_values = [];
-
- switch (dtype) {
- case "float32":
- col_values.forEach((val) => {
- new_values.push(Number(val));
- });
- break;
- case "int32":
- col_values.forEach((val) => {
- new_values.push(Number(Number(val).toFixed()));
- });
- break;
- case "string":
- col_values.forEach((val) => {
- new_values.push(String(val));
- });
- break;
- case "boolean":
- col_values.forEach((val) => {
- new_values.push(Boolean(val));
- });
- break;
- default:
- break;
- }
-
- let sf = new Series(new_values, { dtypes: dtype, index: this.index });
- return sf;
-
- }
-
-
- /**
- * Exposes numerous string methods to manipulate Series
- */
- get str() {
- let values = this.values;
- if (this.dtypes[0] != "string") {
- let new_vals = [];
- //convert each value in array to string
- values.forEach((val) => {
- new_vals.push(String(val));
- });
- let sf = new Series(new_vals, { columns: this.column_names, index: this.index });
- return new Str(sf);
- }
- return new Str(this);
-
- }
-
- /**
- * Returns Danfo Time Object that exposes different time properties
- */
- get dt() {
- let timeseries = new TimeSeries({ data: this }); // parsed to date-time
- timeseries.preprocessed();
- return timeseries;
-
- }
-
- /**
- * Displays the data in a console friendly manner
- */
- print() {
- console.log(this + "");
- }
-
-
- /**
- * Make plots of Series or DataFrame.
- * Uses the Plotly as backend, so therefore supports Plotly's configuration parameters
- * @param {string} div Name of the div to show the plot
- * @returns {Class} Plot class that expoese different plot type
- */
- plot(div) {
- const plt = new Plot(this, div);
- return plt;
- }
-
- /**
- * Slice series by index
- * @param {Array} row list of index to slice by
- * @returns Series
- */
- iloc(row) {
- let kwargs = {};
- kwargs["rows"] = row;
- kwargs["type"] = "iloc";
-
- let [ new_data, columns, rows ] = indexLoc(this, kwargs);
- let sf = new Series(new_data, { columns: columns, index: rows });
-
- return sf;
- }
-
- /**
- * Adds new values to the end of a Series
- * @param {Object} val Single value | Array | Series to append to the object
- * @param {Boolean} inplace Whether to perform operation inplace or not
- */
- append(val, inplace = false) {
- if (inplace) {
- let self = this;
- if (Array.isArray(val)) {
- val.forEach((el, i) => {
- self.data.push(el);
- self.index_arr.push(i);
- });
- } else if (val instanceof Series) {
- let value = val.values;
- let old_index = val.index;
- value.forEach((el, i) => {
- self.data.push(el);
- self.index_arr.push(old_index[i]);
- });
- } else {
- self.data.push(val);
- self.index_arr.push(0);
- }
- } else {
- let sf = this.copy();
- if (Array.isArray(val)) {
- val.forEach((el, i) => {
- sf.data.push(el);
- sf.index_arr.push(i);
- });
- } else if (val instanceof Series) {
- let value = val.values;
- let old_index = val.index;
- value.forEach((el, i) => {
- sf.data.push(el);
- sf.index_arr.push(old_index[i]);
- });
- } else {
- sf.data.push(val);
- sf.index_arr.push(0);
- }
- return sf;
- }
-
- }
-
-}
-
diff --git a/src/lib/danfo/core/strings.js b/src/lib/danfo/core/strings.js
deleted file mode 100644
index fc25e44..0000000
--- a/src/lib/danfo/core/strings.js
+++ /dev/null
@@ -1,336 +0,0 @@
-import { Series } from "./series";
-
-/**
- * String methods applied on Series and DataFrames
- */
-export class Str {
- constructor(series) {
- this.series = series;
- this.array = series.values;
- }
-
- /**
- * Converts all characters to lowercase.
- * @return {array}
- */
- toLowerCase() {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.toLowerCase());
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Converts all characters to uppercase.
- * @return {array}
- */
- toUpperCase() {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.toUpperCase());
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Capitalize first string
- * @return {array}
- */
- capitalize() {
- let new_arr = [];
- this.array.map((val) => {
- let f_char = val.slice(0, 1);
- let l_char = val.slice(1);
- let new_str = `${f_char.toUpperCase()}${l_char.toLowerCase()}`;
- new_arr.push(new_str);
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
-
- }
-
- /**
- * Returns the character at the specified index (position)
- * @params {index} index position of character
- * @return {array}
- */
- charAt(index = 0) {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.charAt(index));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Joins two or more strings/arrays. 0 joins from the start
- * @params {other} string|array to concatenate with.
- * @params {position} where to concat the string from. O concats from the start, 1 concats from the end
- * @params {isArray} whether operation is performed on Array or not
- * @return {array}
- */
- concat(other = "", position = 1) {
- if (Array.isArray(other)) {
- let final_arr = [];
- for (let i = 0; i < other.length; i++) {
- let l_str = this.array[i];
- let r_str = other[i];
- if (position == 1) {
- final_arr.push(l_str.concat(r_str));
- } else {
- final_arr.push(r_str.concat(l_str));
- }
-
- }
- let sf = this.__create_new_sf_from(final_arr, this.series);
- return sf;
- } else {
-
- let new_arr = [];
-
- this.array.map((val) => {
- if (position == 1) {
- new_arr.push(val.concat(other));
-
- } else {
- new_arr.push(other.concat(val));
- }
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- }
-
-
- /**
- * Checks whether a string begins with specified characters
- * @params {String | Character} String or Character to check against
- * @return {array}
- */
- startsWith(str = "") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.startsWith(str));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Checks whether a string ends with specified characters
- * @params {String | Character} String or Character to check against
- * @return {array}
- */
- endsWith(str = "") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.endsWith(str));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Checks whether a string contains the specified string/characters
- * @params {String | Character} String or Character to check against
- * @return {array}
- */
- includes(str = "") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.includes(str));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Returns the position of the first found occurrence of a specified value in a string
- * @params {String | Character} String or Character to check against
- * @return {array}
- */
- indexOf(str = "") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.indexOf(str));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Returns the position of the last found occurrence of a specified value in a string
- * @params {str: String | Character} String or Character to check against
- * @return {array}
- */
- lastIndexOf(str = "") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.lastIndexOf(str));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
-
- /**
- * Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced
- * @params {searchValue: String | Character} string value to replace
- * @params {replaceValue: String | Character} string to replace with
- * @return {array}
- */
- replace(searchValue = "", replaceValue = "") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.replace(searchValue, replaceValue));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Returns a new string with a specified number of copies of an existing string
- * @params {num: Integer} Number of times to repeat
- * @return {array}
- */
- repeat(num = 1) {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.repeat(num));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
-
- /**
- * Searches a string for a specified value, or regular expression, and returns the position of the match
- * @params {str: String | Character} String or Character to check against
- * @return {array}
- */
- search(str = "") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.search(str));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Extracts a part of a string and returns a new string
- * @params {startIndex: Int} index position of start character
- * @params {endIndex: Int} index position of last character
- * @return {array}
- */
- slice(startIndex = 0, endIndex = 1) {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.slice(startIndex, endIndex));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Splits a string into an array of substrings
- * @params {val: string} string or character to split at
- * @params {endIndex: Int} index position of last character
- * @return {array}
- */
- split(splitVal = " ") {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.split(splitVal));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Extracts the characters from a string, beginning at a specified start position, and through the specified number of character
- * @params {startIndex: Int} index position of start character
- * @params {num: Int} number of characters to return
- * @return {array}
- */
- substr(startIndex = 0, num = 1) {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.substr(startIndex, num));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Extracts the characters from a string, between two specified indices
- * @params {startIndex: Int} index position of start character
- * @params {endIndex: Int} index position of last character
- * @return {array}
- */
- substring(startIndex = 0, endIndex = 1) {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.substring(startIndex, endIndex));
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Removes whitespace from both ends of a string
- * @return {array}
- */
- trim() {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.trim());
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Joins strings to specified value
- * @params {valToJoin} string value to join to the array
- * @params {joinChar} Character to Join with
- * @return {array}
- */
- join(valToJoin = "", joinChar = " ") {
- let new_arr = [];
- this.array.map((val) => {
- let l_char = val;
- let r_char = valToJoin;
- let new_char = `${l_char}${joinChar}${r_char}`;
- new_arr.push(new_char);
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- /**
- * Counts the number of characters in string
- * @return {array}
- */
- len() {
- let new_arr = [];
- this.array.map((val) => {
- new_arr.push(val.length);
- });
- let sf = this.__create_new_sf_from(new_arr, this.series);
- return sf;
- }
-
- //create a new series
- __create_new_sf_from(new_val, series) {
- let sf = new Series(new_val, { columns: series.column_names, index: series.index });
- return sf;
- }
-
-
-}
diff --git a/src/lib/danfo/core/timeseries.js b/src/lib/danfo/core/timeseries.js
deleted file mode 100644
index 1d8af67..0000000
--- a/src/lib/danfo/core/timeseries.js
+++ /dev/null
@@ -1,305 +0,0 @@
-import { Utils } from "./utils";
-import { Series } from "./series";
-const utils = new Utils;
-
-
-/**
- * @class
- * @description Handle all datetime operations
- * @param {kwargs} Object {"data":[array of string], "format": string}
- */
-export class TimeSeries {
- constructor(kwargs) {
-
- utils.__in_object(kwargs, "data", "specify the data");
-
- if (kwargs["data"] instanceof Series) {
- this.data = kwargs["data"].values;
- } else {
- this.data = kwargs["data"];
- }
-
- this.format = kwargs["format"] || null;
-
- this.keys = { //key: len
- "Y": 4,
- "m": 2,
- "H": 2,
- "M": 2,
- "S": 2,
- "b": 3,
- "d": 2,
- "-": 1
- };
-
- this.__in_format = [ "%Y-m-d%", "%m-d-Y%", "%m-d-Y H%M%S%" ];
-
- this.__monthName = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
- this.__weekName = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ];
-
- }
-
- /**
- * @description preprocessed the data into desirable structure
- */
- preprocessed() {
-
- let format_values = null;
- if (this.format) {
- format_values = this.generate_format();
- }
-
- this.date_list = [];
-
- for (let i = 0; i < this.data.length; i++) {
-
- let date_string = this.data[i];
-
- if (this.format && !this.__in_format.includes(this.format)) {
-
- let format_dateString = this.__apply_format(date_string, format_values);
- let valueDate = new Date(format_dateString);
-
- this.__is_validDate(valueDate);
-
- this.date_list.push(valueDate);
-
- } else if (this.is_timestamp(date_string)) {
-
- let string2int = parseInt(date_string);
- let valueDate = new Date(string2int);
-
- this.__is_validDate(valueDate);
- this.date_list.push(valueDate);
- } else {
- let valueDate = new Date(date_string);
-
- this.__is_validDate(valueDate);
- this.date_list.push(valueDate);
- }
- }
-
- // return this.date_list;
-
- }
-
- /**
- * @description if format is given, apply the format on each element of the data
- * @return string
- */
- __apply_format(elem, format) {
-
- let date_string = "";
-
- let temp_val = 0;
-
-
- for (let index in format) {
-
- let value = format[index];
-
- if (index == 0) {
- date_string += elem.slice(0, value);
-
- } else if (index > 4) {
-
- date_string += ":" + elem.slice(temp_val, temp_val + value);
- } else if (index == 4) {
- date_string += " " + elem.slice(temp_val, temp_val + value);
- } else if (index > 0 && index <= 2) {
- date_string += "-" + elem.slice(temp_val, temp_val + value);
- }
-
- temp_val += value;
- }
-
- return date_string;
-
- }
- /**
- * @description convert format string to their respective value.
- */
- generate_format() {
-
- let format_list = this.format.split("");
-
- let self = this;
- let format_keys = format_list.filter(function (key) {
- return utils.__key_in_object(self.keys, key);
- });
-
- let format_value = format_keys.map(function (val) {
- return self.keys[val];
- });
-
-
- return format_value;
- }
-
- /**
- * @description check if a string is a timestamp
- * @param {date_string} date_string [string]
- */
- is_timestamp(date_string) {
-
- let string2int = parseInt(date_string);
- let int2string = String(string2int);
-
- if (isNaN(string2int) || (int2string.length < date_string.length)) {
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * @description check if a date instance returns Invalid date
- * @param {date_instance} instance of new Date()
- */
- __is_validDate(date_instance) {
-
- if (date_instance.toDateString() == "Invalid Date") {
- throw new Error("Invalid date, the date format not recognise");
- }
- }
-
- /**
- * @description abstract all date operations
- * @param {*} callback [FUNCTION]
- * @return series
- */
- __date_ops(callback) {
-
- let data = this.date_list.map(function (date_instance) {
-
- return callback(date_instance);
- });
-
- // eslint-disable-next-line no-self-assign
- let series = new Series(data = data);
-
- return series;
- }
-
- /**
- * @description obtain the month in a date.
- * @return Series
- */
- month() {
-
- let series = this.__date_ops(function (date_instance) {
- return date_instance.getMonth();
- });
-
- return series;
- }
-
- /**
- * @return Series
- */
- hour() {
- let series = this.__date_ops(function (date_instance) {
- return date_instance.getHours();
- });
-
- return series;
- }
-
- /**
- * @return Series
- */
- day() {
- let series = this.__date_ops(function (date_instance) {
- return date_instance.getDay();
- });
-
- return series;
- }
-
- /**
- * @description generate year frome date instance
- * @return Series
- */
- year() {
-
- let series = this.__date_ops(function (date_instance) {
- return date_instance.getFullYear();
- });
-
- return series;
- }
-
- /**
- * @description generate month name
- * @return Series
- */
- month_name() {
-
- let self = this;
- let series = this.__date_ops(function (date_instance) {
- return self.__monthName[date_instance.getMonth()];
- });
-
- return series;
- }
-
- /**
- * @description generate days of the week
- * @return Series
- */
- weekdays() {
- let self = this;
- let series = this.__date_ops(function (date_instance) {
- return self.__weekName[date_instance.getDay()];
- });
-
- return series;
- }
-
- /**
- * @description day of the month
- * @return Series
- */
- monthday() {
- let series = this.__date_ops(function (date_instance) {
- return date_instance.getDate();
- });
-
- return series;
- }
-
- /**
- * @description obtain the seconds in a date
- * @return Series
- */
- seconds() {
- let series = this.__date_ops(function (date_instance) {
- return date_instance.getSeconds();
- });
-
- return series;
- }
-
- /**
- * @description obtain the minutes in a date
- * @return Series
- */
- minutes() {
- let series = this.__date_ops(function (date_instance) {
- return date_instance.getMinutes();
- });
-
- return series;
- }
-
-}
-
-
-export const to_datetime = (kwargs) => {
-
- let timeseries = new TimeSeries(kwargs); // parsed to date-time
- timeseries.preprocessed(); // generate date-time list
-
- return timeseries;
-
-};
diff --git a/src/lib/danfo/core/utils.js b/src/lib/danfo/core/utils.js
deleted file mode 100644
index bdfd3b6..0000000
--- a/src/lib/danfo/core/utils.js
+++ /dev/null
@@ -1,673 +0,0 @@
-import { tensor, linspace } from "@tensorflow/tfjs";
-import { Configs } from "../config/config";
-
-const config = new Configs();
-
-export class Utils {
- //remove an element from an array
- remove(arr, index) {
- let new_arr = arr.filter(function (val, i) {
- return i != index;
- });
-
- return new_arr;
- }
-
- //filter element present in an aray
- __remove_arr(arr, index) {
- let new_arr = arr.filter(function (val, i) {
- return !index.includes(i);
- });
-
- return new_arr;
- }
-
- // Returns if a value is a string
- __is_string(value) {
- return typeof value === "string" || value instanceof String;
- }
-
- // Returns if a value is really a number
- __is_number(value) {
- return typeof value === "number" && isFinite(value);
- }
-
- // Returns if a value is an object
- __is_object(value) {
- return value && typeof value === "object" && value.constructor === Object;
- }
-
- // Returns if a value is null
- __is_null(value) {
- return value === null;
- }
-
- // Returns if a value is undefined
- __is_undefined(value) {
- return typeof value === "undefined";
- }
-
- /**
- * Optimized version of random sampling from an array, as implemented in Python
- *
- *
- Chooses k unique random elements from a population sequence or set.
-
- Returns a new list containing elements from the population while
- leaving the original population unchanged. The resulting list is
- in selection order so that all sub-slices will also be valid random
- samples. This allows raffle winners (the sample) to be partitioned
- into grand prize and second place winners (the subslices).
-
- Members of the population need not be hashable or unique. If the
- population contains repeats, then each occurrence is a possible
- selection in the sample.
-
- To choose a sample in a range of integers, use range as an argument.
- This is especially fast and space efficient for sampling from a
- large population: sample(range(10000000), 60)
-
- Sampling without replacement entails tracking either potential
- selections (the array) in a list or previous selections in a set.
-
- When the number of selections is small compared to the
- population, then tracking selections is efficient, requiring
- only a small set and an occasional reselection. For
- a larger number of selections, the array tracking method is
- preferred since the list takes less space than the
- set and it doesn't suffer from frequent reselections.
- *
- * @param {*} array The array to sample values from randomly
- * @param {*} num The number of elements to sample randomly
- */
- // Chooses k unique random elements from array.
- __sample_from_iter(array, k, destructive) {
- var n = array.length;
-
- if (k < 0 || k > n)
- throw new RangeError("Sample larger than population or is negative");
-
- if (
- destructive ||
- n <= (k <= 5 ? 21 : 21 + Math.pow(4, Math.ceil(Math.log(k * 3, 4))))
- ) {
- if (!destructive) array = Array.prototype.slice.call(array);
- for (var i = 0; i < k; i++) {
- // invariant: non-selected at [i,n)
- var j = (i + Math.random() * (n - i)) | 0;
- var x = array[i];
- array[i] = array[j];
- array[j] = x;
- }
- array.length = k; // truncate
- return array;
- } else {
- var selected = new Set();
- // eslint-disable-next-line no-empty
- while (selected.add((Math.random() * n) | 0).size < k) {}
- // eslint-disable-next-line no-undef
- return Array.prototype.map.call(selected, (i) => population[i]);
- }
- }
-
- //generate integers between two set of numbers
- __range(start, end) {
- let value = linspace(start, end, end - start + 1).arraySync();
- return value;
- }
-
- //check if key is in object
- __key_in_object(object, key) {
- if (Object.prototype.hasOwnProperty.call(object, key)) {
- return true;
- } else {
- return false;
- }
- }
-
- //transpose row array into column wise array
- __get_col_values(data) {
- let row_len = data.length;
- let cols_len = data[0].length;
- var cols_arr = [];
- for (var i = 0; i <= cols_len - 1; i++) {
- let temp_col = [];
- for (let j = 0; j < row_len; j++) {
- temp_col.push(data[j][i]);
- }
- cols_arr.push(temp_col);
- }
- return cols_arr;
- }
-
- /**
- * retrieve row array and column names from object of the form {a: [1,2,3,4], b: [30,20, 30, 20}]
- * @param {*} data
- */
- _get_row_and_col_values(data) {
- let col_names = Object.keys(data);
- let col_data = Object.values(data);
- let first_col_len = col_data[0].length;
-
- col_data.forEach((data) => {
- if (data.length != first_col_len) {
- throw Error("Length Error: Length of columns must be the same!");
- }
- });
- let rows_len = col_data[0].length;
- let cols_len = col_names.length;
- var rows_arr = [];
-
- for (var i = 0; i <= rows_len - 1; i++) {
- var temp_row = [];
- for (let j = 0; j < cols_len; j++) {
- let _arr = col_data[j];
- temp_row.push(_arr[i]);
- }
- rows_arr.push(temp_row);
- }
- return [ rows_arr, col_names ];
- }
-
- //converts a 2D array of array to 1D for Series Class
- __convert_2D_to_1D(data) {
- let new_data = [];
- data.map((val) => {
- if (this.__is_object(val)) {
- new_data.push(JSON.stringify(val));
- } else {
- new_data.push(`${val}`);
- }
- });
- return new_data;
- }
-
- __replace_undefined_with_NaN(data, isSeries) {
- if (isSeries) {
- let temp_arr = [];
- data.forEach((val) => {
- if (typeof val === "undefined" || val == Infinity || val == null) {
- temp_arr.push(NaN);
- } else {
- temp_arr.push(val);
- }
- });
- return temp_arr;
- } else {
- let full_arr = [];
- data.forEach((val) => {
- var temp_arr = [];
- val.forEach((ele) => {
- if (typeof ele === "undefined" || ele == Infinity || ele == null) {
- temp_arr.push(NaN);
- } else {
- temp_arr.push(ele);
- }
- });
- full_arr.push(temp_arr);
- });
- return full_arr;
- }
- }
-
- __checker(arr_val){
- let dtypes = [];
- let lim;
- let int_tracker = [];
- let float_tracker = [];
- let string_tracker = [];
- let bool_tracker = [];
-
- if (arr_val.length == 0){
- dtypes.push("string");
- }
-
- if (arr_val.length < config.get_dtype_test_lim) {
- lim = arr_val.length - 1;
- } else {
- lim = config.get_dtype_test_lim - 1;
- }
- arr_val.forEach((ele, indx) => {
- let count = indx;
- if (typeof ele == "boolean") {
- float_tracker.push(false);
- int_tracker.push(false);
- string_tracker.push(false);
- bool_tracker.push(true);
- } else if (isNaN(ele) && typeof ele != "string"){
- float_tracker.push(true);
- int_tracker.push(false);
- string_tracker.push(false);
- bool_tracker.push(false);
- } else if (!isNaN(Number(ele))) {
- if (ele.toString().includes(".")) {
- float_tracker.push(true);
- int_tracker.push(false);
- string_tracker.push(false);
- bool_tracker.push(false);
- } else {
- float_tracker.push(false);
- int_tracker.push(true);
- string_tracker.push(false);
- bool_tracker.push(false);
- }
- } else {
- float_tracker.push(false);
- int_tracker.push(false);
- string_tracker.push(true);
- bool_tracker.push(false);
- }
-
- if (count == lim) {
- //if atleast one string appears return string dtype
- const even = (element) => element == true;
- if (string_tracker.some(even)) {
- dtypes = "string";
- } else if (float_tracker.some(even)) {
- dtypes = "float32";
- } else if (int_tracker.some(even)) {
- dtypes = "int32";
- } else if (bool_tracker.some(even)) {
- dtypes = "boolean";
- } else {
- dtypes = "undefined";
- }
- }
- });
-
- return dtypes;
- }
- //infer types from an array of array
- __get_t(arr_val) {
- const self = this;
- if (this.__is_1D_array(arr_val)) {
- return [ this.__checker(arr_val) ];
- } else {
- const dtypes = arr_val.map((arr) => {
- return self.__checker(arr);
- });
- return dtypes;
- }
- }
-
-
- __unique(data) {
- let unique = new Set();
-
- data.map(function (val) {
- unique.add(val[0]);
- });
-
- let unique_array = Array.from(unique);
-
- return unique_array;
- }
-
- //second version of In object
- __in_object(object, key, message) {
- if (!Object.prototype.hasOwnProperty.call(object, key)) {
- throw new Error(message);
- }
- }
-
- //check if a array is 1D
- __is_1D_array(arr) {
- if (
- typeof arr[0] == "number" ||
- typeof arr[0] == "string" ||
- typeof arr[0] == "boolean"
- ) {
- return true;
- } else {
- return false;
- }
- }
-
- //converts an array to object with index as value
- __arr_to_obj(arr) {
- let arr_map = {};
- arr.forEach((ele, i) => {
- arr_map[ele] = i;
- });
- return arr_map;
- }
-
- /**
- * count the NaN and non-NaN values present in an array
- * @param {Array} arr Array object
- * @param {Boolean} val whether to return the value count instead of the null count
- * @param {Boolean} isSeries Whether the Obj is of type series or not
- */
- __count_nan(arr, return_val = true, isSeries) {
- if (isSeries) {
- let null_count = 0;
- let val_count = 0;
- arr.forEach((ele) => {
- if (Number.isNaN(ele)) {
- null_count = null_count + 1;
- } else {
- val_count = val_count + 1;
- }
- });
- if (return_val) {
- return val_count;
- } else {
- return null_count;
- }
- } else {
- let result_arr = [];
- arr.forEach((ele_arr) => {
- let null_count = 0;
- let val_count = 0;
- ele_arr.forEach((ele) => {
- if (Number.isNaN(ele)) {
- null_count = null_count + 1;
- } else {
- val_count = val_count + 1;
- }
- });
- if (return_val) {
- result_arr.push(val_count);
- } else {
- result_arr.push(null_count);
- }
- });
- return result_arr;
- }
- }
-
- //computes the median of an array
- __median(arr, isSeries) {
- if (isSeries) {
- const sorted = arr.slice().sort((a, b) => a - b);
- const middle = Math.floor(sorted.length / 2);
-
- if (sorted.length % 2 === 0) {
- return (sorted[middle - 1] + sorted[middle]) / 2;
- }
-
- return sorted[middle];
- } else {
- let result_arr = [];
- arr.map((ele) => {
- const sorted = ele.slice().sort((a, b) => a - b);
- const middle = Math.floor(sorted.length / 2);
-
- if (sorted.length % 2 === 0) {
- result_arr.push((sorted[middle - 1] + sorted[middle]) / 2);
- } else {
- result_arr.push(sorted[middle]);
- }
- });
- return result_arr;
- }
- }
-
- //computes the mode(s) of an array
- __mode(arr) {
- var modes = [],
- count = [],
- i,
- maxIndex = 0;
-
- arr.forEach((val) => {
- count[val] = (count[val] || 0) + 1;
- if (count[val] > maxIndex) {
- maxIndex = count[val];
- }
- });
-
- for (i in count)
- if (this.__key_in_object(count, i)) {
- if (count[i] === maxIndex) {
- modes.push(Number(i));
- }
- }
-
- return modes;
- }
-
- //round elements of an array to ndp
- __round(arr, dp = 2, isSeries) {
- if (dp < 0) {
- dp = 1;
- }
- if (isSeries) {
- let new_arr = [];
- arr.map((val) => {
- new_arr.push(Number(val.toFixed(dp)));
- });
-
- return new_arr;
- } else {
- let result_arr = [];
- arr.map((arr_ele) => {
- let new_arr = [];
- arr_ele.map((val) => {
- new_arr.push(Number(val.toFixed(dp)));
- });
- result_arr.push(new_arr);
- });
- return result_arr;
- }
- }
-
- //check a variable is a function
- __is_function(variable) {
- return typeof variable == "function";
- }
-
- //generate a random list
- __randgen(num, start, end) {
- let gen_num = [];
-
- //random int
- function randi(a, b) {
- return Math.floor(Math.random() * (b - a) + a);
- }
-
- function recursive(val, arr) {
- if (!arr.includes(val)) {
- return val;
- }
-
- val = randi(start, end);
-
- recursive(val, arr);
- }
-
- for (let i = 0; i < num; i++) {
- let gen_val = randi(start, end);
- let recur_val = recursive(gen_val, gen_num);
- gen_num.push(recur_val);
- }
-
- return gen_num;
- }
-
- _throw_wrong_params_error(kwargs, params_needed) {
- let keys = Object.keys(kwargs);
- let bool = [];
- for (let i = 0; i < keys.length; i++) {
- if (params_needed.includes(keys[i])) {
- bool.push(true);
- } else {
- bool.push(false);
- }
- }
- const truthy = (element) => element == false;
- if (bool.some(truthy)) {
- throw Error(
- `Params Error: A specified parameter is not supported. Your params must be any of the following [${params_needed}]`
- );
- }
- }
-
- //maps int values (0, 1) to bools (false, true)
- __map_int_to_bool(arr, dim) {
- let new_arr = [];
- if (dim == 2) {
- arr.map((outer_val) => {
- let temp_arr = [];
- outer_val.map((val) => {
- if (val == 1) {
- temp_arr.push(true);
- } else {
- temp_arr.push(false);
- }
- });
- new_arr.push(temp_arr);
- });
- return new_arr;
- } else {
- arr.map((val) => {
- if (val == 1) {
- new_arr.push(true);
- } else {
- new_arr.push(false);
- }
- });
- return new_arr;
- }
- }
-
- __std(data) {
- let tensor_data = data;
-
- let mean = tensor_data.mean();
- let sub_mean_pow = tensor_data.sub(mean).pow(2);
- let mean_data = sub_mean_pow.mean();
- let std = mean_data.sqrt();
-
- return std;
- }
-
- __zeros(row, column) {
- let zero_data = [];
-
- for (let i = 0; i < row; i++) {
- let col_data = Array(column);
- for (let j = 0; j < column; j++) {
- col_data[j] = 0;
- }
- zero_data.push(col_data);
- }
- return zero_data;
- }
-
- __shuffle(num, array) {
- //https://stackoverflow.com/questions/18806210/generating-non-repeating-random-numbers-in-js/18806417
- var j,
- temp;
-
- for (let i = 0; i < num; i++) {
- j = Math.floor(Math.random() * (array.length - i)) + i;
-
- // swap randomly chosen element with current element
- temp = array[i];
- array[i] = array[j];
- array[j] = temp;
- }
-
- return array.slice(0, num);
- }
-
- __sort(arr, ascending = true) {
- let sorted = arr.slice();
- return sorted.sort((a, b) => {
- if (ascending) {
- if (typeof a === "string" && typeof b === "string") {
- return a.charCodeAt() - b.charCodeAt();
- } else {
- return a - b;
- }
- } else {
- if (typeof a === "string" && typeof b === "string") {
- return b.charCodeAt() - a.charCodeAt();
- } else {
- return b - a;
- }
- }
- });
- }
-
- __is_browser_env() {
- var isBrowser = new Function(
- "try {return this===window;}catch(e){ return false;}"
- );
- // tests if global scope is binded to window
- return isBrowser();
- }
-
- __is_node_env() {
- var isNode = new Function(
- "try {return this===global;}catch(e){return false;}"
- );
- // tests if global scope is binded to window
- return isNode();
- }
-
- _throw_str_dtype_error(obj, ops) {
- if (obj.dtypes[0] == "string") {
- throw Error(
- `dtype error: String data type does not support ${ops} operation`
- );
- }
- }
-
- /**
- * Remove NaN values from Array
- * @param {*} arr
- */
- _remove_nans(arr) {
- let values = arr.filter((val) => !isNaN(val) && typeof val != "string");
- return values;
- }
-
- __get_duplicate(arr) {
- let temp_obj = {};
- let rslt_obj = {};
-
- arr.forEach((val, index) => {
- if (val in temp_obj) {
- temp_obj[val]["count"] += 1;
- temp_obj[val]["index"].push(index);
- } else {
- temp_obj[val] = {};
- temp_obj[val]["count"] = 1;
- temp_obj[val]["index"] = [ index ];
- }
- });
-
- for (let key in temp_obj) {
- if (temp_obj[key]["count"] >= 2) {
- rslt_obj[key] = {};
- rslt_obj[key]["count"] = temp_obj[key]["count"];
- rslt_obj[key]["index"] = temp_obj[key]["index"];
- }
- }
-
- return rslt_obj;
- }
-
- /**
- * Sorts an array by index
- * @param {Array} arr1
- * @param {Array} arr2
- * @param {string} dtype
- *
- * @returns sorted index
- */
- _sort_arr_with_index(arr1, arr2, dtype) {
- let sorted_idx = arr1.map((item, index) => {
- return [ arr2[index], item ];
- });
- if (dtype == "string") {
- sorted_idx.sort();
- } else {
- sorted_idx.sort(([ arg1 ], [ arg2 ]) => arg2 - arg1);
- }
-
- return sorted_idx.map(([ , item ]) => item);
- }
-}
diff --git a/src/lib/danfo/index.js b/src/lib/danfo/index.js
deleted file mode 100644
index b565502..0000000
--- a/src/lib/danfo/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import NDframe from "./core/generic";
-
-export { Series } from "./core/series";
-export { DataFrame } from "./core/frame";
-export { to_datetime } from "./core/timeseries";
-export { read_csv, read_json, read_excel } from "./io/reader";
-export { merge } from "./core/merge";
-export { concat } from "./core/concat";
-export { LabelEncoder, OneHotEncoder } from "./preprocessing/encodings";
-export { MinMaxScaler, StandardScaler } from "./preprocessing/scalers";
-export { date_range } from "./core/date_range";
-export { get_dummies } from "./core/get_dummies";
-export { Configs } from "./config/config";
-export { NDframe };
-export { Str } from "./core/strings";
-export { Utils } from "./core/utils";
-
-export const _version = "0.2.5";
diff --git a/src/lib/danfo/io/reader.js b/src/lib/danfo/io/reader.js
deleted file mode 100644
index e9e8c88..0000000
--- a/src/lib/danfo/io/reader.js
+++ /dev/null
@@ -1,116 +0,0 @@
-import { data } from "@tensorflow/tfjs";
-import XLSX from "xlsx";
-import { DataFrame } from "../core/frame";
-
-
-/**
- * Reads a CSV file from local or remote storage
- * @param {string} source URL to CSV file
- * @param {object} config (Optional). A CSV Config object that contains configurations
- * for reading and decoding from CSV file(s).
- * { start: The index position to start from when reading the CSV file.
- *
- * end: The end position to stop at when reading the CSV file.
- *
- * ...csvConfigs: other supported Tensorflow csvConfig parameters. See https://js.tensorflow.org/api/latest/#data.csv
- * }
- *
- * @returns {Promise} DataFrame structure of parsed CSV data
- */
-export const read_csv = async (source, configs = {}) => {
- let { start, end } = configs;
- if (!(source.startsWith("https") || source.startsWith("http"))) {
- throw new Error("Cannot read local file in browser environment");
- }
- let tfdata = [];
- await data.csv(source, configs)
- .skip(start)
- .take(end)
- .forEachAsync((row) => {
- return tfdata.push(row);
- });
- const df = new DataFrame(tfdata);
- return df;
-};
-
-/**
- * Reads a JSON file from local or remote address
- * @param {string} source URL or local file path to retreive JSON file.
- * @returns {Promise} DataFrame structure of parsed CSV data
- */
-export const read_json = async (source) => {
- let res = await fetch(source, { method: "Get" });
- let json = await res.json();
- let df = new DataFrame(json);
- return df;
-
-};
-
-/**
- * Reads an Excel file from local or remote address
- * @param {string} source URL to Excel file
- * @param {object} configs {
- *
- * sheet : string, (Optional) Name of the sheet which u want to parse. Default will be the first sheet.
- *
- * header_index : int, (Optional) Index of the row which represents the header(columns) of the data. Default will be the first non empty row.
- *
- * data_index : int, (Optional) Index of the row from which actual data(content) starts. Default will be the next row of `header_index`.
- *
- * }
- * @returns {Promise} DataFrame structure of parsed Excel data
- */
-export const read_excel = async (source, configs = {}) => {
- let { sheet, header_index, data_index } = configs;
- let workbook;
- if (!header_index) {
- //default header_index
- header_index = 1;
- }
- if (!data_index) {
- //default data_index
- data_index = header_index + 1;
- }
- try {
- let res = await fetch(source, { method: "Get" });
- res = await res.arrayBuffer();
- res = new Uint8Array(res);
- workbook = XLSX.read(res, { type: "array" });
-
-
- // Parse worksheet from workbook
- const worksheet = workbook.Sheets[sheet || workbook.SheetNames[0]];
- let range = XLSX.utils.decode_range(worksheet["!ref"]);
- let column_names = [],
- data = [];
- for (let R = header_index - 1; R <= range.e.r; ++R) {
- let row_data = [];
- for (let C = range.s.c; C <= range.e.c; ++C) {
- let cell_ref;
-
- //Populate column_names
- if (R == header_index - 1) {
- cell_ref = XLSX.utils.encode_cell({ c: C, r: header_index - 1 });
- if (worksheet[cell_ref]) {
- column_names.push(worksheet[cell_ref].v);
- }
- }
-
- //Populate corresponding data row
- if (R >= data_index - 1) {
- cell_ref = XLSX.utils.encode_cell({ c: C, r: R });
- if (worksheet[cell_ref]) {
- row_data.push(worksheet[cell_ref].v);
- }
- }
- }
- if (R >= data_index - 1) {
- data.push(row_data);
- }
- }
- let df = new DataFrame(data, { columns: column_names });
- return df;
- } catch (err) {
- throw new Error(err);
- }
-};
diff --git a/src/lib/danfo/plotting/plot.js b/src/lib/danfo/plotting/plot.js
deleted file mode 100644
index aa5fc19..0000000
--- a/src/lib/danfo/plotting/plot.js
+++ /dev/null
@@ -1,866 +0,0 @@
-import { Utils } from "../core/utils";
-import { Series } from "../core/series";
-const utils = new Utils();
-
-/**
- * Change: Rising Odegua 6th Feb 2021
- * We no longer bundle Plotjs with DanfoJs. I noticed that removing this single
- * inport reduces the bundle size from 5.7mb to 2.1mb. I know it's still a huge
- * bundle, but it's progress!
- * If you need to use Plotly, then you can add the Plotly CDN
- * to your script before DanfoJs CDN
- */
-try {
- const version = Plotly.version;
- console.info(`Using Plotly version ${version}`);
-} catch (error) {
- console.info(`Plotly CDN not found. If you need to make Plots, then add the Plotly CDN to your script`);
-}
-
-/**
- * Plotting methods and Functions performed on Series and DataFrames
- */
-export class Plot {
- constructor(ndframe, div) {
- this.div = div;
- this.ndframe = ndframe;
- }
-
-
- /**
- * Plot Series or DataFrame as lines. This function is useful to plot lines using DataFrame’s values as coordinates.
- * Make plots of Series or DataFrame.
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {string} div Name of the div to show the plot
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- line(config = {}) {
-
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
- let params = ret_params[1];
-
- if (this.ndframe instanceof Series) {
- let trace = {};
- let y = this.ndframe.values;
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace["y"] = y;
- trace['type'] = "line";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //check if plotting two columns against each other
- if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) {
- if (!this.ndframe.column_names.includes(this_config['x'])) {
- throw Error(`Column Error: ${this_config['x']} not found in columns`);
- }
- if (!this.ndframe.column_names.includes(this_config['y'])) {
- throw Error(`Column Error: ${this_config['y']} not found in columns`);
- }
-
-
- let x = this.ndframe[this_config['x']].values;
- let y = this.ndframe[this_config['y']].values;
-
- let trace = {};
- trace["x"] = x;
- trace['y'] = y;
-
-
- let xaxis = {}; let yaxis = {};
- xaxis['title'] = this_config['x'];
- yaxis['title'] = this_config['y'];
-
- this_config['layout']['xaxis'] = xaxis;
- this_config['layout']['yaxis'] = yaxis;
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) {
- //plot single column specified in either of param [x | y] against index
- //plot columns against index
- let data = [];
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- cols_to_plot.forEach((c_name) => {
- let trace = {};
-
- params.forEach((param) => { //TODO accept individual configuration for traces
- trace[param] = config[param];
- });
- if (utils.__key_in_object(this_config, 'x')) {
- trace["x"] = this.ndframe[this_config['x']].values;
- trace["y"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
- } else {
- trace["y"] = this.ndframe[this_config['y']].values;
- trace["x"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
- }
-
- data.push(trace);
-
- });
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- } else {
- //plot columns against index
- let data = [];
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- cols_to_plot.forEach((c_name) => {
- let trace = {};
-
- params.forEach((param) => { //TODO accept individual configuration for traces
- trace[param] = config[param];
- });
- trace["x"] = this.ndframe.index;
- trace["y"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
-
- data.push(trace);
-
- });
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- }
-
- }
-
-
- }
-
-
- /**
- * Plot Series or DataFrame as Bars.
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {string} div Name of the div to show the plot
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- bar(config = {}) {
-
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
- let params = ret_params[1];
-
- if (this.ndframe instanceof Series) {
- let trace = {};
- let y = this.ndframe.values;
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace["y"] = y;
- trace['type'] = "bar";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //check if plotting two columns against each other
- if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) {
- if (!this.ndframe.column_names.includes(this_config['x'])) {
- throw Error(`Column Error: ${this_config['x']} not found in columns`);
- }
- if (!this.ndframe.column_names.includes(this_config['y'])) {
- throw Error(`Column Error: ${this_config['y']} not found in columns`);
- }
-
-
- let x = this.ndframe[this_config['x']].values;
- let y = this.ndframe[this_config['y']].values;
-
- let trace = {};
- trace["x"] = x;
- trace['y'] = y;
- trace['type'] = "bar";
-
-
- let xaxis = {}; let yaxis = {};
- xaxis['title'] = this_config['x'];
- yaxis['title'] = this_config['y'];
-
- this_config['layout']['xaxis'] = xaxis;
- this_config['layout']['yaxis'] = yaxis;
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) {
- //plot single column specified in either of param [x | y] against index
- let trace = {};
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- if (utils.__key_in_object(this_config, 'x')) {
- trace['y'] = this.ndframe[this_config['x']].values;
- } else {
- trace['y'] = this.ndframe[this_config['y']].values;
- }
- trace['type'] = "bar";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //plot columns against index
- let data = [];
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- cols_to_plot.forEach((c_name) => {
- let trace = {};
-
- // params.forEach(param => { //TODO accept individual configuration for traces
- // trace[param] = config[param]
- // })
- trace['x'] = this.ndframe.index;
- trace["y"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
- trace['type'] = "bar";
-
- data.push(trace);
-
- });
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- }
-
- }
-
-
- }
-
-
- /**
- * Plot two or more columns in a DataFrame as scatter points. If Series, plot against its index
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {string} div Name of the div to show the plot
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- scatter(config = {}) {
-
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
- let params = ret_params[1];
-
- if (this.ndframe instanceof Series) {
- let trace = {};
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace["x"] = this.ndframe.values;
- trace['y'] = this.ndframe.index;
- trace['type'] = "scatter";
- trace['mode'] = "markers";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //check if plotting two columns against each other
- if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) {
- if (!this.ndframe.column_names.includes(this_config['x'])) {
- throw Error(`Column Error: ${this_config['x']} not found in columns`);
- }
- if (!this.ndframe.column_names.includes(this_config['y'])) {
- throw Error(`Column Error: ${this_config['y']} not found in columns`);
- }
-
-
- let x = this.ndframe[this_config['x']].values;
- let y = this.ndframe[this_config['y']].values;
-
- let trace = {};
- trace["x"] = x;
- trace['y'] = y;
- trace['type'] = "scatter";
- trace['mode'] = "markers";
-
- let xaxis = {}; let yaxis = {};
- xaxis['title'] = this_config['x'];
- yaxis['title'] = this_config['y'];
-
- this_config['layout']['xaxis'] = xaxis;
- this_config['layout']['yaxis'] = yaxis;
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) {
- //plot single column specified in either of param [x | y] against index
- let trace = {};
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- if (utils.__key_in_object(this_config, 'x')) {
- trace['y'] = this.ndframe.index;
- trace['x'] = this.ndframe[this_config['x']].values;
-
- } else {
- trace['x'] = this.ndframe.index;
- trace['y'] = this.ndframe[this_config['y']].values;
-
- }
- trace['type'] = "scatter";
- trace['mode'] = "markers";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //plot columns against index
- let data = [];
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- cols_to_plot.forEach((c_name) => {
- let trace = {};
-
- // params.forEach(param => { //TODO accept individual configuration for traces
- // trace[param] = config[param]
- // })
- trace['y'] = this.ndframe.index;
- trace["x"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
- trace['type'] = "scatter";
- trace['mode'] = "markers";
- data.push(trace);
-
- });
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- }
-
- }
-
-
- }
-
-
- /**
- * Plot columns in a Series/DataFrame as Histograms.
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {string} div Name of the div to show the plot
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- hist(config = {}) {
-
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
- let params = ret_params[1];
-
- if (this.ndframe instanceof Series) {
- let trace = {};
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace["x"] = this.ndframe.values;
- trace['type'] = "histogram";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'x')) {
- //plot as vertical histogram
- let trace = {};
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace['x'] = this.ndframe[this_config['y']].values;
- trace['type'] = "histogram";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'y')) {
- //plot as vertical histogram
- let trace = {};
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace['y'] = this.ndframe[this_config['y']].values;
- trace['type'] = "histogram";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- let data = [];
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- cols_to_plot.forEach((c_name) => {
- let trace = {};
- trace["x"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
- trace['type'] = "histogram";
- data.push(trace);
-
- });
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- }
-
- }
-
-
- /**
- * Makes Pie Plots from two Columns in a DataFrame.
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {string} div Name of the div to show the plot
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- pie(config = {}) {
-
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
-
-
- if (this.ndframe instanceof Series) {
- let data = [ {
- values: this.ndframe.values,
- labels: this.ndframe.index,
- type: 'pie',
- name: this_config['labels'],
- hoverinfo: 'label+percent+name',
- automargin: true
- } ];
-
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'values') && utils.__key_in_object(this_config, 'labels')) {
- if (!this.ndframe.column_names.includes(this_config['labels'])) {
- throw Error(`Column Error: ${this_config['labels']} not found in columns. labels name must be one of [ ${this.ndframe.column_names}]`);
- }
- if (!this.ndframe.column_names.includes(this_config['values'])) {
- throw Error(`Column Error: ${this_config['values']} not found in columns. value name must be one of [ ${this.ndframe.column_names}]`);
- }
- let data = [ {
- values: this.ndframe[this_config['values']].values,
- labels: this.ndframe[this_config['labels']].values,
- type: 'pie',
- name: this_config['labels'],
- hoverinfo: 'label+percent+name',
- automargin: true
- } ];
-
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- } else {
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- if (utils.__key_in_object(this_config, 'row_pos')) {
- if (this_config['row_pos'].length != cols_to_plot.length - 1) {
- throw Error(`Lenght of row_pos array must be equal to number of columns. Got ${this_config['row_pos'].length}, expected ${cols_to_plot.length - 1}`);
- }
- } else {
- let temp_arr = [];
- for (let i = 0; i < cols_to_plot.length - 1; i++) {
- temp_arr.push(0);
- }
- this_config['row_pos'] = temp_arr;
-
- }
-
- if (utils.__key_in_object(this_config, 'col_pos')) {
- if (this_config['col_pos'].length != cols_to_plot.length - 1) {
- throw Error(`Lenght of col_pos array must be equal to number of columns. Got ${this_config['col_pos'].length}, expected ${cols_to_plot.length - 1}`);
- }
- } else {
- let temp_arr = [];
- for (let i = 0; i < cols_to_plot.length - 1; i++) {
- temp_arr.push(i);
- }
- this_config['col_pos'] = temp_arr;
-
- }
- let data = [];
-
- cols_to_plot.forEach((c_name, i) => {
- let trace = {};
- trace["values"] = this.ndframe[c_name].values;
- trace['labels'] = this.ndframe[this_config['labels']].values;
- trace['name'] = c_name;
- trace['type'] = "pie";
- trace['domain'] = { row: this_config['row_pos'][i], column: this_config['col_pos'][i] };
- trace["hoverinfo"] = 'label+percent+name';
- trace['textposition'] = "outside";
- trace['automargin'] = true;
- data.push(trace);
-
- });
-
- if (!utils.__key_in_object(this_config, "grid")) {
- //set default grid
- let size = Number((this.ndframe.shape[1] / 2).toFixed()) + 1;
- this_config['grid'] = { rows: size, columns: size };
- }
- this_config['layout']['grid'] = this_config['grid'];
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
-
- }
-
- }
-
-
- /**
- * Plot Box plots from Series or DataFrame as lines.
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- box(config = {}) {
-
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
- let params = ret_params[1];
-
- if (this.ndframe instanceof Series) {
- let trace = {};
- let y = this.ndframe.values;
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace["y"] = y;
- trace['type'] = "box";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //check if plotting two columns against each other
- if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) {
- if (!this.ndframe.column_names.includes(this_config['x'])) {
- throw Error(`Column Error: ${this_config['x']} not found in columns`);
- }
- if (!this.ndframe.column_names.includes(this_config['y'])) {
- throw Error(`Column Error: ${this_config['y']} not found in columns`);
- }
-
-
- let x = this.ndframe[this_config['x']].values;
- let y = this.ndframe[this_config['y']].values;
-
- let trace = {};
- trace["x"] = x;
- trace['y'] = y;
- trace['type'] = 'box';
-
-
- let xaxis = {}; let yaxis = {};
- xaxis['title'] = this_config['x'];
- yaxis['title'] = this_config['y'];
-
- this_config['layout']['xaxis'] = xaxis;
- this_config['layout']['yaxis'] = yaxis;
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) {
- //plot single column specified in either of param [x | y] against index
- let trace = {};
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- if (utils.__key_in_object(this_config, 'x')) {
- trace['x'] = this.ndframe[this_config['x']].values;
- trace['y'] = this.ndframe.index;
- trace['type'] = 'box';
- } else {
- trace['x'] = this.ndframe.index;
- trace['y'] = this_config['y'];
- trace['type'] = 'box';
- }
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //plot columns against index
- let data = [];
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- cols_to_plot.forEach((c_name) => {
- let trace = {};
-
- params.forEach((param) => { //TODO accept individual configuration for traces
- trace[param] = config[param];
- });
- trace["y"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
- trace['type'] = 'box';
- data.push(trace);
-
- });
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- }
-
- }
-
-
- }
-
-
- /**
- * Plot Violin plots from Series or DataFrame as lines.
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- violin(config = {}) {
-
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
- let params = ret_params[1];
-
- if (this.ndframe instanceof Series) {
- let trace = {};
- let y = this.ndframe.values;
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- trace["y"] = y;
- trace['type'] = "violin";
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //check if plotting two columns against each other
- if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) {
- if (!this.ndframe.column_names.includes(this_config['x'])) {
- throw Error(`Column Error: ${this_config['x']} not found in columns`);
- }
- if (!this.ndframe.column_names.includes(this_config['y'])) {
- throw Error(`Column Error: ${this_config['y']} not found in columns`);
- }
-
-
- let x = this.ndframe[this_config['x']].values;
- let y = this.ndframe[this_config['y']].values;
-
- let trace = {};
- trace["x"] = x;
- trace['y'] = y;
- trace['type'] = 'violin';
-
-
- let xaxis = {}; let yaxis = {};
- xaxis['title'] = this_config['x'];
- yaxis['title'] = this_config['y'];
-
- this_config['layout']['xaxis'] = xaxis;
- this_config['layout']['yaxis'] = yaxis;
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) {
- //plot single column specified in either of param [x | y] against index
- let trace = {};
-
- params.forEach((param) => {
- if (!param == "layout") {
- trace[param] = config[param];
- }
- });
-
- if (utils.__key_in_object(this_config, 'x')) {
- trace['x'] = this.ndframe[this_config['x']].values;
- trace['y'] = this.ndframe.index;
- trace['type'] = 'violin';
- } else {
- trace['x'] = this.ndframe.index;
- trace['y'] = this_config['y'];
- trace['type'] = 'violin';
- }
-
- Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config);
-
- } else {
- //plot columns against index
- let data = [];
- let cols_to_plot;
-
- if (utils.__key_in_object(this_config, "columns")) {
- cols_to_plot = this.____check_if_cols_exist(this_config['columns']);
- } else {
- cols_to_plot = this.ndframe.column_names;
- }
-
- cols_to_plot.forEach((c_name) => {
- let trace = {};
-
- params.forEach((param) => { //TODO accept individual configuration for traces
- trace[param] = config[param];
- });
- trace["y"] = this.ndframe[c_name].values;
- trace['name'] = c_name;
- trace['type'] = 'violin';
- data.push(trace);
-
- });
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- }
-
- }
-
-
- }
-
- /**
- * Display DataFrame in a div using D3.js format
- * Uses the Plotly as backend, so supoorts Plotly's configuration parameters
- * @param {Object} config configuration options for making Plots, supports Plotly parameters
- */
- table(config = {}) {
- let ret_params = this.__get_plot_params(config);
- let this_config = ret_params[0];
- let header = {};
- let cells = {};
- let cols_data = [];
- let cols_2_show;
-
-
- if (utils.__key_in_object(this_config, 'columns')) {
-
- this_config['columns'].forEach((cname) => {
- if (!this.ndframe.column_names.includes(cname)) {
- throw Error(`Column Error: ${cname} not found in columns. Columns should be one of [ ${this.ndframe.column_names} ]`);
- }
-
- let idx = this.ndframe.column_names.indexOf(cname);
- cols_data.push(this.ndframe.col_data[idx]);
- });
- cols_2_show = this_config['columns'];
- } else {
-
- cols_2_show = this.ndframe.column_names;
- cols_data = this.ndframe.col_data;
-
- }
-
- header['values'] = cols_2_show;
- cells['values'] = cols_data;
-
- if (this_config['header_style']) {
- Object.keys(this_config['header_style']).forEach((param) => {
- header[param] = this_config['header_style'][param];
- });
- }
-
- if (this_config['cell_style']) {
- Object.keys(this_config['cell_style']).forEach((param) => {
- cells[param] = this_config['cell_style'][param];
- });
- }
- var data = [ {
- type: 'table',
- header: header,
- cells: cells
- } ];
- Plotly.newPlot(this.div, data, this_config['layout'], this_config);
-
- }
-
-
- __get_plot_params(config) {
- let params = Object.keys(config);
- let this_config = {};
-
- params.forEach((param) => {
- this_config[param] = config[param];
- });
-
- if (!utils.__key_in_object(config, "layout")) {
- this_config['layout'] = {};
- }
-
-
- return [ this_config, params ];
-
- }
-
- ____check_if_cols_exist(cols) {
- cols.forEach((col) => {
- if (!this.ndframe.column_names.includes(col)) {
- throw Error(`Column Error: ${col} not found in columns. Columns should be one of [ ${this.ndframe.column_names} ]`);
- }
- });
- return cols;
- }
-
-
-}
diff --git a/src/lib/danfo/preprocessing/encodings.js b/src/lib/danfo/preprocessing/encodings.js
deleted file mode 100644
index ace3388..0000000
--- a/src/lib/danfo/preprocessing/encodings.js
+++ /dev/null
@@ -1,108 +0,0 @@
-import { Series } from "../core/series";
-import { Utils } from "../core/utils";
-import { DataFrame } from "../core/frame";
-
-const utils = new Utils;
-
-export class LabelEncoder {
-
- /**
- *
- * @param {data} data [Array|Series]
- * @returns Array.
- */
- fit(data) {
- let in_data = null;
- if (Array.isArray(data)) {
- in_data = data;
- } else if (data instanceof Series) {
- in_data = data.values;
- } else {
- throw new Error("data must be an array or a Series");
- }
-
- let data_set = new Set(in_data);
- this.label = Array.from(data_set);
-
- let self = this;
- let output_data = in_data.map((x) => {
- return self.label.indexOf(x);
- });
-
- return new Series(output_data);
- }
-
- /**
- * Transform data using the label generated from fitting
- * @param {data} data [Array|Series]
- * @returns Array
- */
- transform(data) {
- let in_data = null;
- if (Array.isArray(data)) {
- in_data = data;
- } else if (data instanceof Series) {
- in_data = data.values;
- } else {
- throw new Error("data must be an array or a Series");
- }
-
- let self = this;
- let output_data = in_data.map((x) => {
- return self.label.indexOf(x);
- });
- return new Series(output_data);
- }
-}
-
-export class OneHotEncoder {
-
- fit(data) {
- let in_data = null;
- if (Array.isArray(data)) {
- in_data = data;
- } else if (data instanceof Series) {
- in_data = data.values;
- } else {
- throw new Error("data must be an array");
- }
-
- let data_set = new Set(in_data);
- this.label = Array.from(data_set);
-
- let onehot_data = utils.__zeros(in_data.length, this.label.length);
-
- for (let i = 0; i < in_data.length; i++) {
-
- let elem = in_data[i];
- let elem_index = this.label.indexOf(elem);
- onehot_data[i][elem_index] = 1;
- }
-
- return new DataFrame(onehot_data, { columns: this.label });
-
- }
-
- transform(data) {
- let in_data = null;
-
- if (Array.isArray(data)) {
- in_data = data;
- } else if (data instanceof Series) {
- in_data = data.values;
- } else {
- throw new Error("data must be an array");
- }
-
- let onehot_data = utils.__zeros(in_data.length, this.label.length);
-
- for (let i = 0; i < in_data.length; i++) {
- let elem = in_data[i];
- let elem_index = this.label.indexOf(elem);
- onehot_data[i][elem_index] = 1;
- }
-
- return new DataFrame(onehot_data, { columns: this.label });
-
- }
-}
diff --git a/src/lib/danfo/preprocessing/scalers.js b/src/lib/danfo/preprocessing/scalers.js
deleted file mode 100644
index 2542512..0000000
--- a/src/lib/danfo/preprocessing/scalers.js
+++ /dev/null
@@ -1,267 +0,0 @@
-import { tensor, moments } from "@tensorflow/tfjs";
-import { Series } from "../core/series";
-import { DataFrame } from "../core/frame";
-import { Utils } from "../core/utils";
-
-const utils = new Utils();
-
-export class MinMaxScaler {
- /**
- * Fit minmax scaler on data, to obtain their min and max value
- * @param {data} data [DataRame | Series | Array]
- * @returns Array
- */
- fit(data) {
- let tensor_data = null;
- if (Array.isArray(data)) {
- tensor_data = tensor(data);
- } else if (data instanceof DataFrame || data instanceof Series) {
- if (data.dtypes.includes("string")) {
- throw Error("Dtype Error: Cannot perform operation on string dtypes");
- }
- tensor_data = tensor(data.values);
- } else {
- throw new Error("data must either be an Array, DataFrame or Series");
- }
-
- this.max = tensor_data.max(0);
- this.min = tensor_data.min(0);
-
- let output_data = tensor_data
- .sub(this.min)
- .div(this.max.sub(this.min))
- .arraySync();
-
- if (data instanceof Series || Array.isArray(data)) {
- return new Series(output_data);
- } else {
- return new DataFrame(output_data);
- }
- }
-
- /**
- * Transform an array using the min and max generated from the fitting on data
- * @param {data} data [Array]
- * @returns array
- */
- transform(data) {
- if (data instanceof Series) {
- if (data.dtypes.includes("string")) {
- throw Error("Dtype Error: Cannot perform operation on string dtypes");
- }
- let tensor_data = tensor(data.values);
- let output_data = tensor_data
- .sub(this.min)
- .div(this.max.sub(this.min))
- .arraySync();
- return new Series(output_data);
- } else if (Array.isArray(data)) {
- let tensor_data = tensor(data);
- let output_data = tensor_data
- .sub(this.min)
- .div(this.max.sub(this.min))
- .arraySync();
- if (utils.__is_1D_array(data)) {
- return new Series(output_data);
- } else {
- return new DataFrame(output_data);
- }
- } else if (data instanceof DataFrame) {
- if (data.dtypes.includes("string")) {
- throw Error("Dtype Error: Cannot perform operation on string dtypes");
- }
- let tensor_data = tensor(data.values);
- let output_data = tensor_data
- .sub(this.min)
- .div(this.max.sub(this.min))
- .arraySync();
- return new DataFrame(output_data);
- } else {
- throw Error("Value Error: Data type not supoorted");
- }
- }
-}
-
-export class StandardScaler {
- /**
- *
- * @param {data} data [DataRame | Series | Array]
- * @returns Array
- */
- fit(data) {
- let tensor_data = null;
- if (Array.isArray(data)) {
- tensor_data = tensor(data);
- } else if (data instanceof DataFrame || data instanceof Series) {
- if (data.dtypes.includes("string")) {
- throw Error("Dtype Error: Cannot perform operation on string dtypes");
- }
- tensor_data = tensor(data.values);
- } else {
- throw new Error("data must either be an Array, DataFrame or Series");
- }
-
- this.std = moments(tensor_data, 0).variance.sqrt();
- this.mean = tensor_data.mean(0);
- let output_data = tensor_data.sub(this.mean).div(this.std).arraySync();
-
- if (data instanceof Series || Array.isArray(data)) {
- return new Series((data = output_data));
- } else {
- return new DataFrame((data = output_data));
- }
- }
-
- transform(data) {
- // if(!Array.isArray(data)){
- // throw new Error(data)
- // }
-
- if (data instanceof Series) {
- if (data.dtypes.includes("string")) {
- throw Error("Dtype Error: Cannot perform operation on string dtypes");
- }
- let tensor_data = tensor(data.values);
- let output_data = tensor_data.sub(this.mean).div(this.std).arraySync();
- return new Series(output_data);
- } else if (Array.isArray(data)) {
- let tensor_data = tensor(data);
- let output_data = tensor_data.sub(this.mean).div(this.std).arraySync();
- if (utils.__is_1D_array(data)) {
- return new Series(output_data);
- } else {
- return new DataFrame(output_data);
- }
- } else if (data instanceof DataFrame) {
- if (data.dtypes.includes("string")) {
- throw Error("Dtype Error: Cannot perform operation on string dtypes");
- }
- let tensor_data = tensor(data.values);
- let output_data = tensor_data.sub(this.mean).div(this.std).arraySync();
- return new DataFrame(output_data);
- } else {
- throw Error("Value Error: Data type not supoorted");
- }
- }
-}
-
-// export class RobustScaler{
-
-// __median(arr, isTensor,return_index) {
-// if (!isTensor) {
-// const sorted = arr.slice().sort((a, b) => a - b);
-// const middle = Math.floor(sorted.length / 2);
-
-// if (sorted.length % 2 === 0) {
-
-// return return_index ? [(middle - 1) , middle] : (sorted[middle - 1] + sorted[middle]) / 2;
-// }
-
-// return return_index ? middle : sorted[middle] ;
-// } else {
-// let result_arr = []
-// arr.map(ele => {
-// const sorted = ele.slice().sort((a, b) => a - b);
-// const middle = Math.floor(sorted.length / 2);
-
-// if (sorted.length % 2 === 0) {
-// result_arr.push(return_index ? [(middle - 1) , middle] :(sorted[middle - 1] + sorted[middle]) / 2 )
-// } else {
-// result_arr.push(return_index ? middle : sorted[middle])
-// }
-
-// })
-// return result_arr
-// }
-
-// }
-
-// quantile(data,isTensor){
-
-// if(isTensor){
-// data = utils.__get_col_values(data);
-// }
-
-// let median = this.__median(data,isTensor,true)
-// let med = this.__median(data,isTensor,false)
-
-// let q1 = []
-// let q2 = []
-
-// if(!isTensor){
-// let sorted = data.slice().sort((a, b) => a - b);
-
-// if(Array.isArray(median)){
-// let lower = median[0]
-// let lower_data = sorted.slice(0,lower+1)
-// let upper_data = sorted.slice(lower+1,)
-
-// q1.push(this.__median(lower_data,isTensor,false));
-// q2.push(this.__median(upper_data,isTensor,false));
-
-// }else{
-// let lower_data = sorted.slice(0,median)
-// let upper_data = sorted.slice(median+1,)
-
-// q1.push(this.__median(lower_data,isTensor,false));
-// q2.push(this.__median(upper_data,isTensor,false));
-// }
-
-// }else{
-
-// data.map((x,i)=>{
-// let sorted = x.slice().sort((a, b) => a - b);
-
-// if(Array.isArray(median[i])){
-// let lower = median[i][0]
-// let lower_data = sorted.slice(0,lower+1)
-// let upper_data = sorted.slice(lower+1,)
-
-// q1.push(this.__median(lower_data,!isTensor,false));
-// q2.push(this.__median(upper_data,!isTensor,false));
-
-// }else{
-// let lower_data = sorted.slice(0,median[i])
-// let upper_data = sorted.slice(median[i]+1,)
-
-// q1.push(this.__median(lower_data,!isTensor,false));
-// q2.push(this.__median(upper_data,!isTensor,false));
-// }
-
-// })
-// }
-
-// return [q1,q2, med]
-
-// }
-
-// /**
-// * Fit robust scalar on data to obtain the first quantile and third quantile
-// * @param {data} data [DataRame | Series | Array]
-// * @returns Array
-// */
-// fit(data){
-
-// let tensor_data = null
-// let isTensor = false;
-// if(Array.isArray(data)){
-// tensor_data = tensor(data)
-// }
-// else if((data instanceof DataFrame)){
-// tensor_data = tensor(data.values)
-// isTensor = true;
-// }
-// else if((data instanceof Series)){
-// tensor_data = tensor(data.values)
-// }
-// else{
-// throw new Error("data must either be an Array, DataFrame or Series")
-// }
-
-// let [q1, q3, median] = this.quantile(data,isTensor)
-// let q3_tensor = tensor(q3)
-// let output_data = tensor_data.sub(median).div(q3_tensor.sub(q1)).arraySync()
-
-// return output_data;
-// }
-// }
diff --git a/src/lib/ml5/Word2vec/index.js b/src/lib/ml5/Word2vec/index.js
index 6ecbbc0..bfd28d6 100644
--- a/src/lib/ml5/Word2vec/index.js
+++ b/src/lib/ml5/Word2vec/index.js
@@ -7,205 +7,16 @@
Word2Vec
*/
-import * as tf from '@tensorflow/tfjs';
-import axios from 'axios';
-import callCallback from '../utils/callcallback';
-
-
-class Word2Vec {
- /**
- * Create Word2Vec model
- * @param {String} modelPath - path to pre-trained word vector model in .json e.g data/wordvecs1000.json
- * @param {function} callback - Optional. A callback function that is called once the model has loaded. If no callback is provided, it will return a promise
- * that will be resolved once the model has loaded.
- */
- constructor(modelPath, callback) {
- this.model = {};
- this.modelPath = modelPath;
- this.modelSize = 0;
- this.modelLoaded = false;
-
- this.ready = callCallback(this.loadModel(), callback);
- // TODO: Add support to Promise
- // this.then = this.ready.then.bind(this.ready);
- }
-
- async loadModel() {
- const {data} = await axios.get(this.modelPath)
-
- Object.keys(data.vectors).forEach((word) => {
- this.model[word] = tf.tensor1d(data.vectors[word]);
- });
- this.modelSize = Object.keys(this.model).length;
- this.modelLoaded = true;
- return this;
- }
-
- dispose(callback) {
- Object.values(this.model).forEach(x => x.dispose());
- if (callback) {
- callback();
- }
- }
-
- async add(inputs, maxOrCb, cb) {
- const { max, callback } = Word2Vec.parser(maxOrCb, cb, 10);
-
- await this.ready;
- return tf.tidy(() => {
- const sum = Word2Vec.addOrSubtract(this.model, inputs, 'ADD');
- const result = Word2Vec.nearest(this.model, sum, inputs.length, inputs.length + max);
- if (callback) {
- callback(undefined, result);
- }
- return result;
- });
- }
-
- async subtract(inputs, maxOrCb, cb) {
- const { max, callback } = Word2Vec.parser(maxOrCb, cb, 10);
-
- await this.ready;
- return tf.tidy(() => {
- const subtraction = Word2Vec.addOrSubtract(this.model, inputs, 'SUBTRACT');
- const result = Word2Vec.nearest(this.model, subtraction, inputs.length, inputs.length + max);
- if (callback) {
- callback(undefined, result);
- }
- return result;
- });
- }
-
- async average(inputs, maxOrCb, cb) {
- const { max, callback } = Word2Vec.parser(maxOrCb, cb, 10);
-
- await this.ready;
- return tf.tidy(() => {
- const sum = Word2Vec.addOrSubtract(this.model, inputs, 'ADD');
- const avg = tf.div(sum, tf.tensor(inputs.length));
- const result = Word2Vec.nearest(this.model, avg, inputs.length, inputs.length + max);
- if (callback) {
- callback(undefined, result);
- }
- return result;
- });
- }
-
- async nearest(input, maxOrCb, cb) {
- const { max, callback } = Word2Vec.parser(maxOrCb, cb, 10);
-
- await this.ready;
- const vector = this.model[input];
- let result;
- if (vector) {
- result = Word2Vec.nearest(this.model, vector, 1, max + 1);
- } else {
- result = null;
- }
-
- if (callback) {
- callback(undefined, result);
- }
- return result;
- }
-
- /* Given a set of your own words, find the nearest neighbors */
- async nearestFromSet(input, set, maxOrCb, cb) {
- const { max, callback } = Word2Vec.parser(maxOrCb, cb, 10);
- await this.ready;
- const vector = this.model[input];
-
- // If the input vector isn't found, bail out early.
- if (!vector) {
- if(callback) callback(undefined, null);
- return null;
- }
-
- const miniModel = {};
- set.forEach((word) => {
- if (this.model[word]) miniModel[word] = this.model[word];
- });
-
- // If none of the words in the set are found, also bail out
- if (!miniModel.length) {
- if(callback) callback(undefined, null);
- return null;
- }
-
- const result = Word2Vec.nearest(miniModel, vector, 1, max + 1);
-
- if (callback) {
- callback(undefined, result);
- }
- return result;
- }
-
- async getRandomWord(callback) {
- await this.ready;
- const words = Object.keys(this.model);
- const result = words[Math.floor(Math.random() * words.length)];
- if (callback) {
- callback(undefined, result);
- }
- return result;
- }
-
- static parser(maxOrCallback, cb, defaultMax) {
- let max = defaultMax;
- let callback = cb;
-
- if (typeof maxOrCallback === 'function') {
- callback = maxOrCallback;
- } else if (typeof maxOrCallback === 'number') {
- max = maxOrCallback;
- }
- return { max, callback };
- }
-
- static addOrSubtract(model, values, operation) {
- return tf.tidy(() => {
- const vectors = [];
- const notFound = [];
- if (values.length < 2) {
- throw new Error('Invalid input, must be passed more than 1 value');
- }
- values.forEach((value) => {
- const vector = model[value];
- if (!vector) {
- notFound.push(value);
- } else {
- vectors.push(vector);
- }
- });
-
- if (notFound.length > 0) {
- throw new Error(`Invalid input, vector not found for: ${notFound.toString()}`);
- }
- let result = vectors[0];
- if (operation === 'ADD') {
- for (let i = 1; i < vectors.length; i += 1) {
- result = tf.add(result, vectors[i]);
- }
- } else {
- for (let i = 1; i < vectors.length; i += 1) {
- result = tf.sub(result, vectors[i]);
- }
- }
- return result;
- });
- }
-
- static nearest(model, input, start, max) {
- const nearestVectors = [];
- Object.keys(model).forEach((word) => {
- const distance = tf.util.distSquared(input.dataSync(), model[word].dataSync());
- nearestVectors.push({ word, distance });
- });
- nearestVectors.sort((a, b) => a.distance - b.distance);
- return nearestVectors.slice(start, max);
- }
-}
-
-const word2vec = (model, cb) => new Word2Vec(model, cb);
+const word2vec = () => {
+ console.log('%cword2vec has been disabled', 'color: #A155FF; font-size: 16px');
+ console.log(
+ `We've intentionally disabled the word2vec function after recognizing it has the ` +
+ `potential to produce harmful outputs while using the model files included in our ` +
+ `examples. We'll consider reenabling the word2vec function along with changes to ` +
+ `address these issues in a future release of ml5.js. You can find further updates ` +
+ `about this topic on our Twitter account (https://twitter.com/ml5js/status/1445762321444315147) and GitHub ` +
+ `(https://github.com/ml5js/ml5-library/issues/1238).`,
+ );
+};
export default word2vec;
diff --git a/src/lib/ml5/Word2vec/index_test.js b/src/lib/ml5/Word2vec/index_test.js
deleted file mode 100644
index 0cb8017..0000000
--- a/src/lib/ml5/Word2vec/index_test.js
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2018 ml5
-//
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-/* eslint no-loop-func: 0 */
-const { tf, word2vec } = ml5;
-
-const W2V_MODEL_URL = 'https://raw.githubusercontent.com/ml5js/ml5-data-and-training/master/models/wordvecs/common-english/wordvecs1000.json';
-
-describe('word2vec', () => {
- let word2vecInstance;
- let numTensorsBeforeAll;
- let numTensorsBeforeEach;
- beforeAll((done) => {
- jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000;
- numTensorsBeforeAll = tf.memory().numTensors;
- word2vecInstance = word2vec(W2V_MODEL_URL, done);
- });
-
- // afterAll(() => {
- // word2vecInstance.dispose();
- // const numTensorsAfterAll = tf.memory().numTensors;
- // if (numTensorsBeforeAll !== numTensorsAfterAll) {
- // throw new Error(`Leaking Tensors (${numTensorsAfterAll} vs ${numTensorsBeforeAll})`);
- // }
- // });
-
- beforeEach(() => {
- numTensorsBeforeEach = tf.memory().numTensors;
- });
-
- afterEach(() => {
- const numTensorsAfterEach = tf.memory().numTensors;
- if (numTensorsBeforeEach !== numTensorsAfterEach) {
- throw new Error(`Leaking Tensors (${numTensorsAfterEach} vs ${numTensorsBeforeEach})`);
- }
- });
-
- it('creates a new instance', () => {
- expect(word2vecInstance).toEqual(jasmine.objectContaining({
- modelLoaded: true,
- modelSize: 1000,
- }));
- });
-
- describe('getRandomWord', () => {
- it('returns a random word', () => {
- word2vecInstance.getRandomWord()
- .then(word => expect(typeof word).toEqual('string'));
- });
- });
-
- describe('nearest', () => {
- it('returns a sorted array of nearest words', () => {
- for (let i = 0; i < 100; i += 1) {
- word2vecInstance.getRandomWord()
- .then(word => word2vecInstance.nearest(word))
- .then((nearest) => {
- let currentDistance = 0;
- for (const { word, distance: nextDistance } of nearest) {
- expect(typeof word).toEqual('string');
- expect(nextDistance).toBeGreaterThan(currentDistance);
- currentDistance = nextDistance;
- }
- })
- }
- });
-
- it('returns a list of the right length', () => {
- for (let i = 0; i < 100; i += 1) {
- word2vecInstance.getRandomWord()
- .then(word => word2vecInstance.nearest(word, i))
- .then(nearest => expect(nearest.length).toEqual(i));
- }
- });
- });
-
- describe('nearestFromSet', () => {
- it('should return null when input word is fake', () => {
- word2vecInstance.nearestFromSet('asdfsda', ['cat', 'ape', 'lamp'])
- .then((nearest) => {
- expect(nearest).toBe(null);
- });
- });
- it('should return null for an empty set', () => {
- word2vecInstance.nearestFromSet('dog', [])
- .then((nearest) => {
- expect(nearest).toBe(null);
- });
- });
- it('should return null when word set is fake', () => {
- word2vecInstance.nearestFromSet('dog', ["lsdfjk", "slkjf"])
- .then((nearest) => {
- expect(nearest).toBe(null);
- });
- });
- it('nearest to "human" in ["ape", "cat", "lamp"] is "ape", then "cat"', () => {
- word2vecInstance.nearestFromSet('human', ['cat', 'ape', 'lamp'])
- .then((nearest) => {
- expect(nearest[0].word).toEqual('ape');
- expect(nearest[1].word).toEqual('cat');
- expect(nearest[1].word).toEqual('lamp');
- });
- });
-});
-
- describe('add', () => {
- it('cat + dog = horse', () => {
- word2vecInstance.add(['cat', 'dog'], 1)
- .then(result => expect(result[0].word).toBe('horse'));
- });
- });
-
- describe('subtract', () => {
- it('cat - dog = fish', () => {
- word2vecInstance.subtract(['cat', 'dog'], 1)
- .then(result => expect(result[0].word).toBe('fish'));
- });
- });
-
- describe('average', () => {
- it('moon & sun = avenue', () => {
- word2vecInstance.average(['moon', 'sun'], 1)
- .then(result => expect(result[0].word).toBe('earth'));
- });
- });
-});
diff --git a/src/lib/ml5/package.json b/src/lib/ml5/package.json
index de94e62..c6fd1ef 100644
--- a/src/lib/ml5/package.json
+++ b/src/lib/ml5/package.json
@@ -1,6 +1,6 @@
{
"name": "ml5",
- "version": "0.6.1",
+ "version": "0.8.0",
"description": "A friendly machine learning library for the web.",
"main": "dist/ml5.min.js",
"directories": {
diff --git a/test/test.html b/test/test.html
deleted file mode 100644
index b9c892d..0000000
--- a/test/test.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- número Tests
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/unit/data/index.js b/test/unit/data/index.js
deleted file mode 100644
index 1f7bd4b..0000000
--- a/test/unit/data/index.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/* eslint-disable func-names */
-/* eslint-disable prefer-arrow-callback */
-
-describe('DataFrame', function () {
- let pInst;
-
- beforeEach(function () {
- pInst = new p5(function () { });
- });
-
- afterEach(function () {
- pInst.remove();
- });
-
- describe('DataFrame', function () {
- it('Should have a dfd.DataFrame under the hood', function () {
- const df = pInst.createDataFrame([[1, 2, 3], [4, 5, 6]]);
- expect(df).to.be.an.instanceof(num.DataFrame);
- });
- });
-
- describe('createDataFrame()', function () {
- it('Should require an argument', function () {
- expect(pInst.createDataFrame).to.throw(Error);
- });
-
- it('Should accept JSON arguments', function () {
- const json_data = [
- { A: 0.4612, B: 4.28283, C: -1.509, D: -1.1352 },
- { A: 0.5112, B: -0.22863, C: -3.39059, D: 1.1632 },
- { A: 0.6911, B: -0.82863, C: -1.5059, D: 2.1352 },
- { A: 0.4692, B: -1.28863, C: 4.5059, D: 4.1632 }
- ];
- const df = pInst.createDataFrame(json_data);
- expect(df).to.be.an.instanceof(num.DataFrame);
- });
-
- it('Should accept Tensor arguments', function () {
- const t = pInst.createTensor([[12, 34, 2.2, 2], [30, 30, 2.1, 7]]);
- const df = pInst.createDataFrame(t);
- expect(df).to.be.an.instanceof(num.DataFrame);
- });
-
- it('Should accept tf.Tensor arguments', function () {
- const t = num.tf.tensor([[12, 34, 2.2, 2], [30, 30, 2.1, 7]]);
- const df = pInst.createDataFrame(t);
- expect(df).to.be.an.instanceof(num.DataFrame);
- });
-
- it('Should reject garbage arguments', function () {
- expect(() => pInst.createDataFrame("I'm only happy when it rains")).to.throw(Error);
- });
- });
-
- describe('loadDataFrame()', function () {
- it('Should load csv files', function () {
- pInst.loadDataFrame('https://assets.computiful.org/pre-alpha/who_life_expectancy.csv', 'csv', (df) => {
- expect(df).to.be.an.instanceof(num.dfd.DataFrame);
- });
- });
- });
-});
diff --git a/test/unit/ml5/index.js b/test/unit/ml5/index.js
index 1ae99ff..b425686 100644
--- a/test/unit/ml5/index.js
+++ b/test/unit/ml5/index.js
@@ -14,7 +14,7 @@ describe('ml5', function () {
describe('window.ml5', function () {
it('Should exist', function () {
- expect(ml5.version).to.equal('0.6.1');
+ expect(ml5.version).to.equal('0.8.0');
});
});
});
diff --git a/webpack.config.js b/webpack.config.js
index a7ccd1b..217f1f3 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -3,7 +3,6 @@ const path = require('path');
module.exports = {
entry: './src/index.ts',
mode: 'production',
- devtool: 'inline-source-map',
module: {
rules: [
{