diff --git a/foxx/types/commit.js b/foxx/types/commit.js index f6b24dea..b235e6be 100755 --- a/foxx/types/commit.js +++ b/foxx/types/commit.js @@ -38,6 +38,14 @@ module.exports = new gql.GraphQLObjectType({ type: gql.GraphQLString, description: "The commit author's signature" }, + branch: { + type: gql.GraphQLString, + description: 'The commit branch' + }, + parents: { + type: gql.GraphQLString, + description: 'Parents of the commit' + }, date: { type: Timestamp, description: 'The date of the commit' diff --git a/foxx/types/file.js b/foxx/types/file.js index 8f3a7f5d..b13d6640 100755 --- a/foxx/types/file.js +++ b/foxx/types/file.js @@ -47,6 +47,7 @@ module.exports = new gql.GraphQLObjectType({ IN OUTBOUND ${file} ${commitsToFiles} ${limit} + SORT commit.date ASC RETURN commit` }) }; diff --git a/lib/endpoints/get-fileSourceCode.js b/lib/endpoints/get-fileSourceCode.js new file mode 100644 index 00000000..4e6f072f --- /dev/null +++ b/lib/endpoints/get-fileSourceCode.js @@ -0,0 +1,17 @@ +'use strict'; + +const path = require('path'); +const fs = require('fs'); + +module.exports = function(req, res) { + return fs.readFile(path.join(process.cwd(), req.body.path), 'utf8', (err, data) => { + if (err) { + console.error(err); + res.json({ sourceCode: 'Could not read Source Code!' }); + return; + } + console.log(data); + res.json({ sourceCode: data }); + }); + //return res.json({ sourceCode: fs.readFile(path.join(process.cwd(), req.body.path)) }); +}; diff --git a/lib/indexers/vcs/GitIndexer.js b/lib/indexers/vcs/GitIndexer.js index 99bb90e8..eebf27b3 100755 --- a/lib/indexers/vcs/GitIndexer.js +++ b/lib/indexers/vcs/GitIndexer.js @@ -82,21 +82,18 @@ class GitIndexer { this.reporter.setFilesLanguageCount(this.counter.langFile.total); } - Promise.resolve(this.repo.getCurrentBranch()).then(currentBranch => { - const currentBranchName = currentBranch.shorthand(); - Promise.resolve(this.repo.getAllBranches()).then(branches => { - for (const i in branches) { - if (branches[i].startsWith('refs/remotes/origin/')) { - const name = branches[i].substring(20); - if (name !== 'HEAD') { - const branch = { branchName: name, id: i, currentActive: name === currentBranchName }; - Branch.persist(branch); - } - } + const currentBranch = await this.repo.getCurrentBranch(); + const currentBranchName = currentBranch.shorthand(); + const branches = await this.repo.getAllBranches(); + for (const i in branches) { + if (branches[i].startsWith('refs/remotes/origin/')) { + const name = branches[i].substring(20); + if (name !== 'HEAD') { + const branch = { branchName: name, id: i, currentActive: name === currentBranchName }; + Branch.persist(branch); } - }); - }); - + } + } log('Processing', this.counter.commits.total, 'commits'); await this.repo.walk(processCommit.bind(this)).catch({ stop: true }, () => null); diff --git a/lib/models/Commit.js b/lib/models/Commit.js index a5b6635c..24177274 100755 --- a/lib/models/Commit.js +++ b/lib/models/Commit.js @@ -7,9 +7,10 @@ const aql = require('arangojs').aql; const Model = require('./Model.js'); const File = require('./File.js'); const IllegalArgumentError = require('../errors/IllegalArgumentError'); +const { exec } = require('child_process'); const Commit = Model.define('Commit', { - attributes: ['sha', 'message', 'signature', 'date', 'stats', 'webUrl'], + attributes: ['sha', 'message', 'signature', 'date', 'stats', 'branch', 'parents', 'webUrl'], keyAttribute: 'sha' }); @@ -21,7 +22,7 @@ const Commit = Model.define('Commit', { * @param urlProvider contains the given remote vcs webapp provider to link them * @returns Commit returns an already existing or newly created commit */ -Commit.persist = function(repo, nCommit, urlProvider) { +Commit.persist = async function(repo, nCommit, urlProvider) { if (!repo || !nCommit) { throw IllegalArgumentError('repository and git-commit has to be set!'); } @@ -36,36 +37,66 @@ Commit.persist = function(repo, nCommit, urlProvider) { } log('Processing', sha); - - const parentShas = []; - for (let i = 0; 'parentcount' in nCommit && i < nCommit.parentcount(); i++) { - parentShas.push(nCommit.parentId(i).toString()); - } - - // create new commit and link it to its parent commits - return Commit.create( - { - sha, - signature: nCommit.committer().toString(), - date: nCommit.date(), - message: nCommit.message(), - webUrl: urlProvider ? urlProvider.getCommitUrl(sha) : '', - stats: { - additions: 0, - deletions: 0 - } - }, - { isNew: true } - ).tap(function(commit) { - return Promise.all( - Promise.map(parentShas, parentSha => { - return Commit.findById(parentSha).then(parentCommit => commit.connect(parentCommit)); - }) - ); + return getBranchForCommit(sha).then(branch => { + const parentShas = []; + for (let i = 0; 'parentcount' in nCommit && i < nCommit.parentcount(); i++) { + parentShas.push(nCommit.parentId(i).toString()); + } + const parents = []; + for (let i = 0; i < nCommit.parents().length; i++) { + parents.push(nCommit.parentId(i).toString()); + } + // create new commit and link it to its parent commits + return Commit.create( + { + sha, + signature: nCommit.committer().toString(), + date: nCommit.date(), + message: nCommit.message(), + webUrl: urlProvider ? urlProvider.getCommitUrl(sha) : '', + branch: branch, + parents: parents.toString(), + stats: { + additions: 0, + deletions: 0 + } + }, + { isNew: true } + ).tap(function(commit) { + return Promise.all( + Promise.map(parentShas, parentSha => { + return Commit.findById(parentSha).then(parentCommit => commit.connect(parentCommit)); + }) + ); + }); }); }); }; +/** + * returns the branch name of a given sha repository name and owner name + * check with git shell command because this function is not jet implemented in nodegit + * + * @param sha sha of commit to check + * + * @retruns branch + */ +async function getBranchForCommit(sha) { + return (await new Promise(resolve => { + exec('git name-rev --name-only ' + sha, (error, stdout, stderr) => { + if (error) { + console.log(`error: ${error.message}`); + resolve(''); + } + if (stderr) { + console.log(`stderr: ${stderr}`); + resolve(''); + } + resolve(stdout); + }); + })).split('~')[0]; +} + /** * process and store a commit and its associated data objects * diff --git a/package-lock.json b/package-lock.json index ed0a87ae..ae3cf2d6 100755 --- a/package-lock.json +++ b/package-lock.json @@ -85,35 +85,28 @@ } }, "@babel/generator": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", - "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.4.0", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "source-map": "^0.5.0" }, "dependencies": { "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" } } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -145,16 +138,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.3.tgz", - "integrity": "sha512-UMl3TSpX11PuODYdWGrUeW6zFkdYhDn7wRLrOuNVM6f9L+S9CzmDXYyrp3MTHcwWjnzur1f/Op8A7iYZWya2Yg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.0", - "@babel/helper-split-export-declaration": "^7.4.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" } }, "@babel/helper-define-map": { @@ -184,37 +177,37 @@ } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-hoist-variables": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz", - "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "requires": { - "@babel/types": "^7.4.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-imports": { @@ -246,17 +239,17 @@ } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, "@babel/helper-regex": { "version": "7.4.3", @@ -286,14 +279,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz", - "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-simple-access": { @@ -306,18 +299,17 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", - "integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "requires": { - "@babel/types": "^7.4.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" }, "@babel/helper-wrap-function": { "version": "7.2.0", @@ -341,12 +333,12 @@ } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -389,9 +381,9 @@ } }, "@babel/parser": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.3.tgz", - "integrity": "sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ==" + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz", + "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -522,11 +514,11 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", - "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz", + "integrity": "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-json-strings": { @@ -562,11 +554,11 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", - "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { @@ -981,12 +973,13 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz", - "integrity": "sha512-U7/+zKnRZg04ggM/Bm+xmu2B/PrwyDQTT/V89FXWYWNMxBDwSx56u6jtk9SEbfLFbZaEI72L+5LPvQjeZgFCrQ==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-typescript": "^7.2.0" + "@babel/helper-create-class-features-plugin": "^7.14.6", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { @@ -1156,31 +1149,49 @@ } }, "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + } } }, "@babel/traverse": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.3.tgz", - "integrity": "sha512-HmA01qrtaCwwJWpSKpA948cBvU5BrmviAief/b3AVw936DtcdsTexlbyzNuDnthwhOQ37xshn7hvQaEQk7ISYQ==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/types": "^7.4.0", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz", + "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.8", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.8", + "@babel/types": "^7.14.8", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" + "globals": "^11.1.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -1194,11 +1205,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -1207,20 +1213,14 @@ } }, "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz", + "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", + "@babel/helper-validator-identifier": "^7.14.8", "to-fast-properties": "^2.0.0" }, "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -1898,33 +1898,11 @@ "source-map": "^0.6.1" }, "dependencies": { - "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", - "dev": true - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.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 - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true } } }, @@ -1962,22 +1940,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", - "dev": true - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -2020,12 +1982,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -2233,19 +2189,6 @@ "negotiator": "0.6.2" }, "dependencies": { - "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" - }, - "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "requires": { - "mime-db": "1.46.0" - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -2720,9 +2663,9 @@ } }, "arr-flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", - "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", @@ -2803,9 +2746,9 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asap": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", - "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "ascli": { "version": "1.0.1", @@ -2817,9 +2760,12 @@ } }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } }, "asn1.js": { "version": "4.9.1", @@ -2840,9 +2786,9 @@ } }, "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assertion-error": { "version": "1.0.2", @@ -2963,14 +2909,14 @@ } }, "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axobject-query": { "version": "0.1.0", @@ -4230,9 +4176,9 @@ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64id": { "version": "2.0.0", @@ -4245,10 +4191,9 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { "tweetnacl": "^0.14.3" } @@ -4399,24 +4344,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "requires": { - "mime-db": "~1.38.0" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, "raw-body": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", @@ -4474,14 +4401,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.x.x" - } - }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -4807,24 +4726,6 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -5434,9 +5335,9 @@ } }, "color-name": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", - "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-parse": { "version": "1.4.2", @@ -5481,9 +5382,9 @@ "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } @@ -5497,9 +5398,9 @@ } }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "common-tags": { "version": "1.8.0", @@ -5543,13 +5444,6 @@ "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", "requires": { "mime-db": ">= 1.30.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.32.0.tgz", - "integrity": "sha512-+ZWo/xZN40Tt6S+HyakUxnSOgff+JEdaneLWIm0Z6LmpCn5DMcZntLyUY5c/rTDog28LhXLKOUZKoTxTCAdBVw==" - } } }, "compression": { @@ -5588,19 +5482,6 @@ "ms": "2.0.0" } }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "requires": { - "mime-db": "~1.30.0" - } - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -5747,19 +5628,6 @@ "run-queue": "^1.0.0" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -5951,14 +5819,6 @@ "which": "^1.2.9" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.x.x" - } - }, "crypto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", @@ -7193,6 +7053,11 @@ "d3-path": "1 - 2" } }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, "d3-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", @@ -7418,13 +7283,6 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "data-urls": { @@ -7651,19 +7509,6 @@ "rimraf": "^2.2.8" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -7734,115 +7579,12 @@ "@babel/highlight": "^7.12.13" } }, - "@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "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" - } - }, "builtin-modules": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", @@ -7855,17 +7597,6 @@ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, - "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" - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -7877,12 +7608,6 @@ "wrap-ansi": "^7.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -7923,18 +7648,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "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 - }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -7957,12 +7670,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -7973,12 +7680,6 @@ "esprima": "^4.0.0" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -8087,21 +7788,6 @@ "ansi-regex": "^5.0.0" } }, - "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" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -8299,14 +7985,6 @@ "redux": "^4.0.4" }, "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "redux": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", @@ -8504,12 +8182,12 @@ } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -8572,10 +8250,9 @@ "integrity": "sha1-nrpoN9FtCYK1n4fYib91REPVKTE=" }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "encoding": { "version": "0.1.12", @@ -9066,19 +8743,6 @@ "rimraf": "^2.6.1" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", @@ -9669,29 +9333,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "requires": { - "mime-db": "~1.38.0" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -9749,9 +9390,9 @@ } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "2.0.1", @@ -9824,9 +9465,9 @@ } }, "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "faker": { "version": "3.1.0", @@ -9862,11 +9503,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, - "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==" - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -10122,14 +9758,6 @@ } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -10159,46 +9787,6 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - } - } } } }, @@ -10408,11 +9996,6 @@ "ms": "2.0.0" } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -10602,11 +10185,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, - "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==" - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -10906,14 +10484,6 @@ } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -10944,24 +10514,6 @@ "to-regex": "^3.0.2" } }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10994,38 +10546,16 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==" - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - } - } } } }, "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, @@ -11115,19 +10645,6 @@ } } } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } } } }, @@ -11647,19 +11164,6 @@ "rimraf": "2" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -11819,13 +11323,6 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "github": { @@ -11858,9 +11355,9 @@ } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11996,9 +11493,9 @@ } }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "graceful-readlink": { "version": "1.0.1", @@ -12085,19 +11582,6 @@ "ms": "^2.1.1" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -12194,6 +11678,11 @@ "duplexer": "^0.1.1" } }, + "hamsters.js": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/hamsters.js/-/hamsters.js-5.3.2.tgz", + "integrity": "sha512-XpGw+fjLH2hJHUNEujHU4lVqr2GlJGwbnxRIKVj9tNRZC8tCXJXWlzv7yt2aeztMnbT2UPaeDzBUYlIXbbaOJw==" + }, "handle-thing": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", @@ -12227,17 +11716,40 @@ } }, "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "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==" + } } }, "harmony-reflect": { @@ -12416,17 +11928,6 @@ "space-separated-tokens": "^1.0.0" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -12459,11 +11960,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, "hoist-non-react-statics": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", @@ -12676,11 +12172,11 @@ } }, "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^0.2.0", + "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } @@ -13292,26 +12788,6 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, - "is-odd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", - "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", - "dev": true, - "requires": { - "is-number": "^3.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" - } - } - } - }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -13339,11 +12815,11 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" }, "is-plain-object": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", - "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "^3.0.0" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -13689,19 +13165,6 @@ "ms": "2.0.0" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -14361,40 +13824,6 @@ } } }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "cssstyle": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", @@ -14425,40 +13854,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, "html-encoding-sniffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", @@ -14467,16 +13862,6 @@ "whatwg-encoding": "^1.0.1" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -14518,109 +13903,17 @@ "xml-name-validator": "^3.0.0" } }, - "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==" - }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "requires": { - "mime-db": "~1.38.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -14636,11 +13929,6 @@ } } }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", @@ -15640,8 +14928,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jschardet": { "version": "1.4.2", @@ -15757,21 +15044,14 @@ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" }, "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { "assert-plus": "1.0.0", - "extsprintf": "1.0.2", + "extsprintf": "1.3.0", "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } + "verror": "1.10.0" } }, "jsx-ast-utils": { @@ -16318,11 +15598,11 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "lorem-ipsum": { @@ -16615,9 +15895,9 @@ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" }, "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" }, "mime-kind": { "version": "2.0.2", @@ -16629,11 +15909,11 @@ } }, "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "requires": { - "mime-db": "~1.27.0" + "mime-db": "1.49.0" } }, "mimic-fn": { @@ -16815,19 +16095,6 @@ "requires": { "is-plain-object": "^2.0.4" } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -17266,19 +16533,6 @@ "run-queue": "^1.0.3" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -17373,18 +16627,17 @@ "dev": true }, "nanomatch": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", - "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", - "dev": true, + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "extend-shallow": "^2.0.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", - "is-odd": "^1.0.0", - "kind-of": "^5.0.2", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", @@ -17394,20 +16647,48 @@ "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 + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "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 + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -17535,102 +16816,6 @@ "which": "1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "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==" - }, - "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" - }, - "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "requires": { - "mime-db": "1.46.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -17644,94 +16829,13 @@ "minimist": "^1.2.5" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } - } - }, - "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==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, @@ -17831,19 +16935,6 @@ "tar": "^4" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -17924,110 +17015,14 @@ "meow": "^3.7.0", "mkdirp": "^0.5.1", "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "2.2.5", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "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==" - }, - "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" - }, - "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "requires": { - "mime-db": "1.46.0" - } - }, + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -18040,72 +17035,6 @@ "requires": { "minimist": "^1.2.5" } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "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==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, @@ -18125,60 +17054,6 @@ "tar-fs": "^1.16.3" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -18219,35 +17094,6 @@ "type-fest": "^0.10.0" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "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==" - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -18269,19 +17115,6 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "requires": { - "mime-db": "1.47.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -18313,74 +17146,12 @@ "which": "1" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } } }, "safe-buffer": { @@ -18402,20 +17173,6 @@ "yallist": "^3.0.3" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -18468,12 +17225,6 @@ "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 - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -18810,15 +17561,6 @@ } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -18852,25 +17594,6 @@ "to-regex": "^3.0.2" } }, - "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" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -18902,30 +17625,6 @@ "requires": { "has-flag": "^3.0.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==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "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" - } - } - } } } }, @@ -19034,9 +17733,9 @@ "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==" }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -19756,9 +18455,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascalcase": { "version": "0.1.1", @@ -19831,9 +18530,9 @@ } }, "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "picomatch": { "version": "2.2.3", @@ -23624,12 +22323,13 @@ } }, "prop-types": { - "version": "15.5.10", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", - "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.3.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "property-information": { @@ -23786,9 +22486,9 @@ "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=" }, "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-ast": { "version": "1.0.3", @@ -23830,13 +22530,6 @@ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "requires": { "performance-now": "^2.1.0" - }, - "dependencies": { - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - } } }, "ramda": { @@ -23960,11 +22653,6 @@ "whatwg-fetch": "3.0.0" }, "dependencies": { - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, "core-js": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", @@ -24279,11 +22967,6 @@ "react-dnd-html5-backend": "^8.0" }, "dependencies": { - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, "classnames": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", @@ -24317,24 +23000,6 @@ "loose-envify": "^1.0.0" } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, "react-dnd": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-8.0.3.tgz", @@ -24408,6 +23073,11 @@ } } }, + "react-native-threads": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/react-native-threads/-/react-native-threads-0.0.19.tgz", + "integrity": "sha512-VAQB06D+qxGDm3XwNUaDtEh1pKEuRLx4w3/E81z+pK1luMyJhK1W0G+eA0xygcM74dShXCgG10ZNvN+LHfyCLg==" + }, "react-proxy": { "version": "3.0.0-alpha.1", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz", @@ -24754,11 +23424,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, - "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==" - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -25161,21 +23826,6 @@ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } } } } @@ -25237,11 +23887,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, "enhanced-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", @@ -25379,19 +24024,6 @@ "rimraf": "^2.6.1" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -26226,14 +24858,6 @@ } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, "is-root": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", @@ -26363,19 +24987,6 @@ "ms": "^2.1.1" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -26480,21 +25091,6 @@ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } } } } @@ -26631,32 +25227,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "mime": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==" }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "requires": { - "mime-db": "~1.38.0" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -26672,24 +25247,6 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -26742,11 +25299,6 @@ "p-limit": "^2.0.0" } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -26969,16 +25521,6 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -26988,11 +25530,6 @@ "ipaddr.js": "1.8.0" } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, "querystringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", @@ -27548,28 +26085,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - } - } - }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -28266,11 +26781,31 @@ } }, "regex-not": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", - "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "^2.0.1" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "regexp-tree": { @@ -28425,32 +26960,37 @@ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" + "uuid": "^3.3.2" + }, + "dependencies": { + "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==" + } } }, "request-promise": { @@ -28462,16 +27002,6 @@ "request-promise-core": "1.1.1", "stealthy-require": "^1.1.0", "tough-cookie": ">=2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "^1.4.1" - } - } } }, "request-promise-core": { @@ -28497,11 +27027,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, "request-promise-core": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", @@ -28509,15 +27034,6 @@ "requires": { "lodash": "^4.17.11" } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } } } }, @@ -28674,22 +27190,6 @@ "dev": true, "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } } }, "ripemd160": { @@ -28802,11 +27302,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, - "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==" - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -29030,14 +27525,6 @@ } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -29073,51 +27560,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - } - } - }, "watch": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", @@ -29584,11 +28026,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -29668,24 +28105,6 @@ "setprototypeof": "1.0.3", "statuses": ">= 1.3.1 < 2" } - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "requires": { - "mime-db": "~1.30.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" } } }, @@ -29698,13 +28117,6 @@ "escape-html": "~1.0.3", "parseurl": "~1.3.2", "send": "0.16.2" - }, - "dependencies": { - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - } } }, "set-blocking": { @@ -30001,14 +28413,6 @@ "kind-of": "^3.2.0" } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.x.x" - } - }, "socket.io": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", @@ -30440,19 +28844,6 @@ "requires": { "is-plain-object": "^2.0.4" } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -30462,9 +28853,9 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -30473,14 +28864,8 @@ "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "ssri": { @@ -30683,11 +29068,6 @@ "is-regexp": "^1.0.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -30961,11 +29341,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, - "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==" - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -31194,14 +29569,6 @@ } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -31236,46 +29603,6 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - } - } } } }, @@ -31578,11 +29905,6 @@ "source-map-support": "~0.5.10" }, "dependencies": { - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -31879,81 +30201,46 @@ "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" }, "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "regex-not": "^1.0.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.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" - } - }, - "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, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "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-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, - "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, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "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" - } - } + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "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, + "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==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-plain-object": "^2.0.4" } }, - "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 + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -32017,11 +30304,19 @@ } }, "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "punycode": "^1.4.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, "tr46": { @@ -32105,8 +30400,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { "version": "0.3.2", @@ -32463,12 +30757,6 @@ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", "dev": true }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -32825,9 +31113,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "validate-npm-package-license": { "version": "3.0.1", @@ -32854,11 +31142,13 @@ "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=" }, "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "extsprintf": "1.0.2" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, "vfile": { @@ -33042,6 +31332,11 @@ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.2.tgz", "integrity": "sha512-II+n2ms4mPxK+RnIxRPOw3zwF2jRscdJIUE9BfkKHm4FYEg9+biIoTMnaZF5MpemE3T+VhMLrhbyD4ilkPCSbg==" }, + "web-worker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.0.0.tgz", + "integrity": "sha512-BzuMqeKVkKKwHV6tJuwePFcxYMxvC97D448mXTgh/CxXAB4sRtoV26gRPN+JDxsXRR7QZyioMV9O6NzQaASf7Q==" + }, "webidl-conversions": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", @@ -33226,12 +31521,6 @@ "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 - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -33340,20 +31629,6 @@ "rimraf": "^2.2.8" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -33746,21 +32021,6 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "~1.30.0" - } - }, "opn": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", @@ -33770,12 +32030,6 @@ "is-wsl": "^1.1.0" } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -33890,13 +32144,6 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } } }, "webpack-manifest-plugin": { diff --git a/package.json b/package.json index 4b7a785b..59109ab6 100755 --- a/package.json +++ b/package.json @@ -96,6 +96,7 @@ "crypto": "^1.0.1", "css-loader": "0.28.11", "d3": "^6.3.1", + "d3-collection": "^1.0.7", "d3-sankey": "^0.12.3", "dnd-core": "^11.1.3", "dotenv": "4.0.0", @@ -121,6 +122,7 @@ "graphql-client": "^1.1.0", "graphql-tag": "^2.4.2", "grpc": "^1.24.3", + "hamsters.js": "^5.3.2", "html-webpack-plugin": "2.29.0", "inflection": "^1.12.0", "isomorphic-fetch": "^2.2.1", @@ -158,6 +160,7 @@ "react-keyed-file-browser": "^1.8.0", "react-measure": "^2.0.2", "react-native-crypto": "^2.2.0", + "react-native-threads": "^0.0.19", "react-reach": "^0.4.1", "react-redux": "^5.0.5", "react-redux-form": "^1.13.0", @@ -173,6 +176,7 @@ "redux-logger": "^3.0.1", "redux-saga": "^0.15.4", "redux-socket.io": "^1.3.1", + "request": "^2.88.2", "request-promise": "^4.2.2", "resize-observer-polyfill": "^1.4.2", "sass-loader": "^6.0.3", @@ -184,6 +188,7 @@ "temp": "^0.8.3", "url-join": "^2.0.2", "url-loader": "0.5.9", + "web-worker": "^1.0.0", "webpack": "^3.2.0", "wordwrap": "^1.0.0", "yargs": "^6.6.0" diff --git a/pupil.js b/pupil.js index fdd81cab..74eeaf31 100755 --- a/pupil.js +++ b/pupil.js @@ -70,6 +70,7 @@ const LanguageDetectionService = (LanguageComm || { LanguageDetectionService: () // set up the endpoints app.get('/api/commits', require('./lib/endpoints/get-commits.js')); app.get('/api/config', require('./lib/endpoints/get-config.js')); +app.get('/api/fileSourceCode', require('./lib/endpoints/get-fileSourceCode.js')); // proxy to the FOXX-service app.get('/graphQl', require('./lib/endpoints/graphQl.js')); diff --git a/ui/src/visualizations/code-hotspots/chart/chart.js b/ui/src/visualizations/code-hotspots/chart/chart.js index 3c91ec1a..f8d349f7 100644 --- a/ui/src/visualizations/code-hotspots/chart/chart.js +++ b/ui/src/visualizations/code-hotspots/chart/chart.js @@ -8,16 +8,16 @@ require('codemirror/mode/javascript/javascript'); import '../css/codeMirror.css'; import vcsData from './helper/vcsData'; import chartUpdater from './charts/chartUpdater'; -import Promise from 'bluebird'; +import BluebirdPromise from 'bluebird'; import { graphQl } from '../../../utils'; import Loading from './helper/loading'; import ModeSwitcher from './helper/modeSwitcher'; -import Settings from './settings/settings'; - -const code = 'No File Selected'; -const prevPath = ''; -const prevMode = 0; -const prevSha = ''; +import Settings from '../components/settings/settings'; +import BackgroundRefreshIndicator from '../components/backgroundRefreshIndicator/backgroundRefreshIndicator'; +import VisualizationSelector from '../components/VisulaizationSelector/visualizationSelector'; +import SearchBar from '../components/searchBar/searchBar'; +import searchAlgorithm from '../components/searchBar/searchAlgorithm'; +import chartStyles from './chart.scss'; export default class CodeHotspots extends React.PureComponent { constructor(props) { @@ -31,121 +31,164 @@ export default class CodeHotspots extends React.PureComponent { props.onSetFiles(files); }); - this.getAllBranches().then(function(resp) { - for (const i in resp) { - if (resp[i].active === 'true') { - props.onSetBranch(resp[i].branch); - } - } - props.onSetBranches(resp); - }); this.elems = {}; this.state = { code: 'No File Selected', - branch: 'master', + branch: 'main', + checkedOutBranch: 'main', fileURL: '', path: '', sha: '', - mode: 0, //modes: 0...Changes/Version 1...Changes/Developer - - //Settings - dataScaleMode: true, - dataScaleHeatmap: 0, - dataScaleColumns: 0, - dataScaleRow: 0 + mode: 0, //modes: 0...Changes/Version 1...Changes/Developer 2...Changes/Issue + data: {}, + filteredData: { code: 'No File Selected', firstLineNumber: 1, searchTerm: '' }, + displayProps: { + dataScaleHeatmap: 0, + dataScaleColumns: 0, + dataScaleRows: 0, + customDataScale: false, + dateRange: { + from: '', + to: '' + }, + heatMapStyle: 0 + } }; + + this.combinedColumnData = {}; + this.combinedRowData = {}; + this.combinedHeatmapData = {}; + this.dataChanged = false; + this.codeChanged = false; + this.getAllBranches().then( + function(resp) { + let activeBranch = 'main'; + for (const i in resp) { + if (resp[i].active === 'true') { + activeBranch = resp[i].branch; + props.onSetBranch(resp[i].branch); + } + } + props.onSetBranches(resp); + this.setState({ checkedOutBranch: activeBranch }); + }.bind(this) + ); } componentWillReceiveProps(nextProps) { const { fileURL, branch, path } = nextProps; - this.setState({ path: path }); - this.setState({ branch: branch }); - this.setState({ fileURL: fileURL }); + this.setState({ path: path, branch: branch, fileURL: fileURL }); } componentDidMount() {} render() { - this.requestData(); - + if (this.prevMode !== this.state.mode || this.state.path !== this.prevPath) { + this.requestData(); + } else { + if (this.dataChanged) { + this.dataChanged = false; + this.generateCharts(); + } else { + if (!this.codeChanged) { + this.requestData(); + } else { + this.codeChanged = false; + } + } + } return (
- +
-
- -
- -
-
- -
-
- -
+
+ + { + this.dataChanged = true; + this.setState({ displayProps: newDisplayProps }); + this.forceUpdate(); + }} + /> + + + + {' '} { + this.setState({ mode: mode }); + }} + /> + + + + + + {this.state.sha !== '' && + + + + }
- {this.state.sha !== '' && -
- -
} +
-
+
+
+
+ {this.state.mode === 0 + ?
+
+
+ : ''} +
-
+
-
+
-
-
-
@@ -155,79 +198,158 @@ export default class CodeHotspots extends React.PureComponent { requestData() { if (this.state.path !== '') { Loading.insert(); - if (this.state.path !== this.prevPath || this.state.mode !== this.prevMode || this.state.sha !== this.prevSha) { - var xhr = new XMLHttpRequest(); - xhr.open( - 'GET', - this.state.fileURL - .replace('/blob', '') - .replace('github.com', 'raw.githubusercontent.com') - .replace('master', this.state.sha === '' ? this.state.branch : this.state.sha), - true - ); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - const lines = xhr.responseText.split(/\r\n|\r|\n/).length; - const path = this.state.path; - const mode = this.state.mode; - const currThis = this; - switch (mode) { - case 1: - vcsData.getChangeData(path).then(function(resp) { - chartUpdater.updateAllChartsWithChangesPerDeveloper(resp, lines, path, currThis, true); - currThis.setState({ code: xhr.responseText }); - Loading.remove(); - }); - break; - case 2: - vcsData.getIssueData(path).then(function(resp) { - chartUpdater.updateAllChartsWithChangesPerIssue(resp, lines, path, currThis, true); - currThis.setState({ code: xhr.responseText }); - Loading.remove(); - }); - break; - default: - vcsData.getChangeData(path).then(function(resp) { - chartUpdater.updateAllChartsWithChangesPerVersion(resp, lines, path, currThis, true); - currThis.setState({ code: xhr.responseText }); - Loading.remove(); - }); - break; - } - } else { - Loading.setErrorText(xhr.statusText); - console.error(xhr.statusText); + Loading.setState(0, 'Requesting Source Code'); + const xhr = new XMLHttpRequest(); + xhr.open( + 'GET', + this.state.fileURL + .replace('github.com', 'raw.githubusercontent.com') + .replace('/blob', '') + .replace(this.state.checkedOutBranch, this.state.sha === '' ? this.state.branch : this.state.sha), + true + ); + xhr.onload = function() { + if (xhr.readyState === 4) { + //if (xhr.status === 200) { + if (this.state.path === this.prevPath && this.state.sha !== this.prevSha) { + this.prevSha = this.state.sha; + this.codeChanged = true; + this.dataChanged = false; + Loading.remove(); + const data = this.state.data; + data.code = xhr.responseText; + this.setState({ + data: data, + filteredData: + this.state.mode === 2 + ? searchAlgorithm.performIssueSearch(data, this.state.filteredData.searchTerm) + : this.state.mode === 1 + ? searchAlgorithm.performDeveloperSearch(data, this.state.filteredData.searchTerm) + : this.state.mode === 0 ? searchAlgorithm.performCommitSearch(data, this.state.filteredData.searchTerm) : data + }); + } else { + const path = this.state.path; + const mode = this.state.mode; + this.prevPath = this.state.path; + this.prevMode = this.state.mode; + this.prevSha = this.state.sha; + + switch (mode) { + case 1: + Loading.setState(33, 'Requesting Developer Data'); + vcsData.getChangeData(path).then( + function(resp) { + Loading.setState(66, 'Transforming Developer Data'); + setTimeout( + function() { + const lines = (xhr.status === 200 ? xhr.responseText : '').split(/\r\n|\r|\n/).length; + const data = chartUpdater.transformChangesPerDeveloperData(resp, lines); + //this.codeChanged = true; + this.dataChanged = true; + data.code = xhr.status === 200 ? xhr.responseText : 'No commit code in current selected Branch!'; + data.firstLineNumber = 1; + data.searchTerm = ''; + + this.setState({ + code: xhr.status === 200 ? xhr.responseText : 'No commit code in current selected Branch!', + data: data, + filteredData: data + }); + }.bind(this), + 0 + ); + }.bind(this) + ); + break; + case 2: + Loading.setState(33, 'Requesting Issue Data'); + vcsData.getIssueData(path).then( + function(resp) { + Loading.setState(66, 'Transforming Issue Data'); + setTimeout( + function() { + const lines = (xhr.status === 200 ? xhr.responseText : '').split(/\r\n|\r|\n/).length; + const data = chartUpdater.transformChangesPerIssueData(resp, lines); + //this.codeChanged = true; + this.dataChanged = true; + data.code = xhr.status === 200 ? xhr.responseText : 'No commit code in current selected Branch!'; + data.firstLineNumber = 1; + data.searchTerm = ''; + this.setState({ + code: xhr.status === 200 ? xhr.responseText : 'No commit code in current selected Branch!', + data: data, + filteredData: data + }); + }.bind(this), + 0 + ); + }.bind(this) + ); + break; + default: + Loading.setState(33, 'Requesting Version Data'); + vcsData.getChangeData(path).then( + function(resp) { + Loading.setState(66, 'Transforming Version Data'); + setTimeout( + function() { + const lines = (xhr.status === 200 ? xhr.responseText : '').split(/\r\n|\r|\n/).length; + const data = chartUpdater.transformChangesPerVersionData(resp, lines); + + //this.codeChanged = true; + this.dataChanged = true; + data.code = xhr.status === 200 ? xhr.responseText : 'No commit code in current selected Branch!'; + data.firstLineNumber = 1; + data.searchTerm = ''; + + const currDisplayProps = this.state.displayProps; + currDisplayProps.dateRange.from = data.data[0].date.split('.')[0]; + currDisplayProps.dateRange.from = currDisplayProps.dateRange.from.substring( + 0, + currDisplayProps.dateRange.from.length - 3 + ); + currDisplayProps.dateRange.to = data.data[data.data.length - 1].date.split('.')[0]; + currDisplayProps.dateRange.to = currDisplayProps.dateRange.to.substring( + 0, + currDisplayProps.dateRange.to.length - 3 + ); + this.setState({ + code: xhr.status === 200 ? xhr.responseText : 'No commit code in current selected Branch!', + data: data, + filteredData: data, + displayProps: currDisplayProps + }); + }.bind(this), + 0 + ); + }.bind(this) + ); + break; } } - }.bind(this); - xhr.onerror = function(e) { - Loading.setErrorText(xhr.statusText); - console.error(xhr.statusText); - }; - xhr.send(null); - } else { - switch (this.state.mode) { - case 1: - chartUpdater.updateAllChartsWithChangesPerDeveloper(null, null, null, this, false); - break; - case 2: - chartUpdater.updateAllChartsWithChangesPerIssue(null, null, null, this, false); - break; - default: - chartUpdater.updateAllChartsWithChangesPerVersion(null, null, null, this, false); - break; } - Loading.remove(); - } - this.prevPath = this.state.path; - this.prevMode = this.state.mode; - this.prevSha = this.state.sha; + }.bind(this); + xhr.onerror = function() { + Loading.setErrorText(xhr.statusText); + console.error(xhr.statusText); + }; + xhr.send(null); } } + generateCharts() { + Loading.setState(100, 'Generating Charts'); + setTimeout( + function() { + chartUpdater.generateCharts(this, this.state.mode, this.state.filteredData, this.state.displayProps); + Loading.remove(); + }.bind(this), + 0 + ); + } + requestFileStructure() { - return Promise.resolve( + return BluebirdPromise.resolve( graphQl.query( ` query{ @@ -242,7 +364,7 @@ export default class CodeHotspots extends React.PureComponent { } getAllBranches() { - return Promise.resolve( + return BluebirdPromise.resolve( graphQl.query( ` query{ diff --git a/ui/src/visualizations/code-hotspots/chart/chart.scss b/ui/src/visualizations/code-hotspots/chart/chart.scss new file mode 100644 index 00000000..787d2e27 --- /dev/null +++ b/ui/src/visualizations/code-hotspots/chart/chart.scss @@ -0,0 +1,38 @@ +.codeView{ + height: calc(calc(100vh - 150px) - 6.4rem); + overflow-y: scroll; + overflow-x: hidden; + position: relative; + /*top:100px;*/ + width: 100%; +} + +.heatmapContainer{ + width: 100%; + margin: 0 0 0 40px; +} +.rowSummaryContainer{ + margin: 0; + position: absolute; + top: 0; + right: 0; +} + +.barChartContainer{ + /*position: absolute;*/ + margin-left: 40px; + margin-bottom: 0.2rem; + width: calc(100% - 120px); +} + +.menubar{ + background-color: #EEEEEE; + margin-bottom: 1rem; + height: 5rem; +} + +.branchView{ + margin-left: 40px; + margin-bottom: 0.2rem; + width: calc(100% - 120px); +} diff --git a/ui/src/visualizations/code-hotspots/chart/charts/chartGeneration.js b/ui/src/visualizations/code-hotspots/chart/charts/chartGeneration.js index bf790604..305af6e1 100644 --- a/ui/src/visualizations/code-hotspots/chart/charts/chartGeneration.js +++ b/ui/src/visualizations/code-hotspots/chart/charts/chartGeneration.js @@ -1,568 +1,57 @@ -import * as d3 from 'd3'; -import ColorMixer from '../helper/colorMixer'; -import ListGeneration from '../helper/listGeneration'; - -const HEATMAP_LOW_COLOR = '#ABEBC6'; -const HEATMAP_HEIGH_COLOR = '#E6B0AA'; -const HEATMAP_MAX_COLOR = '#d5796f'; -const EVEN_COLOR = '#FFFFFFFF'; -const ODD_COLOR = '#EEEEEE55'; +import heatmapChartGeneration from './subCharts/heatmapChartGeneration'; +import rowChartGeneration from './subCharts/rowChartGeneration'; +import columnChartGeneration from './subCharts/columnChartGeneration'; export default class chartGeneration { - static generateHeatmap(data, lines, columns, currThis, mode, maxValue, legendSteps) { - d3.select('.chartHeatmap > *').remove(); - - const legendData = []; - - if (!currThis.state.dataScaleMode) { - maxValue = currThis.state.dataScaleHeatmap; - } else { - currThis.state.dataScaleHeatmap = maxValue; - } - - for (let i = 1; i <= legendSteps; i++) { - legendData.push({ - interval: maxValue / legendSteps * i, - color: ColorMixer.mix(HEATMAP_LOW_COLOR, HEATMAP_HEIGH_COLOR, 1.0 / legendSteps * i) - }); - } - - const width = document.getElementById('barChartContainer').clientWidth, - height = 24 * lines, - margins = { top: 28, right: 0, bottom: 0, left: 0 }; - - //Setting chart width and adjusting for margins - const chart = d3 - .select('.chartHeatmap') - .attr('width', 'calc(100% - 105px)') - .attr('height', height + margins.top + margins.bottom) - .attr('viewBox', '0 0 ' + width + ' ' + (height + margins.top + margins.bottom)) - .attr('preserveAspectRatio', 'none') - .append('g') - .attr('transform', 'translate(' + margins.left + ',' + margins.top + ')'); - - const barWidth = width / columns, - barHeight = 24; - - const colorScale = d => { - for (let i = 0; i < legendData.length; i++) { - if (d.value === 0) { - if (d.row % 2 === 0) { - return EVEN_COLOR; - } else { - return ODD_COLOR; - } - } - if (d.value < legendData[i].interval) { - return legendData[i].color; - } - } - return HEATMAP_MAX_COLOR; - }; - - chart - .selectAll('g') - .data(data) - .enter() - .append('rect') - .attr('x', d => { - return (d.column - 0) * barWidth; - }) - .attr('y', d => { - return (d.row - 1) * barHeight; - }) - .style('fill', colorScale) - .attr('width', barWidth) - .attr('height', barHeight); + static generateHeatmap(data, lines, importantColumns, currThis, mode, maxValue, legendSteps, firstLineNumber, displayProps) { + heatmapChartGeneration.generateHeatmap( + data, + lines, + importantColumns, + currThis, + mode, + maxValue, + legendSteps, + firstLineNumber, + displayProps + ); } - static generateRowSummary(data, lines, currThis, mode, legendSteps) { - d3.select('.chartRow').remove(); - d3.select('.tooltipRow').remove(); - - const combinedData = []; - let maxValue = 0; - - switch (mode) { - case 1: - for (let i = 0; i < data.length; i++) { - if (combinedData[data[i].row] === undefined) { - combinedData[data[i].row] = { column: data[i].column, row: data[i].row, value: data[i].value, developer: [] }; - combinedData[data[i].row].developer.push({ dev: data[i].dev, value: data[i].value }); - } else { - combinedData[data[i].row].value += data[i].value; - combinedData[data[i].row].developer.push({ dev: data[i].dev, value: data[i].value }); - if (combinedData[data[i].row].value > maxValue) { - maxValue = combinedData[data[i].row].value; - } - } - } - break; - case 2: - for (let i = 0; i < data.length; i++) { - if (combinedData[data[i].row] === undefined) { - combinedData[data[i].row] = { column: data[i].column, row: data[i].row, value: data[i].value, issues: [] }; - combinedData[data[i].row].issues.push({ title: data[i].title, value: data[i].value }); - } else { - combinedData[data[i].row].value += data[i].value; - combinedData[data[i].row].issues.push({ title: data[i].title, value: data[i].value }); - if (combinedData[data[i].row].value > maxValue) { - maxValue = combinedData[data[i].row].value; - } - } - } - break; - default: - for (let i = 0; i < data.length; i++) { - if (combinedData[data[i].row] === undefined) { - combinedData[data[i].row] = { column: data[i].column, row: data[i].row, value: data[i].value }; - } else { - combinedData[data[i].row].value += data[i].value; - if (combinedData[data[i].row].value > maxValue) { - maxValue = combinedData[data[i].row].value; - } - } - } - break; - } - - const legendData = []; - - if (!currThis.state.dataScaleMode) { - maxValue = currThis.state.dataScaleRow; - } else { - currThis.state.dataScaleRow = maxValue; - } - - for (let i = 1; i <= legendSteps; i++) { - legendData.push({ - interval: maxValue / legendSteps * i, - color: ColorMixer.mix(HEATMAP_LOW_COLOR, HEATMAP_HEIGH_COLOR, 1.0 / legendSteps * i) - }); - } - - const width = 28, - height = 24 * lines, - margins = { top: 28, right: 0, bottom: 0, left: 2 }; - - //Setting chart width and adjusting for margins - const chart = d3 - .select('.chartRowSummary') - .append('svg') - .attr('width', width + margins.right + margins.left) - .attr('height', height + margins.top + margins.bottom) - .attr('class', 'chartRow') - .append('g') - .attr('transform', 'translate(' + margins.left + ',' + margins.top + ')'); - - const barWidth = 28, - barHeight = 24; - const colorScale = d => { - for (let i = 0; i < legendData.length; i++) { - if (d.value < legendData[i].interval) { - return legendData[i].color; - } - } - return HEATMAP_MAX_COLOR; - }; - - //tooltip - const div = d3 - .select('.chartRowSummary') - .append('div') - .attr('class', 'tooltipRow') - .style('position', 'absolute') - .style('opacity', 0) - .style('background-color', '#FFFFFFDD') - .style('box-shadow', '0px 0px 10px #555555') - .style('width', '40rem') - .style('border-radius', '4px') - .style('padding', '1rem'); - - //chart - - switch (mode) { - case 1: - chart - .selectAll('g') - .data(combinedData) - .enter() - .append('g') - .append('rect') - .attr('x', d => { - return (d.column - 0) * barWidth; - }) - .attr('y', d => { - return (d.row - 1) * barHeight; - }) - .style('fill', colorScale) - .attr('width', barWidth) - .attr('height', barHeight) - .attr('z-index', '10') - .on('mouseover', function(event, d) { - div.transition().duration(200).style('opacity', 1); - div - .html( - "
Row: " + - (d.row + 1) + - '
' + - '
Changes: ' + - d.value + - '
' + - '
' + - ListGeneration.generateDeveloperList(d.developer) - ) - .style('right', 30 + 'px') - .style('top', d.row * barHeight + 'px'); - }) - .on('mouseout', function() { - div.transition().duration(500).style('opacity', 0); - }); - - break; - case 2: - chart - .selectAll('g') - .data(combinedData) - .enter() - .append('g') - .append('rect') - .attr('x', d => { - return (d.column - 0) * barWidth; - }) - .attr('y', d => { - return (d.row - 1) * barHeight; - }) - .style('fill', colorScale) - .attr('width', barWidth) - .attr('height', barHeight) - .attr('z-index', '10') - .on('mouseover', function(event, d) { - div.transition().duration(200).style('opacity', 1); - div - .html( - "
Row: " + - (d.row + 1) + - '
' + - '
Changes: ' + - d.value + - '
' + - '
' + - ListGeneration.generateIssueList(d.issues) - ) - .style('right', 30 + 'px') - .style('top', d.row * barHeight + 'px'); - }) - .on('mouseout', function() { - div.transition().duration(500).style('opacity', 0); - }); - - break; - default: - chart - .selectAll('g') - .data(combinedData) - .enter() - .append('g') - .append('rect') - .attr('x', d => { - return (d.column - 0) * barWidth; - }) - .attr('y', d => { - return (d.row - 1) * barHeight; - }) - .style('fill', colorScale) - .attr('width', barWidth) - .attr('height', barHeight) - .attr('z-index', '10') - .on('mouseover', function(event, d) { - div.transition().duration(200).style('opacity', 1); - div - .html("
Row: " + (d.row + 1) + '
' + '
Changes: ' + d.value + '
') - .style('right', 30 + 'px') - .style('top', d.row * barHeight + 'px'); - }) - .on('mouseout', function() { - div.transition().duration(500).style('opacity', 0); - }); - - break; - } + static updateHeatmap(data, lines, importantColumns, currThis, mode, maxValue, legendSteps, firstLineNumber, displayProps) { + heatmapChartGeneration.updateHeatmap( + data, + lines, + importantColumns, + currThis, + mode, + maxValue, + legendSteps, + firstLineNumber, + displayProps + ); } - static generateBarChart(data, columns, currThis, mode, legendSteps) { - d3.select('.chartColumns').remove(); - d3.select('.tooltipColumns').remove(); - - const combinedData = []; - let maxValue = 0; - switch (mode) { - case 1: - for (let i = 0; i < data.length; i++) { - if (combinedData[data[i].column] === undefined) { - combinedData[data[i].column] = { - column: data[i].column, - row: data[i].row, - value: data[i].value, - message: data[i].message, - sha: data[i].sha, - dev: data[i].dev - }; - } else { - combinedData[data[i].column].value += data[i].value; - if (combinedData[data[i].column].value > maxValue) { - maxValue = combinedData[data[i].column].value; - } - } - } - - break; - case 2: - for (let i = 0; i < data.length; i++) { - if (combinedData[data[i].column] === undefined) { - combinedData[data[i].column] = { - column: data[i].column, - row: data[i].row, - value: data[i].value, - message: data[i].message, - sha: data[i].sha, - title: data[i].title, - description: data[i].description, - iid: data[i].iid - }; - } else { - combinedData[data[i].column].value += data[i].value; - if (combinedData[data[i].column].value > maxValue) { - maxValue = combinedData[data[i].column].value; - } - } - } - - break; - default: - for (let i = 0; i < data.length; i++) { - if (combinedData[data[i].column] === undefined) { - combinedData[data[i].column] = { - column: data[i].column, - row: data[i].row, - value: data[i].value, - message: data[i].message, - sha: data[i].sha, - signature: data[i].signature - }; - } else { - combinedData[data[i].column].value += data[i].value; - if (combinedData[data[i].column].value > maxValue) { - maxValue = combinedData[data[i].column].value; - } - } - } - - break; - } - - const legendData = []; - - if (!currThis.state.dataScaleMode) { - maxValue = currThis.state.dataScaleColumns; - } else { - currThis.state.dataScaleColumns = maxValue; - } - - for (let i = 1; i <= legendSteps; i++) { - legendData.push({ - interval: maxValue / legendSteps * i, - color: ColorMixer.mix(HEATMAP_LOW_COLOR, HEATMAP_HEIGH_COLOR, 1.0 / legendSteps * i) - }); - } - - const colorScale = d => { - for (let i = 0; i < legendData.length; i++) { - if (d.value < legendData[i].interval) { - return legendData[i].color; - } - } - return HEATMAP_MAX_COLOR; - }; - - const w = document.getElementsByClassName('CodeMirror')[0].clientWidth - 80; - const h = 100; - const barChart = d3 - .select('.barChart') - .append('svg') - .attr('width', '100%') - .attr('height', h) - .attr('viewBox', '0 0 ' + w + ' ' + h) - .attr('preserveAspectRatio', 'none') - .attr('class', 'chartColumns'); + static generateRowSummary(data, lines, currThis, mode, legendSteps, firstLineNumber, displayProps) { + rowChartGeneration.generateRowSummary(data, lines, currThis, mode, legendSteps, firstLineNumber, displayProps); + } - //Background - const groupBack = barChart.append('g').attr('width', w).attr('height', h).attr('class', 'background'); - groupBack - .selectAll('rect') - .data(combinedData) - .enter() - .append('rect') - .attr('fill', '#EEEEEE88') - .attr('class', 'sBar') - .attr('x', (d, i) => i * w / columns) - .attr('y', 0) - .attr('width', w / columns) - .attr('height', h); + static updateRowSummary(data, lines, currThis, mode, legendSteps, firstLineNumber, displayProps) { + rowChartGeneration.updateRowSummary(data, lines, currThis, mode, legendSteps, firstLineNumber, displayProps); + } - //Bars - const groupData = barChart.append('g').attr('width', w).attr('height', h).attr('class', 'data'); - groupData - .selectAll('rect') - .data(combinedData) - .enter() - .append('rect') - .attr('fill', colorScale) - .attr('class', 'sBar') - .attr('x', (d, i) => i * w / columns) - .attr('y', (d, i) => { - return h - h / maxValue * d.value; - }) - .attr('width', w / columns) - .attr('height', (d, i) => { - return h / maxValue * d.value; - }); + static updateColumnData(data, currThis, mode) { + return columnChartGeneration.updateColumnData(data, currThis, mode); + } - //tooltip - const div = d3 - .select('.barChart') - .append('div') - .attr('class', 'tooltipColumns') - .style('position', 'absolute') - .style('opacity', 0) - .style('background-color', '#FFFFFFDD') - .style('box-shadow', '0px 0px 10px #555555') - .style('width', '300px') - .style('border-radius', '4px') - .style('padding', '1rem') - .style('z-index', '9'); + static generateColumnChart(data, columns, currThis, mode, legendSteps, displayProps) { + columnChartGeneration.generateColumnChart(data, columns, currThis, mode, legendSteps, displayProps); + } - //Info show - const groupInfo = barChart.append('g').attr('width', w).attr('height', h).attr('class', 'info'); + static updateColumnChart(data, columns, currThis, mode, legendSteps, displayProps) { + columnChartGeneration.updateColumnChart(data, columns, currThis, mode, legendSteps, displayProps); + } - switch (mode) { - case 1: - groupInfo - .selectAll('rect') - .data(combinedData) - .enter() - .append('rect') - .attr('fill', '#00000000') - .attr('class', 'sBar') - .attr('x', (d, i) => i * w / columns) - .attr('y', 0) - .attr('width', w / columns) - .attr('height', h) - .on('mouseover', function(event, d) { - const i = d.column; - div.transition().duration(200).style('opacity', 1); - div - .html( - "
Developer: " + - (parseInt(d.column) + 1) + - '
' + - '
' + - d.dev + - '
' + - '
' + - '
Changes: ' + - d.value + - '
' - ) - .style('right', w - i * w / columns - 300 > 0 ? w - i * w / columns - 300 : 0 + 'px') - .style('top', h + 'px'); - }) - .on('mouseout', function() { - div.transition().duration(500).style('opacity', 0); - }); - break; - case 2: - groupInfo - .selectAll('rect') - .data(combinedData) - .enter() - .append('rect') - .attr('fill', '#00000000') - .attr('class', 'sBar') - .attr('x', (d, i) => i * w / columns) - .attr('y', 0) - .attr('width', w / columns) - .attr('height', h) - .on('mouseover', function(event, d) { - const i = d.column; - div.transition().duration(200).style('opacity', 1); - div - .html( - "
Issue: " + - d.iid + - '
' + - '
' + - d.title + - '
' + - '
' + - '
' + - d.description + - '
' + - '
' + - '
Changes: ' + - d.value + - '
' - ) - .style('right', w - i * w / columns - 300 > 0 ? w - i * w / columns - 300 : 0 + 'px') - .style('top', h + 'px'); - }) - .on('mouseout', function() { - div.transition().duration(500).style('opacity', 0); - }); - break; - default: - groupInfo - .selectAll('rect') - .data(combinedData) - .enter() - .append('rect') - .attr('fill', '#00000000') - .attr('class', 'sBar') - .attr('x', (d, i) => i * w / columns) - .attr('y', 0) - .attr('width', w / columns) - .attr('height', h) - .style('cursor', 'pointer') - .on('mouseover', function(event, d) { - const i = d.column; - div.transition().duration(200).style('opacity', 1); - div - .html( - "
Version: " + - d.column + - '
' + - '
' + - d.message + - '
' + - '
' + - '
' + - d.signature + - '
' + - '
' + - '
Changes: ' + - d.value + - '
' - ) - .style('right', w - i * w / columns - 300 > 0 ? w - i * w / columns - 300 : 0 + 'px') - .style('top', h + 'px'); - }) - .on('mouseout', function() { - div.transition().duration(500).style('opacity', 0); - }) - .on('click', function(event, d) { - currThis.setState({ sha: d.sha }); - }); - break; - } + static generateBranchView(data, columns, currThis) { + columnChartGeneration.generateBranchView(data, columns, currThis); } } diff --git a/ui/src/visualizations/code-hotspots/chart/charts/chartUpdater.js b/ui/src/visualizations/code-hotspots/chart/charts/chartUpdater.js index 9a1e9053..c25225ea 100644 --- a/ui/src/visualizations/code-hotspots/chart/charts/chartUpdater.js +++ b/ui/src/visualizations/code-hotspots/chart/charts/chartUpdater.js @@ -1,187 +1,163 @@ -import HunkHandler from '../helper/hunkHandler'; import chartGeneration from './chartGeneration'; - -import _ from 'lodash'; - -let storedData; -let storedLines; -let storedCommits; -let storedDevs; -let storedIssues; -let storedMaxValue; -let storedLegendSteps; +import * as d3Collection from 'd3-collection'; +import * as d3 from 'd3'; export default class chartUpdater { - static updateAllChartsWithChangesPerVersion(rawData, lines, path, currThis, updateData) { - if (updateData) { - const data = []; - let commits = 0; - - const legendSteps = 20; + static transformChangesPerVersionData(rawData, lines) { + const commits = 0; - let maxValue = 0; + const legendSteps = 20; - for (const i in rawData.data) { - const commit = rawData.data[i]; - for (let j = 0; j < lines; j++) { - data.push({ column: i, row: j, value: 0, message: commit.message, sha: commit.sha, signature: commit.signature }); - } + let maxValue = 0; - const files = commit.files.data; - const file = _.filter(files, { file: { path: path } })[0]; - if (file !== undefined) { - for (const j in file.hunks) { - const hunk = file.hunks[j]; - const tmpMaxValue = HunkHandler.handle(hunk, data, i, maxValue); - if (tmpMaxValue > maxValue) { - maxValue = tmpMaxValue; - } - } - commits++; + const data = rawData.data + .map((commit, i) => { + const columnData = new Array(lines).fill({ value: 0 }, 0, lines).map((row, j) => { + return { + row: j, + value: row.value, + column: i, + message: commit.message, + sha: commit.sha, + date: commit.date, + branch: commit.branch, + parents: commit.parents, + signature: commit.signature + }; + }); + if (commit.file !== undefined) { + commit.file.hunks.forEach(hunk => { + columnData.filter(column => { + if ( + (column.row >= hunk.newStart - 1 && column.row < hunk.newStart + hunk.newLines - 1) || + (column.row >= hunk.oldStart - 1 && column.row < hunk.oldStart + hunk.oldLines - 1) + ) { + column.value = column.value + 1; + } + if (column.value > maxValue) { + maxValue = column.value; + } + return column; + }); + }); } - } - this.storedData = data; - this.storedLines = lines; - this.storedCommits = commits; - this.storedMaxValue = maxValue; - this.storedLegendSteps = legendSteps; - } - chartGeneration.generateRowSummary(this.storedData, this.storedLines, currThis, 0, this.storedLegendSteps); - chartGeneration.generateHeatmap( - this.storedData, - this.storedLines, - this.storedCommits, - currThis, - 0, - this.storedMaxValue, - this.storedLegendSteps - ); - chartGeneration.generateBarChart(this.storedData, this.storedCommits, currThis, 0, this.storedLegendSteps); + return columnData; + }) + .flat(); + return { data: data, lines: lines, commits: commits, maxValue: maxValue, legendSteps: legendSteps }; } - static updateAllChartsWithChangesPerDeveloper(rawData, lines, path, currThis, updateData) { - if (updateData) { - const data = []; - - const legendSteps = 20; - - let maxValue = 0; - const devs = []; - - for (const commit of rawData.data) { - if (!devs.includes(commit.signature)) { - devs.push(commit.signature); - } - } - - for (const i in devs) { - for (let j = 0; j < lines; j++) { - data.push({ column: i, row: j, value: 0, message: '', sha: '', dev: devs[i] }); - } - } - console.log(devs); - - for (const i in rawData.data) { - const commit = rawData.data[i]; - const files = commit.files.data; - const file = _.filter(files, { file: { path: path } })[0]; - if (file !== undefined) { - for (const j in file.hunks) { - const hunk = file.hunks[j]; - const tmpMaxValue = HunkHandler.handle(hunk, data, devs.indexOf(commit.signature), maxValue); - if (tmpMaxValue > maxValue) { - maxValue = tmpMaxValue; + static transformChangesPerDeveloperData(rawData, lines) { + const legendSteps = 20; + let maxValue = 0; + + const versionData = this.transformChangesPerVersionData(rawData, lines).data; + const groupedDevData = d3Collection.nest().key(k => k.signature).entries(versionData); + + const devs = groupedDevData.map(entry => entry.key); + const data = groupedDevData + .map((entry, i) => { + return d3Collection + .nest() + .key(k => k.row) + .rollup(d => { + const value = d3.sum(d, v => v.value); + if (value > maxValue) { + maxValue = value; } - } - } - } - this.storedData = data; - this.storedLines = lines; - this.storedDevs = devs; - this.storedMaxValue = maxValue; - this.storedLegendSteps = legendSteps; - } - - chartGeneration.generateRowSummary(this.storedData, this.storedLines, currThis, 1, this.storedLegendSteps); - chartGeneration.generateHeatmap( - this.storedData, - this.storedLines, - this.storedDevs.length, - currThis, - 1, - this.storedMaxValue, - this.storedLegendSteps - ); - chartGeneration.generateBarChart(this.storedData, this.storedDevs.length, currThis, 1, this.storedLegendSteps); + return { column: i, row: d[0].row, value: value, dev: d[0].signature, commits: d }; + }) + .entries(entry.values) + .map(d => d.value); + }) + .flat(); + return { data: data, lines: lines, devs: devs, maxValue: maxValue, legendSteps: legendSteps }; } - static updateAllChartsWithChangesPerIssue(rawData, lines, path, currThis, updateData) { - if (updateData) { - const data = []; - - const legendSteps = 20; - - let maxValue = 0; - const issues = []; - const issuesDescriptions = []; - const issuesIID = []; - - for (const issue of rawData.data) { - if (!issues.includes(issue.title)) { - issues.push(issue.title); - issuesDescriptions.push(issue.description); - issuesIID.push(issue.iid); - } - } - - for (const i in issues) { - for (let j = 0; j < lines; j++) { - data.push({ - column: i, + static transformChangesPerIssueData(rawData, lines) { + const legendSteps = 20; + let maxValue = 0; + const issues = []; + + const data = rawData.data + .filter(issue => issue.commits.data.length > 0) + .map((issue, i) => { + issues.push(issue.title); + const columnData = new Array(lines).fill({ value: 0 }, 0, lines).map((row, j) => { + return { row: j, - value: 0, - message: '', - sha: '', - title: issues[i], - description: issuesDescriptions[i], - iid: issuesIID[i] - }); - } - } - for (const i in rawData.data) { - const issue = rawData.data[i]; - for (const j in issue.commits.data) { - const commit = issue.commits.data[j]; - const file = commit.file; - if (file !== null) { - for (const k in file.hunks) { - const hunk = file.hunks[k]; - const tmpMaxValue = HunkHandler.handle(hunk, data, issues.indexOf(issue.title), maxValue); - if (tmpMaxValue > maxValue) { - maxValue = tmpMaxValue; - } - } + value: row.value, + column: i, + title: issue.title, + description: issue.description, + iid: issue.iid, + commits: [] + }; + }); + issue.commits.data.forEach(commit => { + if (commit.file !== null) { + commit.file.hunks.forEach(hunk => { + columnData.filter(column => { + if ( + (column.row >= hunk.newStart - 1 && column.row < hunk.newStart + hunk.newLines - 1) || + (column.row >= hunk.oldStart - 1 && column.row < hunk.oldStart + hunk.oldLines - 1) + ) { + column.value = column.value + 1; + } + if (column.value > maxValue) { + maxValue = column.value; + } + column.commits.push({ + message: commit.message, + sha: commit.sha, + date: commit.date, + branch: commit.branch, + parents: commit.parents, + signature: commit.signature + }); + return column; + }); + }); } - } - } + }); + return columnData; + }) + .flat(); + return { data: data, lines: lines, issues: issues, maxValue: maxValue, legendSteps: legendSteps }; + } - this.storedData = data; - this.storedLines = lines; - this.storedIssues = issues; - this.storedMaxValue = maxValue; - this.storedLegendSteps = legendSteps; + static generateCharts(currThis, mode, data, displayProps) { + let filteredData = data.data; + if (mode === 0) { + filteredData = data.data.filter( + d => new Date(d.date) >= new Date(displayProps.dateRange.from) && new Date(d.date) <= new Date(displayProps.dateRange.to) + ); } - chartGeneration.generateRowSummary(this.storedData, this.storedLines, currThis, 2, this.storedLegendSteps); + + const combinedColumnData = chartGeneration.updateColumnData(filteredData, currThis, mode); + currThis.combinedColumnData = combinedColumnData; + const importantColumns = combinedColumnData.map(d => d.column); + chartGeneration.generateColumnChart( + currThis.combinedColumnData, + mode === 1 ? data.devs.length : mode === 2 ? data.issues.length : data.commits, + currThis, + mode, + data.legendSteps, + displayProps + ); + filteredData = filteredData.filter(d => importantColumns.includes(d.column)); + chartGeneration.generateRowSummary(filteredData, data.lines, currThis, mode, data.legendSteps, data.firstLineNumber, displayProps); chartGeneration.generateHeatmap( - this.storedData, - this.storedLines, - this.storedIssues.length, + filteredData, + data.lines, + importantColumns, currThis, - 2, - this.storedMaxValue, - this.storedLegendSteps + mode, + data.maxValue, + data.legendSteps, + data.firstLineNumber, + displayProps ); - chartGeneration.generateBarChart(this.storedData, this.storedIssues.length, currThis, 2, this.storedLegendSteps); } } diff --git a/ui/src/visualizations/code-hotspots/chart/charts/subCharts/columnChartGeneration.js b/ui/src/visualizations/code-hotspots/chart/charts/subCharts/columnChartGeneration.js new file mode 100644 index 00000000..6baabf2d --- /dev/null +++ b/ui/src/visualizations/code-hotspots/chart/charts/subCharts/columnChartGeneration.js @@ -0,0 +1,610 @@ +import * as d3 from 'd3'; +import * as d3Collection from 'd3-collection'; +import ColorMixer from '../../helper/colorMixer'; +import ListGeneration from '../../helper/listGeneration'; + +const HEATMAP_LOW_COLOR = '#ABEBC6'; +const HEATMAP_HIGH_COLOR = '#E6B0AA'; +const HEATMAP_MAX_COLOR = '#d5796f'; + +export default class columnChartGeneration { + static updateColumnData(data, currThis, mode) { + let combinedColumnData; + currThis.tooltipLocked = false; + + switch (mode) { + case 1: + combinedColumnData = d3Collection + .nest() + .key(d => d.column) + .rollup(function(v) { + return { + column: v[0].column, + value: d3.sum(v, g => g.value), + message: v[0].message, + sha: v[0].sha, + dev: v[0].dev, + commits: v[0].commits + }; + }) + .entries(data) + .map(d => d.value); + break; + case 2: + combinedColumnData = d3Collection + .nest() + .key(d => d.column) + .rollup(function(v) { + return { + column: v[0].column, + value: d3.sum(v, g => g.value), + title: v[0].title, + description: v[0].description, + iid: v[0].iid, + commits: d3Collection.nest().key(c => c.sha).entries(v[0].commits).map(c => c.values[0]) + }; + }) + .entries(data) + .map(d => d.value) + .filter(d => d.value !== 0); + break; + default: + combinedColumnData = d3Collection + .nest() + .key(d => d.column) + .rollup(function(v) { + return { + column: v[0].column, + value: d3.sum(v, g => g.value), + message: v[0].message, + date: v[0].date, + sha: v[0].sha, + branch: v[0].branch, + parents: v[0].parents, + signature: v[0].signature + }; + }) + .entries(data) + .map(d => d.value); + break; + } + return combinedColumnData; + } + + static generateColumnChart(data, columns, currThis, mode, legendSteps, displayProps) { + d3.select('#chartColumns').remove(); + d3.select('#tooltipColumns').remove(); + + const w = document.getElementsByClassName('CodeMirror')[0].clientWidth - 80; + const h = 100; + + for (let i = 0; i < currThis.combinedColumnData.length; i++) { + currThis.combinedColumnData[i].i = i; + } + + const barChart = d3 + .select('.barChart') + .append('svg') + .attr('width', '100%') + .attr('height', h) + .attr('viewBox', '0 0 ' + w + ' ' + h) + .attr('preserveAspectRatio', 'none') + .attr('class', 'chartColumns') + .attr('id', 'chartColumns'); + + //Background + const groupBack = barChart.append('g').attr('width', w).attr('height', h).attr('id', 'background'); + groupBack + .selectAll('rect') + .data(currThis.combinedColumnData) + .enter() + .append('rect') + .attr('fill', '#EEEEEE88') + .attr('class', 'sBar') + .attr('x', (d, i) => i * w / currThis.combinedColumnData.length) + .attr('y', 0) + .attr('width', w / currThis.combinedColumnData.length) + .attr('height', h); + + barChart.append('g').attr('width', w).attr('height', h).attr('id', 'columnChart'); + + //tooltip + const tooltipp = d3 + .select('.barChart') + .append('div') + .attr('class', 'tooltipColumns') + .attr('id', 'tooltipColumns') + .style('position', 'absolute') + .style('display', 'none') + .style('background-color', '#FFFFFFDD') + .style('box-shadow', '0px 0px 10px #555555') + .style('width', '300px') + .style('border-radius', '4px') + .style('padding', '1rem') + .style('z-index', '9') + .style('max-height', '70vh') + .style('overflow-y', 'scroll') + .style('backdrop-filter', 'blur(2px)') + .style('-webkit-backdrop-filter', 'blur(2px)'); + + //Info show + const groupInfo = barChart.append('g').attr('width', w).attr('height', h).attr('id', 'info'); + switch (mode) { + case 1: + groupInfo + .selectAll('rect') + .data(currThis.combinedColumnData) + .enter() + .append('rect') + .attr('fill', '#00000000') + .attr('class', 'sBar') + .attr('x', (d, i) => i * w / currThis.combinedColumnData.length) + .attr('y', 0) + .attr('width', w / currThis.combinedColumnData.length) + .attr('height', h) + .on('mouseover', function(event, d) { + if (!currThis.tooltipLocked) { + tooltipp.transition().duration(200).style('display', 'block'); + const currDev = d.dev.split('>').join(''); + tooltipp + .style('border', '3px solid transparent') + .style( + 'right', + w - d.i * w / currThis.combinedColumnData.length - 300 > 0 + ? w - d.i * w / currThis.combinedColumnData.length - 300 + : 0 + 'px' + ) + .style('top', h + 'px'); + tooltipp.selectAll('*').remove(); + const hint = tooltipp + .append('div') + .style('color', '#AAAAAA') + .style('background-color', '#eeeeee') + .style('border-radius', '4px'); + hint.append('span').html('(i)').style('margin', '0 1rem').style('font-style', 'bold'); + hint.append('span').html('click to fix tooltip').style('font-style', 'italic'); + tooltipp.append('div').style('font-weight', 'bold').html(currDev.split(' <')[0]); + tooltipp.append('div').html(currDev.split(' <')[1]); + tooltipp.append('hr'); + tooltipp.append('div').html('Commits linked to this issue: ' + d.commits.length); + tooltipp.append('hr'); + const commitList = tooltipp.append('div'); + ListGeneration.generateCommitList(commitList, d.commits, currThis); + tooltipp.append('hr'); + tooltipp.append('div').html('Changes: ' + d.value); + } + }) + .on('mouseout', function() { + if (!currThis.tooltipLocked) { + tooltipp.transition().duration(500).style('display', 'none'); + } + }) + .on('click', function() { + currThis.tooltipLocked = !currThis.tooltipLocked; + tooltipp.style('border', currThis.tooltipLocked ? '3px solid #3498db' : '3px solid transparent'); + }); + break; + case 2: + groupInfo + .selectAll('rect') + .data(currThis.combinedColumnData) + .enter() + .append('rect') + .attr('fill', '#00000000') + .attr('class', 'sBar') + .attr('x', (d, i) => i * w / currThis.combinedColumnData.length) + .attr('y', 0) + .attr('width', w / currThis.combinedColumnData.length) + .attr('height', h) + .on('mouseover', function(event, d) { + if (!currThis.tooltipLocked) { + tooltipp.transition().duration(200).style('display', 'block'); + tooltipp + .style('border', '3px solid transparent') + .style( + 'right', + w - d.i * w / currThis.combinedColumnData.length - 300 > 0 + ? w - d.i * w / currThis.combinedColumnData.length - 300 + : 0 + 'px' + ) + .style('top', h + 'px'); + tooltipp.selectAll('*').remove(); + const hint = tooltipp + .append('div') + .style('color', '#AAAAAA') + .style('background-color', '#eeeeee') + .style('border-radius', '4px'); + hint.append('span').html('(i)').style('margin', '0 1rem').style('font-style', 'bold'); + hint.append('span').html('click to fix tooltip').style('font-style', 'italic'); + tooltipp.append('div').style('font-weight', 'bold').html('Issue: ' + d.iid); + tooltipp.append('div').html(d.title); + tooltipp.append('hr'); + if (d.description !== '') { + tooltipp.append('div').html(d.description); + tooltipp.append('hr'); + } + tooltipp.append('div').html('Commits linked to this developer: ' + d.commits.length); + tooltipp.append('hr'); + const commitList = tooltipp.append('div'); + ListGeneration.generateCommitList(commitList, d.commits, currThis); + tooltipp.append('hr'); + tooltipp.append('div').html('Changes: ' + d.value); + } + }) + .on('mouseout', function() { + if (!currThis.tooltipLocked) { + tooltipp.transition().duration(500).style('display', 'none'); + } + }) + .on('click', function() { + currThis.tooltipLocked = !currThis.tooltipLocked; + tooltipp.style('border', currThis.tooltipLocked ? '3px solid #3498db' : '3px solid transparent'); + }); + break; + default: + groupInfo + .selectAll('rect') + .data(currThis.combinedColumnData) + .enter() + .append('rect') + .attr('fill', '#00000000') + .attr('class', 'sBar') + .attr('x', (d, i) => i * w / currThis.combinedColumnData.length) + .attr('y', 0) + .attr('width', w / currThis.combinedColumnData.length) + .attr('height', h) + .style('cursor', 'pointer') + .on('mousemove', function(event, d) { + tooltipp.transition().duration(200).style('display', 'block'); + tooltipp + .html( + "
Version: " + + d.column + + '
' + + "
" + + d.date.substring(0, d.date.length - 5).split('T').join(' ') + + '
' + + '
' + + "
" + + d.message + + '
' + + '
' + + '
' + + d.branch + + '
' + + '
' + + '
' + + d.signature + + '
' + + '
' + + "
" + + d.sha + + '
' + + '
' + + "
" + + 'Parent(s): ' + + d.parents + + '
' + + '
' + + '
Changes: ' + + d.value + + '
' + ) + .style( + 'right', + w - (d.i - 2) * w / currThis.combinedColumnData.length - 300 > 0 + ? w - (d.i - 2) * w / currThis.combinedColumnData.length - 300 + : 0 + 'px' + ) + .style('top', h + 'px'); + }) + .on('mouseout', function() { + tooltipp.transition().duration(500).style('display', 'none'); + }) + .on('click', function(event, d) { + currThis.setState({ sha: d.sha }); + }); + setTimeout( + function() { + this.generateBranchView(data, columns, currThis); + }.bind(this) + ); + break; + } + setTimeout( + function() { + this.updateColumnChart(data, columns, currThis, mode, legendSteps, displayProps); + }.bind(this) + ); + } + + static updateColumnChart(data, columns, currThis, mode, legendSteps, displayProps) { + const w = document.getElementsByClassName('CodeMirror')[0].clientWidth - 80; + const h = 100; + + let maxValue = d3.max(currThis.combinedColumnData, d => d.value); + if (displayProps.customDataScale) { + maxValue = displayProps.dataScaleColumns; + } else { + displayProps.dataScaleColumns = maxValue; + } + + const legendData = []; + + for (let i = 1; i <= legendSteps; i++) { + legendData.push({ + interval: maxValue / legendSteps * i, + color: ColorMixer.mix(HEATMAP_LOW_COLOR, HEATMAP_HIGH_COLOR, 1.0 / legendSteps * i) + }); + } + const colorScale = d => { + for (let i = 0; i < legendData.length; i++) { + if (d.value < legendData[i].interval) { + return legendData[i].color; + } + } + return HEATMAP_MAX_COLOR; + }; + + //Bars + const bars = d3.select('#columnChart').selectAll('rect').data(currThis.combinedColumnData); + bars + .enter() + .append('rect') + .attr('fill', colorScale) + .attr('class', 'sBar') + .attr('x', (d, i) => i * w / currThis.combinedColumnData.length) + .attr('y', d => { + return h - h / maxValue * d.value; + }) + .attr('width', w / currThis.combinedColumnData.length) + .attr('height', d => { + return h / maxValue * d.value; + }); + bars.exit().remove(); + } + + static generateBranchView(data, columns, currThis) { + d3.select('#chartBranchView').remove(); + const w = document.getElementsByClassName('CodeMirror')[0].clientWidth - 80; + const h = 50; + + for (let i = 0; i < currThis.combinedColumnData.length; i++) { + currThis.combinedColumnData[i].i = i; + } + + const versionSize = Math.min(w / currThis.combinedColumnData.length, 20) - 4; + + const branches = d3Collection.nest().key(d => d.branch).entries(currThis.combinedColumnData); + + d3 + .select('.branchView') + .append('svg') + .attr('width', '100%') + .attr('height', h) + .attr('viewBox', '0 0 ' + w + ' ' + h) + .attr('preserveAspectRatio', 'none') + .attr('class', 'chartBranchView') + .attr('id', 'chartBranchView'); + + //tooltip + const tooltipp = d3.select('#tooltipColumns'); + + //commits + const commits = d3.select('#chartBranchView').selectAll('rect').data(currThis.combinedColumnData); + const branchLines = d3.select('#chartBranchView'); + const offset = 0; + const firstCommitCount = parseInt(branches[0].values[0].column); + for (const branch of branches) { + if (branch.values.length === 1) { + const c1 = parseInt(branch.values[0].column) - firstCommitCount; + this.drawBranchConnections(0, branch, currThis, c1, branchLines, branches, h, w, firstCommitCount, null, offset); + } else { + for (let i = 0; i < branch.values.length - 1; i++) { + const c1 = parseInt(branch.values[i].column) - firstCommitCount; + const c2 = parseInt(branch.values[i + 1].column) - firstCommitCount; + this.drawBranchConnections(i, branch, currThis, c1, branchLines, branches, h, w, firstCommitCount, c2, offset); + } + } + } + commits + .enter() + .append('rect') + .attr('fill', d => ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === d.branch))) + .attr('class', 'sBar') + .attr('x', (d, i) => i * w / currThis.combinedColumnData.length + w / (currThis.combinedColumnData.length * 2) - versionSize / 2) + .attr('y', h / 2 - versionSize / 2) + .attr('width', versionSize) + .attr('height', versionSize) + .style('stroke', 'whitesmoke') + .style('stroke-width', '2px') + .attr('rx', '100%') + .attr('ry', '100%') + .on('mousemove', function(event, d) { + tooltipp.transition().duration(200).style('display', 'block'); + tooltipp + .html( + "
Version: " + + d.column + + '
' + + "
" + + d.date.substring(0, d.date.length - 5).split('T').join(' ') + + '
' + + '
' + + "
" + + d.message + + '
' + + '
' + + '
' + + d.branch + + '
' + + '
' + + '
' + + d.signature + + '
' + + '
' + + "
" + + d.sha + + '
' + + '
' + + "
" + + 'Parent(s): ' + + d.parents + + '
' + + '
' + + '
Changes: ' + + d.value + + '
' + ) + .style( + 'right', + w - (d.i - 2) * w / currThis.combinedColumnData.length - 300 > 0 + ? w - (d.i - 2) * w / currThis.combinedColumnData.length - 300 + : 0 + 'px' + ) + .style('top', h + 100 + 'px'); + }) + .on('mouseout', function() { + tooltipp.transition().duration(500).style('display', 'none'); + }) + .on('click', function(event, d) { + currThis.setState({ sha: d.sha }); + }); + commits.exit().remove(); + } + + static drawBranchConnections(i, branch, currThis, c1, branchLines, branches, h, w, firstCommitCount, c2, offset) { + if (i === 0) { + for (const parentSha of branch.values[i].parents.split(',')) { + const parent = currThis.combinedColumnData.find(d => d.sha === parentSha); + if (parent !== undefined) { + if (parseInt(parent.column) + 1 < c1) { + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', h / 2) + .attr( + 'x1', + w / (currThis.combinedColumnData.length * 2) + (parent.column - firstCommitCount) * w / currThis.combinedColumnData.length + ) + .attr('y2', 5) + .attr( + 'x2', + w / (currThis.combinedColumnData.length * 2) + + (parent.column - firstCommitCount + 1) * w / currThis.combinedColumnData.length + ); + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', 5) + .attr( + 'x1', + w / (currThis.combinedColumnData.length * 2) + + (parent.column - firstCommitCount + 1) * w / currThis.combinedColumnData.length + ) + .attr('y2', 5) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + (c1 - 1) * w / currThis.combinedColumnData.length); + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', 5) + .attr('x1', w / (currThis.combinedColumnData.length * 2) + (c1 - 1) * w / currThis.combinedColumnData.length) + .attr('y2', h / 2) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + c1 * w / currThis.combinedColumnData.length); + } else { + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', h / 2) + .attr( + 'x1', + w / (currThis.combinedColumnData.length * 2) + (parent.column - firstCommitCount) * w / currThis.combinedColumnData.length + ) + .attr('y2', h / 2) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + c1 * w / currThis.combinedColumnData.length); + } + } else { + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', 10) + .attr('x1', w / (currThis.combinedColumnData.length * 2) + (c1 - 1) * w / currThis.combinedColumnData.length) + .attr('y2', h / 2) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + c1 * w / currThis.combinedColumnData.length); + + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .style('stroke-dasharray', '1, 10') + .attr('y1', 10) + .attr('x1', w / (currThis.combinedColumnData.length * 2) + (c1 - 2) * w / currThis.combinedColumnData.length) + .attr('y2', 10) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + (c1 - 1) * w / currThis.combinedColumnData.length); + } + } + } + if (c2 !== null) { + if (c1 + 1 === c2) { + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', h / 2) + .attr('x1', w / (currThis.combinedColumnData.length * 2) + c1 * w / currThis.combinedColumnData.length) + .attr('y2', h / 2) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + c2 * w / currThis.combinedColumnData.length); + } else { + offset++; + let currOffset; + if (offset % 2 === 0) { + currOffset = -Math.floor(offset / 2); + } else { + currOffset = Math.floor(offset / 2) + offset % 2; + } + currOffset = Math.min(Math.max(currOffset * 5, -h / 2 + 5), h / 2 - 5); + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', h / 2) + .attr('x1', w / (currThis.combinedColumnData.length * 2) + c1 * w / currThis.combinedColumnData.length) + .attr('y2', h / 2 + currOffset) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + (c1 + 1) * w / currThis.combinedColumnData.length); + + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', h / 2 + currOffset) + .attr('x1', w / (currThis.combinedColumnData.length * 2) + (c1 + 1) * w / currThis.combinedColumnData.length) + .attr('y2', h / 2 + currOffset) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + (c2 - 1) * w / currThis.combinedColumnData.length); + + branchLines + .append('line') + .style('stroke', ColorMixer.rainbow(branches.length, branches.findIndex(v => v.key === branch.values[i].branch))) + .style('stroke-width', 5) + .style('stroke-linecap', 'round') + .attr('y1', h / 2 + currOffset) + .attr('x1', w / (currThis.combinedColumnData.length * 2) + (c2 - 1) * w / currThis.combinedColumnData.length) + .attr('y2', h / 2) + .attr('x2', w / (currThis.combinedColumnData.length * 2) + c2 * w / currThis.combinedColumnData.length); + } + } + } +} diff --git a/ui/src/visualizations/code-hotspots/chart/charts/subCharts/heatmapChartGeneration.js b/ui/src/visualizations/code-hotspots/chart/charts/subCharts/heatmapChartGeneration.js new file mode 100644 index 00000000..b29f79b7 --- /dev/null +++ b/ui/src/visualizations/code-hotspots/chart/charts/subCharts/heatmapChartGeneration.js @@ -0,0 +1,122 @@ +import * as d3 from 'd3'; +import * as d3Collection from 'd3-collection'; +import ColorMixer from '../../helper/colorMixer'; +import Loading from '../../helper/loading'; + +const HEATMAP_LOW_COLOR = '#ABEBC6'; +const HEATMAP_HIGH_COLOR = '#E6B0AA'; +const HEATMAP_MAX_COLOR = '#d5796f'; +const EVEN_COLOR = '#FFFFFFFF'; +const ODD_COLOR = '#EEEEEE55'; + +export default class heatmapChartGeneration { + static generateHeatmap(data, lines, importantColumns, currThis, mode, maxValue, legendSteps, firstLineNumber, displayProps) { + d3.select('.chartHeatmap > *').remove(); + currThis.combinedHeatmapData = data; + const width = document.getElementById('barChartContainer').clientWidth, + height = 24 * lines, + margins = { top: 24, right: 0, bottom: 0, left: 0 }; + //Setting chart width and adjusting for margins + const chart = d3 + .select('.chartHeatmap') + .attr('width', 'calc(100% - 105px)') + .attr('height', height + margins.top + margins.bottom) + .attr('viewBox', '0 0 ' + width + ' ' + (height + margins.top + margins.bottom)) + .attr('preserveAspectRatio', 'none') + .append('g') + .attr('transform', 'translate(' + margins.left + ',' + margins.top + ')') + .attr('id', 'heatmapChart'); + for (const rowKey of d3Collection.nest().key(d => d.row).entries(currThis.combinedHeatmapData).map(d => d.key)) { + chart.append('g').attr('id', 'row' + rowKey); + } + setTimeout( + function() { + this.updateHeatmap(data, lines, importantColumns, currThis, mode, maxValue, legendSteps, firstLineNumber, displayProps); + }.bind(this) + ); + } + + static updateHeatmap(data, lines, importantColumns, currThis, mode, maxValue, legendSteps, firstLineNumber, displayProps) { + const columns = importantColumns.length; + if (displayProps.customDataScale) { + maxValue = displayProps.dataScaleHeatmap; + } else { + displayProps.dataScaleHeatmap = maxValue; + } + + const width = document.getElementById('barChartContainer').clientWidth; + const barWidth = width / columns, + barHeight = 24; + const legendData = []; + + for (let i = 1; i <= legendSteps; i++) { + legendData.push({ + interval: maxValue / legendSteps * i, + color: ColorMixer.mix(HEATMAP_LOW_COLOR, HEATMAP_HIGH_COLOR, 1.0 / legendSteps * i) + }); + } + const colorScale = d => { + for (let i = 0; i < legendData.length; i++) { + if (d.value === 0) { + switch (displayProps.heatMapStyle) { + case 2: + case 1: + return ODD_COLOR; + default: + if (d.row % 2 === 0) { + return EVEN_COLOR; + } else { + return ODD_COLOR; + } + } + } + + if (d.value < legendData[i].interval) { + return legendData[i].color; + } + } + return HEATMAP_MAX_COLOR; + }; + Loading.showBackgroundRefresh('Heatmap generation in progress!'); + const rowDataArray = d3Collection.nest().key(d => d.row).entries(currThis.combinedHeatmapData).map(d => d.values); + for (const [i, rowData] of rowDataArray.entries()) { + setTimeout(function() { + const cells = d3.select('#row' + rowData[0].row).selectAll('rect').data(rowData); + if (displayProps.heatMapStyle === 2 || displayProps.heatMapStyle === 0) { + cells + .enter() + .append('rect') + .attr('x', d => { + return (importantColumns.indexOf(d.column) - 0) * barWidth; + }) + .attr('y', d => { + return (d.row - firstLineNumber) * barHeight; + }) + .style('fill', colorScale) + .attr('width', barWidth) + .attr('height', barHeight) + .style('opacity', displayProps.heatMapStyle === 2 ? 0.2 : 1.0); + } + if (displayProps.heatMapStyle === 2 || displayProps.heatMapStyle === 1) { + cells + .enter() + .append('rect') + .attr('x', d => { + return (importantColumns.indexOf(d.column) - 0) * barWidth; + }) + .attr('y', d => { + return (d.row - firstLineNumber) * barHeight + barHeight - 2; + }) + .style('fill', colorScale) + .attr('width', barWidth) + .attr('height', 2); + } + + cells.exit().remove(); + if (i === rowDataArray.length - 1) { + Loading.hideBackgroundRefresh(); + } + }); + } + } +} diff --git a/ui/src/visualizations/code-hotspots/chart/charts/subCharts/rowChartGeneration.js b/ui/src/visualizations/code-hotspots/chart/charts/subCharts/rowChartGeneration.js new file mode 100644 index 00000000..8ea9ece5 --- /dev/null +++ b/ui/src/visualizations/code-hotspots/chart/charts/subCharts/rowChartGeneration.js @@ -0,0 +1,252 @@ +import * as d3 from 'd3'; +import * as d3Collection from 'd3-collection'; +import ColorMixer from '../../helper/colorMixer'; +import ListGeneration from '../../helper/listGeneration'; + +const HEATMAP_LOW_COLOR = '#ABEBC6'; +const HEATMAP_HIGH_COLOR = '#E6B0AA'; +const HEATMAP_MAX_COLOR = '#d5796f'; + +export default class rowChartGeneration { + static generateRowSummary(data, lines, currThis, mode, legendSteps, firstLineNumber, displayProps) { + d3.select('#chartRow').remove(); + d3.select('#tooltipRow').remove(); + //let maxValue = 0; + switch (mode) { + case 1: + currThis.combinedRowData = d3Collection + .nest() + .key(d => d.row) + .rollup(function(v) { + const devs = v.map(g => g.dev); + const values = v.map(g => g.value); + return { + column: v[0].column, + value: d3.sum(v, g => g.value), + developer: devs + .map(function(v, i) { + return { dev: v, value: values[i] }; + }) + .filter(d => d.value !== 0) + }; + }) + .entries(data) + .map(function(d) { + const row = d.key; + const res = d.value; + res.row = row; + return res; + }); + break; + case 2: + currThis.combinedRowData = d3Collection + .nest() + .key(d => d.row) + .rollup(function(v) { + const titles = v.map(g => g.title); + const values = v.map(g => g.value); + return { + column: v[0].column, + value: d3.sum(v, g => g.value), + issues: titles + .map(function(v, i) { + return { title: v, value: values[i] }; + }) + .filter(d => d.value !== 0) + }; + }) + .entries(data) + .map(function(d) { + const row = d.key; + const res = d.value; + res.row = row; + return res; + }); + break; + default: + currThis.combinedRowData = d3Collection + .nest() + .key(d => d.row) + .rollup(function(v) { + return { + column: v[0].column, + value: d3.sum(v, g => g.value) + }; + }) + .entries(data) + .map(function(d) { + const row = d.key; + const res = d.value; + res.row = row; + return res; + }); + break; + } + + const width = 28, + height = 24 * lines, + margins = { top: 28, right: 0, bottom: 0, left: 2 }; + + //Setting chart width and adjusting for margins + d3 + .select('.chartRowSummary') + .append('svg') + .attr('width', width + margins.right + margins.left) + .attr('height', height + margins.top + margins.bottom) + .attr('id', 'chartRow') + .append('g') + .attr('transform', 'translate(' + margins.left + ',' + margins.top + ')'); + + d3 + .select('.chartRowSummary') + .append('div') + .attr('class', 'tooltipRow') + .attr('id', 'tooltipRow') + .style('position', 'absolute') + .style('display', 'none') + .style('background-color', '#FFFFFFDD') + .style('box-shadow', '0px 0px 10px #555555') + .style('width', '40rem') + .style('border-radius', '4px') + .style('padding', '1rem') + .style('backdrop-filter', 'blur(2px)') + .style('-webkit-backdrop-filter', 'blur(2px)'); + + //chart + setTimeout( + function() { + this.updateRowSummary(data, lines, currThis, mode, legendSteps, firstLineNumber, displayProps); + }.bind(this) + ); + } + + static updateRowSummary(data, lines, currThis, mode, legendSteps, firstLineNumber, displayProps) { + const chart = d3.select('#chartRow'); + const tooltipp = d3.select('#tooltipRow'); + + let maxValue = d3.max(currThis.combinedRowData, d => d.value); + + const legendData = []; + + if (displayProps.customDataScale) { + maxValue = displayProps.dataScaleRows; + } else { + displayProps.dataScaleRows = maxValue; + } + + for (let i = 1; i <= legendSteps; i++) { + legendData.push({ + interval: maxValue / legendSteps * i, + color: ColorMixer.mix(HEATMAP_LOW_COLOR, HEATMAP_HIGH_COLOR, 1.0 / legendSteps * i) + }); + } + + const barWidth = 28, + barHeight = 24; + const colorScale = d => { + for (let i = 0; i < legendData.length; i++) { + if (d.value < legendData[i].interval) { + return legendData[i].color; + } + } + return HEATMAP_MAX_COLOR; + }; + + const bars = chart.selectAll('rect').data(currThis.combinedRowData); + + //tooltip + + switch (mode) { + case 1: + bars + .enter() + .append('rect') + .attr('x', 0) + .attr('y', d => { + return (d.row - firstLineNumber + 1) * barHeight; + }) + .style('fill', colorScale) + .attr('width', barWidth) + .attr('height', barHeight) + .attr('z-index', '10') + .on('mouseover', function(event, d) { + tooltipp.transition().duration(200).style('display', 'block'); + tooltipp + .html( + "
Row: " + + (parseInt(d.row) + 1) + + '
' + + '
Changes: ' + + d.value + + '
' + + '
' + + ListGeneration.generateDeveloperList(d.developer) + ) + .style('right', 30 + 'px') + .style('top', (d.row - firstLineNumber + 1) * barHeight + 'px'); + }) + .on('mouseout', function() { + tooltipp.transition().duration(500).style('display', 'none'); + }); + + break; + case 2: + bars + .enter() + .append('rect') + .attr('x', 0) + .attr('y', d => { + return (d.row - firstLineNumber + 1) * barHeight; + }) + .style('fill', colorScale) + .attr('width', barWidth) + .attr('height', barHeight) + .attr('z-index', '10') + .on('mouseover', function(event, d) { + tooltipp.transition().duration(200).style('display', 'block'); + tooltipp + .html( + "
Row: " + + (parseInt(d.row) + 1) + + '
' + + '
Changes: ' + + d.value + + '
' + + (d.issues.length > 0 ? '
' + ListGeneration.generateIssueList(d.issues) : '') + ) + .style('right', 30 + 'px') + .style('top', (d.row - firstLineNumber + 1) * barHeight + 'px'); + }) + .on('mouseout', function() { + tooltipp.transition().duration(500).style('display', 'none'); + }); + + break; + default: + bars + .enter() + .append('rect') + .attr('x', 0) + .attr('y', d => { + return (d.row - firstLineNumber + 1) * barHeight; + }) + .style('fill', colorScale) + .attr('width', barWidth) + .attr('height', barHeight) + .attr('z-index', '10') + .on('mouseover', function(event, d) { + tooltipp.transition().duration(200).style('display', 'block'); + tooltipp + .html("
Row: " + (parseInt(d.row) + 1) + '
' + '
Changes: ' + d.value + '
') + .style('right', 30 + 'px') + .style('top', (d.row - firstLineNumber + 1) * barHeight + 'px'); + }) + .on('mouseout', function() { + tooltipp.transition().duration(500).style('display', 'none'); + }); + + break; + } + bars.exit().remove(); + } +} diff --git a/ui/src/visualizations/code-hotspots/chart/helper/colorMixer.js b/ui/src/visualizations/code-hotspots/chart/helper/colorMixer.js index f21e6fb7..dcc12c0d 100644 --- a/ui/src/visualizations/code-hotspots/chart/helper/colorMixer.js +++ b/ui/src/visualizations/code-hotspots/chart/helper/colorMixer.js @@ -12,4 +12,52 @@ export default class ColorMixer { const b = Math.round(bA + (bB - bA) * amount).toString(16).padStart(2, '0'); return '#' + r + g + b; } + + static rainbow(numOfSteps, step) { + let r, g, b; + const h = step / numOfSteps; + const i = ~~(h * 6); + const f = h * 6 - i; + const q = 1 - f; + switch (i % 6) { + case 0: + r = 1; + g = f; + b = 0; + break; + case 1: + r = q; + g = 1; + b = 0; + break; + case 2: + r = 0; + g = 1; + b = f; + break; + case 3: + r = 0; + g = q; + b = 1; + break; + case 4: + r = f; + g = 0; + b = 1; + break; + case 5: + r = 1; + g = 0; + b = q; + break; + default: + break; + } + return ( + '#' + + ('00' + (~~(r * 255)).toString(16)).slice(-2) + + ('00' + (~~(g * 255)).toString(16)).slice(-2) + + ('00' + (~~(b * 255)).toString(16)).slice(-2) + ); + } } diff --git a/ui/src/visualizations/code-hotspots/chart/helper/hunkHandler.js b/ui/src/visualizations/code-hotspots/chart/helper/hunkHandler.js deleted file mode 100644 index 3d74a6f1..00000000 --- a/ui/src/visualizations/code-hotspots/chart/helper/hunkHandler.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -import _ from 'lodash'; - -export default class HunkHandler { - static handle(hunk, data, column, maxValue) { - for (let k = 0; k < hunk.newLines; k++) { - const cellIndex = _.findIndex(data, { column: '' + column, row: hunk.newStart + k - 1 }); - if (cellIndex !== -1) { - data[cellIndex].value += 1; - if (data[cellIndex].value > maxValue) { - maxValue = data[cellIndex].value; - } - } - } - - for (let k = 0; k < hunk.oldLines; k++) { - const cellIndex = _.findIndex(data, { column: '' + column, row: hunk.oldStart + k - 1 }); - if (cellIndex !== -1) { - data[cellIndex].value += 1; - if (data[cellIndex].value > maxValue) { - maxValue = data[cellIndex].value; - } - } - } - return maxValue; - } -} diff --git a/ui/src/visualizations/code-hotspots/chart/helper/listGeneration.js b/ui/src/visualizations/code-hotspots/chart/helper/listGeneration.js index 3f0aa105..e69c317a 100644 --- a/ui/src/visualizations/code-hotspots/chart/helper/listGeneration.js +++ b/ui/src/visualizations/code-hotspots/chart/helper/listGeneration.js @@ -52,4 +52,50 @@ export default class ListGeneration { issueListHTML += '
'; return issueListHTML; } + + static generateCommitList(commitList, commitData, currThis) { + const list = commitList.append('ul'); + list.selectAll('*').remove(); + commitData.forEach((commit, i) => { + const color = i % 2 === 0 ? '#eeeeee' : '#dddddd'; + const listItem = list + .append('li') + .style('background-color', color) + .on('mouseover', () => { + listItem.select('.commitInfo').style('max-height', '20rem').style('overflow-y', 'scroll'); + }) + .on('mouseout', () => { + listItem.select('.commitInfo').style('max-height', '0').style('overflow-y', 'hidden'); + }); + listItem + .append('span') + .style('display', 'inline-block') + .style('margin-left', '5px') + .style('word-wrap', 'anywhere') + .html(commit.sha) + .on('click', () => { + currThis.setState({ sha: commit.sha }); + }); + const info = listItem + .append('div') + .attr('class', 'commitInfo') + .style('height', 'auto') + .style('max-height', '0') + .style('overflow-y', 'hidden') + .style('overflow-x', 'hidden') + .style('transition', '0.5s ease-in-out') + .style('border', '1px solid #00000055') + .style('background-color', 'white'); + info + .append('div') + .html(commit.date.substring(0, commit.date.length - 5).split('T').join(' ')) + .style('font-style', 'italic') + .style('color', '#AAAAAA'); + info.append('div').html(commit.message); + info.append('hr'); + info.append('div').html(commit.branch); + info.append('hr'); + info.append('div').html(commit.signature); + }); + } } diff --git a/ui/src/visualizations/code-hotspots/chart/helper/loading.js b/ui/src/visualizations/code-hotspots/chart/helper/loading.js index 1be7b3ce..6371defb 100644 --- a/ui/src/visualizations/code-hotspots/chart/helper/loading.js +++ b/ui/src/visualizations/code-hotspots/chart/helper/loading.js @@ -1,17 +1,45 @@ import * as d3 from 'd3'; -import styles from '../../styles.scss'; +import loadingStyles from '../../css/loading.scss'; export default class Loading { static insert() { d3.select('#loading').remove(); - d3 + + /*d3 .select('.loadingContainer') .append('div') .attr('id', 'loading') - .html('
'); + .html('
');*/ + d3 + .select('body') + .append('div') + .attr('id', 'loading') + .html( + '
' + + '
' + + '
' + + '
' + + '
Loading ...
' + + '
' + ); + } + + static setState(percent, text) { + console.log('LOADING: ' + percent + '% , ' + text); + d3.select('#loadingBarFront').style('width', percent + '%'); + d3.select('#loadingBarText').text(text); } static remove() { + console.log('LOADING FINISHED'); d3.select('#loading').remove(); } @@ -23,12 +51,22 @@ export default class Loading { .attr('id', 'loading') .html( "
Error:
" + text + '
' ); } + + static showBackgroundRefresh(text) { + d3.select('#backgroundRefreshIndicator').attr('hidden', null); + d3.select('#backgroundRefreshIndicatorText').text(text); + } + + static hideBackgroundRefresh() { + console.log('Backgroundrefresh Finished!'); + d3.select('#backgroundRefreshIndicator').attr('hidden', true); + } } diff --git a/ui/src/visualizations/code-hotspots/chart/helper/vcsData.js b/ui/src/visualizations/code-hotspots/chart/helper/vcsData.js index 870064fd..1d8b7ee3 100644 --- a/ui/src/visualizations/code-hotspots/chart/helper/vcsData.js +++ b/ui/src/visualizations/code-hotspots/chart/helper/vcsData.js @@ -1,40 +1,42 @@ import { graphQl } from '../../../../utils'; -import Promise from 'bluebird'; +import BluebirdPromise from 'bluebird'; export default class vcsData { - static async getChangeData(path) { - return Promise.resolve( + static getChangeData(path) { + return BluebirdPromise.resolve( graphQl.query( ` - query($file: String!) { - file(path: $file){ - path - commits{ - data{ - message - sha - signature - stats{ - additions - deletions - } - files{ - data{ - file{ - path - } - lineCount - hunks{ - newStart - newLines - oldStart - oldLines + query($file: String!) { + file(path: $file){ + path + maxLength + commits{ + data{ + message + sha + signature + branch + parents + date + stats{ + additions + deletions + } + file(path: $file){ + file{ + path + } + lineCount + hunks{ + newStart + newLines + oldStart + oldLines + } + } } - } } - } } - } } `, { file: path } @@ -43,41 +45,44 @@ export default class vcsData { } static async getIssueData(path) { - return Promise.resolve( + return BluebirdPromise.resolve( graphQl.query( ` - query($file: String!) { + query($file: String!) { issues{ - data{ - title - description - iid - commits{ - data{ - message - sha - signature - stats{ - additions - deletions - } - file(path: $file){ - file{ - path - } - lineCount - hunks{ - newStart - newLines - oldStart - oldLines - } - } - } + data{ + title + description + iid + commits{ + data{ + message + sha + signature + branch + date + parents + stats{ + additions + deletions } + file(path: $file){ + file{ + path + } + lineCount + hunks{ + newStart + newLines + oldStart + oldLines + } + } + } } + } } - } + } `, { file: path } ) diff --git a/ui/src/visualizations/code-hotspots/chart/settings/settings.js b/ui/src/visualizations/code-hotspots/chart/settings/settings.js deleted file mode 100644 index e5477041..00000000 --- a/ui/src/visualizations/code-hotspots/chart/settings/settings.js +++ /dev/null @@ -1,98 +0,0 @@ -import React from 'react'; -import settingsStyles from '../../css/settings.scss'; -import styles from '../../styles.scss'; -import { settings_black, settings_white } from '../../images/icons'; -require('bulma-switch'); - -export default class Settings extends React.PureComponent { - render() { - return ( -
- -
-
-
Settings
-
-
-
Data scale:
-
- { - const state = event.target.checked; - if (state) { - document.getElementById('dataScaleContainer').classList.remove(settingsStyles.showElm); - document.getElementById('dataScaleContainer').classList.add(settingsStyles.hideElm); - } else { - document.getElementById('dataScaleContainer').classList.add(settingsStyles.showElm); - document.getElementById('dataScaleContainer').classList.remove(settingsStyles.hideElm); - } - this.props.currThis.setState({ dataScaleMode: state }); - }} - /> - -
-
-
Heatmap Scale:
- { - this.props.currThis.setState({ dataScaleHeatmap: event.target.value }); - }} - /> -
Column summary Scale:
- { - this.props.currThis.setState({ dataScaleColumns: event.target.value }); - }} - /> -
Row summary Scale:
- { - this.props.currThis.setState({ dataScaleRow: event.target.value }); - }} - /> -
-
-
-
-
-
- ); - } -} diff --git a/ui/src/visualizations/code-hotspots/components/VisulaizationSelector/visualizationSelector.js b/ui/src/visualizations/code-hotspots/components/VisulaizationSelector/visualizationSelector.js new file mode 100644 index 00000000..de99126f --- /dev/null +++ b/ui/src/visualizations/code-hotspots/components/VisulaizationSelector/visualizationSelector.js @@ -0,0 +1,56 @@ +import React from 'react'; +import styles from '../../styles.scss'; +import visualizationSelectorStyles from './visualizationSelector.scss'; + +export default class VisualizationSelector extends React.PureComponent { + constructor(props) { + super(props); + } + + render() { + const { changeMode } = this.props; + return ( + + + + + + + + + + + + ); + } +} diff --git a/ui/src/visualizations/code-hotspots/components/VisulaizationSelector/visualizationSelector.scss b/ui/src/visualizations/code-hotspots/components/VisulaizationSelector/visualizationSelector.scss new file mode 100644 index 00000000..94cea91d --- /dev/null +++ b/ui/src/visualizations/code-hotspots/components/VisulaizationSelector/visualizationSelector.scss @@ -0,0 +1,17 @@ +.button{ + background-color: white; + height: 3rem; + width: 12rem; +} + +.button:hover{ + border-bottom-color: #3273dc; + /*background-color: lightgray;*/ +} + + +.selected{ + background-color: #3273dc !important; + color: whitesmoke !important; + font-weight: bold; +} diff --git a/ui/src/visualizations/code-hotspots/components/backgroundRefreshIndicator/backgroundRefreshIndicator.js b/ui/src/visualizations/code-hotspots/components/backgroundRefreshIndicator/backgroundRefreshIndicator.js new file mode 100644 index 00000000..9fc3c4e4 --- /dev/null +++ b/ui/src/visualizations/code-hotspots/components/backgroundRefreshIndicator/backgroundRefreshIndicator.js @@ -0,0 +1,20 @@ +import React from 'react'; +import loadingStyles from '../../css/loading.scss'; +require('bulma-switch'); + +export default class BackgroundRefreshIndicator extends React.PureComponent { + constructor(props) { + super(props); + } + + render() { + return ( +