diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..e832fa3
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1 @@
+# ToDo
diff --git a/dev/blockchain.js b/dev/blockchain.js
index d6fb3c8..34644a9 100644
--- a/dev/blockchain.js
+++ b/dev/blockchain.js
@@ -15,6 +15,57 @@ function Blockchain(currentNodeUrl, nodeIdentifier) {
console.info(`${this.nodeIdentifier} # Genesis-Block created: ${JSON.stringify(this.createNewBlock(undefined, null, '0'))} on ${this.currentNodeUrl}`);
}
+Blockchain.prototype.hashBlock = function (previousBlockHash, currentBlockData, nonce) {
+ const currentBlockDataAsString = JSON.stringify(currentBlockData);
+ const nonceAsString = nonce.toString();
+ const dataAsString = `${previousBlockHash}${nonceAsString}${currentBlockDataAsString}`;
+ return this.hash(dataAsString);
+}
+
+Blockchain.prototype.createNewBlock = function(nonce, previousBlockHash, hash) {
+ const newBlock = {
+ index: R.inc(this.chain.length),
+ timeStamp: Date.now(),
+ transactions: this.pendingTransactions,
+ nonce: nonce,
+ previousBlockHash: previousBlockHash,
+ hash: hash
+ };
+
+ this.pendingTransactions = [];
+ this.chain.push(newBlock);
+
+ return newBlock;
+}
+
+Blockchain.prototype.hash = function (dataAsString) {
+ return sha256(dataAsString);
+}
+
+Blockchain.prototype.proofOfWork = function (previousBlockHash, currentBlockData) {
+ let nonce = -1,
+ hash;
+
+ do {
+ nonce = R.inc(nonce);
+ hash = this.hashBlock(previousBlockHash, currentBlockData, nonce);
+ } while (R.not(hash.substring(0, 4).startsWith('0000')));
+
+ return nonce;
+}
+
+Blockchain.prototype.getLastBlock = function() {
+ return R.last(this.chain);
+}
+
+Blockchain.prototype.currentBlockData = function () {
+ return {
+ index: R.inc(this.getLastBlock().index),
+ transactions: this.pendingTransactions,
+ };
+}
+
+
Blockchain.prototype.getAddressData = function (address) {
let balance = 0;
const addressTransactions = [];
@@ -111,36 +162,6 @@ Blockchain.prototype.isChainValid = function (blockchain) {
return validChain && R.not(noValidGenesisBlock);
}
-Blockchain.prototype.currentBlockData = function () {
- return {
- index: R.inc(this.getLastBlock().index),
- transactions: this.pendingTransactions,
- };
-}
-
-Blockchain.prototype.proofOfWork = function (previousBlockHash, currentBlockData) {
- let nonce = -1,
- hash;
-
- do {
- nonce = R.inc(nonce);
- hash = this.hashBlock(previousBlockHash, currentBlockData, nonce);
- } while (R.not(hash.substring(0, 4).startsWith('0000')));
-
- return nonce;
-}
-
-Blockchain.prototype.hashBlock = function (previousBlockHash, currentBlockData, nonce) {
- const currentBlockDataAsString = JSON.stringify(currentBlockData);
- const nonceAsString = nonce.toString();
- const dataAsString = `${previousBlockHash}${nonceAsString}${currentBlockDataAsString}`;
- return this.hash(dataAsString);
-}
-
-Blockchain.prototype.hash = function (dataAsString) {
- return sha256(dataAsString);
-}
-
Blockchain.prototype.createNewTransaction = function(amount, sender, recipient) {
const newTransaction = {
transactionId: uuidv4()
@@ -159,53 +180,4 @@ Blockchain.prototype.addTransactionToPendingTransaction = function(newTransactio
return R.inc(this.getLastBlock()['index']);
}
-Blockchain.prototype.getLastBlock = function() {
- return R.last(this.chain);
-}
-
-Blockchain.prototype.createNewBlock = function(nonce, previousBlockHash, hash) {
- const newBlock = {
- index: R.inc(this.chain.length),
- timeStamp: Date.now(),
- transactions: this.pendingTransactions,
- nonce: nonce,
- previousBlockHash: previousBlockHash,
- hash: hash
- };
-
- this.pendingTransactions = [];
- this.chain.push(newBlock);
-
- return newBlock;
-}
-
-// export class Blockchain {
-// constructor() {
-// this.chain = [];
-// this.newTransactions = [];
-// }
-//
-// createNewBlock(nonce, previousBlockHash, hash) {
-// const newBlock = this.getABlock(nonce, previousBlockHash, hash);
-//
-// this.newTransactions = [];
-// this.chain.push(newBlock);
-//
-// return newBlock;
-// }
-//
-// getABlock(nonce, previousBlockHash, hash) {
-// const tempBlock = {
-// index: this.chain.length + 1,
-// timeStamp: Date.now(),
-// transactions: this.newTransactions,
-// nonce: nonce,
-// previousBlockHash: previousBlockHash,
-// hash: hash
-// };
-//
-// return tempBlock;
-// }
-// }
-
module.exports = Blockchain;
diff --git a/dev/blockchain.mjs b/dev/blockchain.mjs
new file mode 100644
index 0000000..5c785e4
--- /dev/null
+++ b/dev/blockchain.mjs
@@ -0,0 +1,184 @@
+'use strict';
+
+import * as sha256 from 'sha256';
+import {dec, inc, last, not} from 'ramda';
+import * as uuid from 'uuid';
+
+export class Blockchain {
+ constructor(currentNodeUrl, nodeIdentifier) {
+ this.nodeIdentifier = nodeIdentifier;
+ this.currentNodeUrl = currentNodeUrl;
+ this.networkNodes = [];
+
+ this.chain = [];
+ this.pendingTransactions = [];
+
+ console.info(`${this.nodeIdentifier} # Genesis-Block created: ${JSON.stringify(this.createNewBlock(undefined, null, '0'))} on ${this.currentNodeUrl}`);
+ }
+
+ getAddressData(address) {
+ let balance = 0;
+ const addressTransactions = [];
+
+ this.chain.forEach(block => {
+ block.transactions.forEach(transaction => {
+ const isSenderHit = transaction.sender === address;
+ const isRecipientHit = transaction.recipient === address;
+
+ if (isSenderHit || isRecipientHit) {
+ addressTransactions.push(transaction);
+ }
+ });
+ });
+
+ addressTransactions.forEach(transaction => {
+ if (transaction.recipient === address) {
+ balance += transaction.amount;
+ } else if (transaction.sender === address) {
+ balance -= transaction.amount;
+ }
+ });
+
+ return {
+ addressTransactions,
+ balance
+ };
+ }
+
+ getTransactionById(transactionId) {
+ let correctTransaction = null;
+ let correctBlock = null;
+
+ this.chain.some(block => {
+ return block.transactions.some(transaction => {
+ const isHit = transaction.transactionId === transactionId;
+
+ if (isHit) {
+ correctTransaction = transaction;
+ correctBlock = block;
+ }
+
+ return isHit;
+ });
+ });
+
+ return {
+ transaction: correctTransaction,
+ block: correctBlock
+ };
+ }
+
+ getBlockByHash(blockHash) {
+ let correctBlock = null;
+
+ this.chain.some(block => {
+ const isHit = block.hash === blockHash;
+
+ correctBlock = isHit ? block : correctBlock;
+
+ return isHit;
+ });
+
+ return correctBlock;
+ }
+
+ isChainValid(blockchain) {
+ let validChain = true;
+ const genesisBlock = blockchain[0];
+ const correctNonce = genesisBlock.nonce === undefined;
+ const correctPreviousBlockHash = genesisBlock.previousBlockHash === null;
+ const correctHash = genesisBlock.hash === '0';
+ const correctTransactions = genesisBlock.transactions.length === 0;
+ const noValidGenesisBlock = !correctNonce || !correctPreviousBlockHash || !correctHash || !correctTransactions;
+
+ for (let i = 1; i < blockchain.length; i++) {
+ const currentBlock = blockchain[i];
+ const previousBlock = blockchain[dec(i)];
+ const tempBlockData = {
+ index: currentBlock.index,
+ transactions: currentBlock.transactions
+ };
+ const blockHash = this.hashBlock(previousBlock.hash, tempBlockData, currentBlock.nonce);
+
+ // console.log('previousBlock.hash ->', previousBlock.hash);
+ // console.log('currentBlock.hash ->', currentBlock.hash);
+
+ if ((!blockHash.substring(0, 4).startsWith('0000')) && currentBlock.previousBlockHash !== previousBlock.hash) {
+ validChain = false;
+ break;
+ }
+ }
+
+ return validChain && not(noValidGenesisBlock);
+ }
+
+ currentBlockData() {
+ return {
+ index: inc(this.getLastBlock().index),
+ transactions: this.pendingTransactions,
+ };
+ }
+
+ proofOfWork(previousBlockHash, currentBlockData) {
+ let nonce = -1,
+ hash;
+
+ do {
+ nonce = inc(nonce);
+ hash = this.hashBlock(previousBlockHash, currentBlockData, nonce);
+ } while (not(hash.substring(0, 4).startsWith('0000')));
+
+ return nonce;
+ }
+
+ hashBlock(previousBlockHash, currentBlockData, nonce) {
+ const currentBlockDataAsString = JSON.stringify(currentBlockData);
+ const nonceAsString = nonce.toString();
+ const dataAsString = `${previousBlockHash}${nonceAsString}${currentBlockDataAsString}`;
+
+ return this.hash(dataAsString);
+ }
+
+ hash(dataAsString) {
+ return sha256(dataAsString);
+ }
+
+
+ createNewTransaction(amount, sender, recipient) {
+ const newTransaction = {
+ transactionId: uuid.v4()
+ };
+
+ newTransaction.amount = amount;
+ newTransaction.sender = sender;
+ newTransaction.recipient = recipient;
+
+ return newTransaction;
+ }
+
+ addTransactionToPendingTransaction(newTransaction) {
+ this.pendingTransactions.push(newTransaction);
+
+ return inc(this.getLastBlock()['index']);
+ }
+
+ getLastBlock() {
+ return last(this.chain);
+ }
+
+ createNewBlock(nonce, previousBlockHash, hash) {
+ const newBlock = {
+ index: inc(this.chain.length),
+ timeStamp: Date.now(),
+ transactions: this.pendingTransactions,
+ nonce: nonce,
+ previousBlockHash: previousBlockHash,
+ hash: hash
+ };
+
+ this.pendingTransactions = [];
+ this.chain.push(newBlock);
+
+ return newBlock;
+ }
+}
diff --git a/dev/public/index.html b/dev/public/index.html
new file mode 100644
index 0000000..62cd16e
--- /dev/null
+++ b/dev/public/index.html
@@ -0,0 +1,223 @@
+
+
+
+ Block Explorer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Block
+
+
+
+ Block Hash |
+ {{ block.hash }} |
+
+
+ Index |
+ {{ block.index }} |
+
+
+ Time Stamp |
+ {{ block.timeStamp }} |
+
+
+ Nonce |
+ {{ block.nonce ? block.nonce : 'undefined' }} |
+
+
+ Previous Hash |
+ {{ block.previousBlockHash ? block.previousBlockHash : 'null' }} |
+
+
+ Number Transactions |
+ {{ block.transactions.length }} |
+
+
+
+
+
+
Transaction
+
+
+
+ Sender |
+ {{ transaction.sender }} |
+
+
+ Recipient |
+ {{ transaction.recipient }} |
+
+
+ Amount |
+ {{ transaction.amount }} |
+
+
+
+
+
+
Address
+
(Balance: {{ addressData.balance }})
+
+
+
+ Sender |
+ Recipient |
+ Amount |
+
+
+
+
+ {{ transaction.sender }} |
+ {{ transaction.recipient }} |
+ {{ transaction.amount }} |
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/server.js b/dev/server.js
index 2a08e8b..ec7263e 100644
--- a/dev/server.js
+++ b/dev/server.js
@@ -2,10 +2,12 @@
const cluster = require('cluster');
const os = require('os');
+const path = require('path');
const R = require('ramda');
const Hapi = require('@hapi/hapi');
-const { v4: uuidv4 } = require('uuid');
-const fetch = require('node-fetch');
+const Inert = require('@hapi/inert');
+const { v4: Uuidv4 } = require('uuid');
+const Fetch = require('node-fetch');
const BlockChain = require('./blockchain');
@@ -30,10 +32,19 @@ if (cluster.isMaster) {
(async () => {
const server = Hapi.server({
port: port,
- host: 'localhost'
+ host: 'localhost',
+ routes: {
+ files: {
+ relativeTo: path.join(__dirname, 'public')
+ }
+ }
});
- const nodeAddress = uuidv4();
+ console.log(path.join(__dirname, 'public'));
+
+ await server.register(Inert);
+
+ const nodeAddress = Uuidv4();
const bitcoin = new BlockChain(server.info.uri, nodeAddress);
server.route([
@@ -47,7 +58,7 @@ if (cluster.isMaster) {
method: 'GET',
path: '/blockchain/hash',
handler: async (request, h) => {
- return await fetch(`${bitcoin.currentNodeUrl}/blockchain`)
+ return await Fetch(`${bitcoin.currentNodeUrl}/blockchain`)
.then(res => res.text())
.then(body => h.response(bitcoin.hash(body)).code(200));
}
@@ -74,7 +85,7 @@ if (cluster.isMaster) {
bitcoin.addTransactionToPendingTransaction(newTransaction);
bitcoin.networkNodes.forEach(networkNodeUrl => {
- fetchPromises.push(fetch(`${networkNodeUrl}/transaction`, {
+ fetchPromises.push(Fetch(`${networkNodeUrl}/transaction`, {
method: 'POST',
body: JSON.stringify(newTransaction),
headers: {'Content-Type': 'application/json'}
@@ -100,7 +111,7 @@ if (cluster.isMaster) {
const fetchPromises = [];
bitcoin.networkNodes.forEach((networkNodeUrl) => {
- fetchPromises.push(fetch(`${networkNodeUrl}/receive-new-block`, {
+ fetchPromises.push(Fetch(`${networkNodeUrl}/receive-new-block`, {
method: 'POST',
body: JSON.stringify(newBlock),
headers: {'Content-Type': 'application/json'}
@@ -114,7 +125,7 @@ if (cluster.isMaster) {
recipient: nodeAddress
};
- return fetch(`${bitcoin.currentNodeUrl}/transaction/broadcast`, {
+ return Fetch(`${bitcoin.currentNodeUrl}/transaction/broadcast`, {
method: 'POST',
body: JSON.stringify(newTransaction),
headers: {'Content-Type': 'application/json'}
@@ -162,7 +173,7 @@ if (cluster.isMaster) {
bitcoin.networkNodes.push(newNodeUrl);
bitcoin.networkNodes.forEach((networkNodeUrl) => {
- fetchPromises.push(fetch(`${networkNodeUrl}/register-node`, {
+ fetchPromises.push(Fetch(`${networkNodeUrl}/register-node`, {
method: 'POST',
body: JSON.stringify({newNodeUrl: newNodeUrl}),
headers: {'Content-Type': 'application/json'}
@@ -172,7 +183,7 @@ if (cluster.isMaster) {
return await Promise.all(fetchPromises).then(async (res) => {
const allNetworkNodes = [bitcoin.currentNodeUrl, ...bitcoin.networkNodes];
- return await fetch(`${newNodeUrl}/register-nodes-bulk`, {
+ return await Fetch(`${newNodeUrl}/register-nodes-bulk`, {
method: 'POST',
body: JSON.stringify({allNetworkNodes: allNetworkNodes}),
headers: {'Content-Type': 'application/json'}
@@ -227,10 +238,7 @@ if (cluster.isMaster) {
bitcoin.networkNodes.forEach((networkNodeUrl) => {
console.log(bitcoin.currentNodeUrl);
console.log(networkNodeUrl);
- fetchPromises.push(
- fetch(`${networkNodeUrl}/blockchain`)
- .then(blockChain => blockChain.json())
- );
+ fetchPromises.push(Fetch(`${networkNodeUrl}/blockchain`).then(blockChain => blockChain.json()));
});
return Promise.all(fetchPromises)
@@ -319,11 +327,20 @@ if (cluster.isMaster) {
return h.response(addressData).code(statusCode);
}
+ }, {
+ method: 'GET',
+ path: '/{param*}',
+ handler: {
+ directory: {
+ path: '.',
+ redirectToSlash: true
+ }
+ }
}, {
method: '*',
- path: '/',
+ path: '/{any*}',
handler: (request, h) => {
- return h.redirect('/blockchain').code(309);
+ return h.response('\'404 Error! Page Not Found!\'').code(404);
}
}
]);
diff --git a/dev/test.mjs b/dev/test.mjs
new file mode 100644
index 0000000..f2a2b38
--- /dev/null
+++ b/dev/test.mjs
@@ -0,0 +1,7 @@
+import {Blockchain} from './blockchain.mjs';
+import * as uuid from 'uuid';
+
+const bitcoin = new Blockchain('http://0.0.0.0:3000', uuid.v4());
+console.log(bitcoin.nodeIdentifier);
+let block = bitcoin.createNewBlock(904561652, 'efef-deed-rfhw-ehde-34', '34e-dede8-305mc-jfeerfn');
+console.log(block);
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..e832fa3
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1 @@
+# ToDo
diff --git a/lib/jasmine_examples/Player.js b/lib/jasmine_examples/Player.js
new file mode 100644
index 0000000..fe95f89
--- /dev/null
+++ b/lib/jasmine_examples/Player.js
@@ -0,0 +1,24 @@
+function Player() {
+}
+Player.prototype.play = function(song) {
+ this.currentlyPlayingSong = song;
+ this.isPlaying = true;
+};
+
+Player.prototype.pause = function() {
+ this.isPlaying = false;
+};
+
+Player.prototype.resume = function() {
+ if (this.isPlaying) {
+ throw new Error("song is already playing");
+ }
+
+ this.isPlaying = true;
+};
+
+Player.prototype.makeFavorite = function() {
+ this.currentlyPlayingSong.persistFavoriteStatus(true);
+};
+
+module.exports = Player;
diff --git a/lib/jasmine_examples/Song.js b/lib/jasmine_examples/Song.js
new file mode 100644
index 0000000..3415bb8
--- /dev/null
+++ b/lib/jasmine_examples/Song.js
@@ -0,0 +1,9 @@
+function Song() {
+}
+
+Song.prototype.persistFavoriteStatus = function(value) {
+ // something complicated
+ throw new Error("not yet implemented");
+};
+
+module.exports = Song;
diff --git a/package-lock.json b/package-lock.json
index eaba45c..34a3d07 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -141,6 +141,19 @@
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/@hapi/hoek/-/hoek-9.1.0.tgz",
"integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw=="
},
+ "@hapi/inert": {
+ "version": "6.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/@hapi/inert/-/inert-6.0.2.tgz",
+ "integrity": "sha512-cq0a8jstkLW1+oJaw4jp52PZBEkVbX9d0YDy5aOs3rOKYSjpzs2nQBahnCHEMchOrOSUffLpE+IDoivYHcx8uA==",
+ "requires": {
+ "@hapi/ammo": "5.x.x",
+ "@hapi/boom": "9.x.x",
+ "@hapi/bounce": "2.x.x",
+ "@hapi/hoek": "9.x.x",
+ "@hapi/validate": "1.x.x",
+ "lru-cache": "5.x.x"
+ }
+ },
"@hapi/iron": {
"version": "6.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/@hapi/iron/-/iron-6.0.0.tgz",
@@ -279,6 +292,22 @@
"@hapi/hoek": "9.x.x"
}
},
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+ "dev": true
+ },
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -354,12 +383,103 @@
"picomatch": "^2.0.4"
}
},
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
"binary-extensions": {
"version": "2.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/binary-extensions/-/binary-extensions-2.1.0.tgz",
@@ -401,6 +521,23 @@
"fill-range": "^7.0.1"
}
},
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
"cacheable-request": {
"version": "6.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/cacheable-request/-/cacheable-request-6.1.0.tgz",
@@ -433,6 +570,12 @@
}
}
},
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
"camelcase": {
"version": "5.3.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/camelcase/-/camelcase-5.3.1.tgz",
@@ -488,12 +631,56 @@
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"dev": true
},
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
"cli-boxes": {
"version": "2.2.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/cli-boxes/-/cli-boxes-2.2.1.tgz",
"integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
"dev": true
},
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "2.4.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/cli-spinners/-/cli-spinners-2.4.0.tgz",
+ "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==",
+ "dev": true
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
"clone-response": {
"version": "1.0.2",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/clone-response/-/clone-response-1.0.2.tgz",
@@ -503,6 +690,16 @@
"mimic-response": "^1.0.0"
}
},
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
"color-convert": {
"version": "2.0.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/color-convert/-/color-convert-2.0.1.tgz",
@@ -518,6 +715,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/concat-map/-/concat-map-0.0.1.tgz",
@@ -548,6 +751,12 @@
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/convert-string/-/convert-string-0.1.0.tgz",
"integrity": "sha1-ec5BqbsNA7z3LNxqjzxW+7xkQQo="
},
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
"crypto-random-string": {
"version": "2.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
@@ -563,6 +772,12 @@
"ms": "^2.1.1"
}
},
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
"decompress-response": {
"version": "3.3.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/decompress-response/-/decompress-response-3.3.0.tgz",
@@ -578,12 +793,62 @@
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true
},
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
"defer-to-connect": {
"version": "1.1.3",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
"integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
"dev": true
},
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
"dot-prop": {
"version": "5.3.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/dot-prop/-/dot-prop-5.3.0.tgz",
@@ -614,12 +879,205 @@
"once": "^1.4.0"
}
},
+ "error-stack-parser": {
+ "version": "2.0.6",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/error-stack-parser/-/error-stack-parser-2.0.6.tgz",
+ "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==",
+ "dev": true,
+ "requires": {
+ "stackframe": "^1.1.1"
+ }
+ },
"escape-goat": {
"version": "2.1.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/escape-goat/-/escape-goat-2.1.1.tgz",
"integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
"dev": true
},
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esm": {
+ "version": "3.2.25",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "fast-glob": {
+ "version": "2.2.7",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/fast-glob/-/fast-glob-2.2.7.tgz",
+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ }
+ }
+ },
"fill-range": {
"version": "7.0.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/fill-range/-/fill-range-7.0.1.tgz",
@@ -629,6 +1087,21 @@
"to-regex-range": "^5.0.1"
}
},
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
"fsevents": {
"version": "2.1.3",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/fsevents/-/fsevents-2.1.3.tgz",
@@ -645,6 +1118,12 @@
"pump": "^3.0.0"
}
},
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
"glob-parent": {
"version": "5.1.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/glob-parent/-/glob-parent-5.1.1.tgz",
@@ -654,6 +1133,12 @@
"is-glob": "^4.0.1"
}
},
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
"global-dirs": {
"version": "2.0.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/global-dirs/-/global-dirs-2.0.1.tgz",
@@ -694,6 +1179,58 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"has-yarn": {
"version": "2.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/has-yarn/-/has-yarn-2.1.0.tgz",
@@ -730,6 +1267,26 @@
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
},
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -739,6 +1296,12 @@
"binary-extensions": "^2.0.0"
}
},
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
"is-ci": {
"version": "2.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-ci/-/is-ci-2.0.0.tgz",
@@ -748,16 +1311,61 @@
"ci-info": "^2.0.0"
}
},
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
"is-glob": {
@@ -803,18 +1411,130 @@
"integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
"dev": true
},
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
"is-yarn-global": {
"version": "0.3.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
"dev": true
},
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "jasmine": {
+ "version": "3.6.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/jasmine/-/jasmine-3.6.1.tgz",
+ "integrity": "sha512-Jqp8P6ZWkTVFGmJwBK46p+kJNrZCdqkQ4GL+PGuBXZwK1fM4ST9BizkYgIwCFqYYqnTizAy6+XG2Ej5dFrej9Q==",
+ "dev": true,
+ "requires": {
+ "fast-glob": "^2.2.6",
+ "jasmine-core": "~3.6.0"
+ }
+ },
+ "jasmine-console-reporter": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/jasmine-console-reporter/-/jasmine-console-reporter-3.1.0.tgz",
+ "integrity": "sha512-fNP6XlgkIyNvfr6JVMJudZL9qWNY2K7l934Ojj4k8J09/QXf4xYf2Mc7MUgcsDhqIb2zTkLd2LsBJWFvJz41/w==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "chalk": "^2.4.1",
+ "ci-info": "^1.4.0",
+ "node-emoji": "^1.8.1",
+ "ora": "^3.0.0",
+ "perfy": "^1.1.5"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ }
+ }
+ },
+ "jasmine-core": {
+ "version": "3.6.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/jasmine-core/-/jasmine-core-3.6.0.tgz",
+ "integrity": "sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw==",
+ "dev": true
+ },
+ "jasmine-ts-console-reporter": {
+ "version": "3.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/jasmine-ts-console-reporter/-/jasmine-ts-console-reporter-3.1.1.tgz",
+ "integrity": "sha512-sKR3Dj2VkPbNBxN65KEYIKL5O+/6sG+j4zyhvUUUMuN4CjsuDiUhoneaj4xsIY8XvyTD4l/b9jtJ1uwSb/mZPg==",
+ "dev": true,
+ "requires": {
+ "error-stack-parser": "^2.0.1",
+ "minimatch": "^3.0.4",
+ "source-map": "^0.5.7",
+ "source-map-resolve": "^0.5.0"
+ }
+ },
"json-buffer": {
"version": "3.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/json-buffer/-/json-buffer-3.0.0.tgz",
@@ -830,6 +1550,12 @@
"json-buffer": "3.0.0"
}
},
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
"latest-version": {
"version": "5.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/latest-version/-/latest-version-5.1.0.tgz",
@@ -839,12 +1565,72 @@
"package-json": "^6.3.0"
}
},
+ "lodash.toarray": {
+ "version": "4.4.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+ "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ }
+ }
+ },
"lowercase-keys": {
"version": "1.0.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
"dev": true
},
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
"make-dir": {
"version": "3.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/make-dir/-/make-dir-3.1.0.tgz",
@@ -862,11 +1648,143 @@
}
}
},
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ }
+ }
+ },
"mime-db": {
"version": "1.44.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/mime-db/-/mime-db-1.44.0.tgz",
"integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
},
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
"mimic-response": {
"version": "1.0.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -888,12 +1806,61 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/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"
+ }
+ },
+ "node-emoji": {
+ "version": "1.10.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/node-emoji/-/node-emoji-1.10.0.tgz",
+ "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
+ "dev": true,
+ "requires": {
+ "lodash.toarray": "^4.4.0"
+ }
+ },
"node-fetch": {
"version": "2.6.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/node-fetch/-/node-fetch-2.6.1.tgz",
@@ -938,6 +1905,55 @@
"integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
"dev": true
},
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
"once": {
"version": "1.4.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/once/-/once-1.4.0.tgz",
@@ -947,6 +1963,66 @@
"wrappy": "1"
}
},
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "ora": {
+ "version": "3.4.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ora/-/ora-3.4.0.tgz",
+ "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^2.0.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^5.2.0",
+ "wcwidth": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ }
+ }
+ },
"p-cancelable": {
"version": "1.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/p-cancelable/-/p-cancelable-1.1.0.tgz",
@@ -973,12 +2049,36 @@
}
}
},
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "perfy": {
+ "version": "1.1.5",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/perfy/-/perfy-1.1.5.tgz",
+ "integrity": "sha512-/ieVBpMaPTJf83YTUl2TImsSwMEJ23qGP2w27pE6aX+NrB/ZRGqOnQZpl7J719yFwd+ebDiHguPNFeMSamyK7w==",
+ "dev": true
+ },
"picomatch": {
"version": "2.2.2",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/picomatch/-/picomatch-2.2.2.tgz",
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
"dev": true
},
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
"prepend-http": {
"version": "2.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/prepend-http/-/prepend-http-2.0.0.tgz",
@@ -1036,6 +2136,16 @@
"picomatch": "^2.2.1"
}
},
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/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"
+ }
+ },
"registry-auth-token": {
"version": "4.2.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
@@ -1054,6 +2164,24 @@
"rc": "^1.2.8"
}
},
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
"responselike": {
"version": "1.0.2",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/responselike/-/responselike-1.0.2.tgz",
@@ -1063,6 +2191,31 @@
"lowercase-keys": "^1.0.0"
}
},
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
"semver": {
"version": "5.7.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/semver/-/semver-5.7.1.tgz",
@@ -1086,6 +2239,29 @@
}
}
},
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
"sha256": {
"version": "0.2.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/sha256/-/sha256-0.2.0.tgz",
@@ -1101,6 +2277,189 @@
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
"dev": true
},
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "stackframe": {
+ "version": "1.2.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/stackframe/-/stackframe-1.2.0.tgz",
+ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
"string-width": {
"version": "4.2.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/string-width/-/string-width-4.2.0.tgz",
@@ -1171,12 +2530,44 @@
"integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==",
"dev": true
},
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"to-readable-stream": {
"version": "1.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
"integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
"dev": true
},
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/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"
+ }
+ },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -1236,6 +2627,18 @@
}
}
},
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
"unique-string": {
"version": "2.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/unique-string/-/unique-string-2.0.0.tgz",
@@ -1245,6 +2648,46 @@
"crypto-random-string": "^2.0.0"
}
},
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
"update-notifier": {
"version": "4.1.1",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/update-notifier/-/update-notifier-4.1.1.tgz",
@@ -1266,6 +2709,12 @@
"xdg-basedir": "^4.0.0"
}
},
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
"url-parse-lax": {
"version": "3.0.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
@@ -1275,11 +2724,26 @@
"prepend-http": "^2.0.0"
}
},
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
"uuid": {
"version": "8.3.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/uuid/-/uuid-8.3.0.tgz",
"integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ=="
},
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
"widest-line": {
"version": "3.1.0",
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/widest-line/-/widest-line-3.1.0.tgz",
@@ -1312,6 +2776,11 @@
"resolved": "https://nexus.psmanaged.com/repository/group_development_npm/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
"dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://nexus.psmanaged.com/repository/group_development_npm/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
}
}
}
diff --git a/package.json b/package.json
index 29cdff7..d00f633 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,9 @@
"scripts": {
"dev": "nodemon --watch dev -e js dev/server.js",
"start": "concurrently ''",
- "test": "node dev/test.js && echo \"Warning: no real tests specified\" && exit 1"
+ "test": "jasmine",
+ "test:js": "node dev/test.js",
+ "test:mjs": "node -r esm dev/test.mjs"
},
"repository": {
"type": "git",
@@ -25,12 +27,17 @@
"homepage": "https://github.com/thoschu/ch.techstack.blockchain#readme",
"dependencies": {
"@hapi/hapi": "^20.0.0",
+ "@hapi/inert": "^6.0.2",
+ "esm": "^3.2.25",
"node-fetch": "^2.6.1",
"ramda": "^0.27.1",
"sha256": "^0.2.0",
"uuid": "^8.3.0"
},
"devDependencies": {
+ "jasmine": "^3.6.1",
+ "jasmine-console-reporter": "^3.1.0",
+ "jasmine-ts-console-reporter": "^3.1.1",
"nodemon": "^2.0.4"
}
}
diff --git a/spec/blockchain/BlockchainSpec.js b/spec/blockchain/BlockchainSpec.js
new file mode 100644
index 0000000..11fc6af
--- /dev/null
+++ b/spec/blockchain/BlockchainSpec.js
@@ -0,0 +1,138 @@
+const BlockChain = require('../../dev/blockchain.js');
+
+describe('blockchain.js Test', () => {
+ const currentNodeUrl = 'http://0.0.0.0:3000';
+ const nodeIdentifier = '1234567';
+ let bitcoin;
+
+ beforeEach(() => {
+ bitcoin = new BlockChain(currentNodeUrl, nodeIdentifier);
+ });
+
+ afterEach(() => {
+ bitcoin = undefined;
+ });
+
+ describe('blockchain constructor', () => {
+ it('test nodeIdentifier', () => {
+ expect(bitcoin.nodeIdentifier).toBe(nodeIdentifier);
+ });
+
+ it('test currentNodeUrl', () => {
+ expect(bitcoin.currentNodeUrl).toBe(currentNodeUrl);
+ });
+
+ it('test networkNodes array for the right length of 0', () => {
+ expect(bitcoin.networkNodes.length).toBe(0);
+ });
+
+ it('test chain array for the right length of 1', () => {
+ expect(bitcoin.chain.length).toBe(1); // genesis block
+ });
+
+ it('test pendingTransactions array for the right length of 0', () => {
+ expect(bitcoin.pendingTransactions.length).toBe(0);
+ });
+ });
+
+ describe('currentBlockData function', () => {
+ it('test return value', () => {
+ let example = {
+ index: 2,
+ transactions: [],
+ };
+
+ example = jasmine.objectContaining(example);
+
+ expect(bitcoin.currentBlockData()).toEqual(example);
+ });
+ });
+
+ beforeEach(() => {
+ console.log('************');
+ });
+
+ describe('getLastBlock function', () => {
+ it('test return value', () => {
+ const getLastBlock = bitcoin.getLastBlock();
+ const index = getLastBlock.index;
+ const timeStamp = new Date(getLastBlock.timeStamp);
+ const transactions = getLastBlock.transactions;
+ const nonce = getLastBlock.nonce;
+ const previousBlockHash = getLastBlock.previousBlockHash;
+ const hash = getLastBlock.hash;
+ const getLastBlockKeys = Object.keys(getLastBlock);
+ const exampleKeys = Object.keys({
+ index: 7,
+ timeStamp: Date.now(),
+ transactions: [],
+ nonce: undefined,
+ previousBlockHash: null,
+ hash: "0"
+ });
+
+ for (let i = 0; i < exampleKeys.length; i++) {
+ expect(getLastBlockKeys).toContain(exampleKeys[i]);
+ }
+
+ expect(index).toBe(1);
+ expect(timeStamp.getFullYear()).toBe(new Date().getFullYear());
+ expect(transactions).toEqual([]);
+ expect(nonce).toBeUndefined();
+ expect(previousBlockHash).toBeNull();
+ expect(hash).toBe("0");
+ });
+ });
+
+ describe('proofOfWork function', () => {
+ it('test return value', () => {
+ const getLastBlock = bitcoin.getLastBlock();
+ const previousBlockHash = getLastBlock.hash;
+ const currentBlockData = bitcoin.currentBlockData();
+ const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData)
+
+ expect(nonce).toBe(5672);
+ });
+ });
+
+ describe('hash function', () => {
+ it('test return value', () => {
+ const expected = '8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414';
+ const hash = bitcoin.hash(nodeIdentifier);
+
+ expect(hash).toBe(expected);
+ });
+ });
+
+ describe('hashBlock function', () => {
+ it('test return value', () => {
+ const getLastBlock = bitcoin.getLastBlock();
+ const previousBlockHash = getLastBlock.hash;
+ const currentBlockData = bitcoin.currentBlockData();
+ const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
+ const hashBlockHash = bitcoin.hashBlock(previousBlockHash, currentBlockData, nonce);
+ const hashStartsWith0000 = hashBlockHash.startsWith('0000');
+
+ expect(hashStartsWith0000).toBeTruthy();
+ });
+ });
+
+ describe('createNewBlock function', () => {
+ it('test return value', () => {
+ const getLastBlock = bitcoin.getLastBlock();
+ const previousBlockHash = getLastBlock.hash;
+ const currentBlockData = bitcoin.currentBlockData();
+ const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
+ const hash = bitcoin.hashBlock(previousBlockHash, currentBlockData, nonce);
+ const newBlock = bitcoin.createNewBlock(nonce, previousBlockHash, hash);
+
+ console.log(nonce);
+ // console.log(newBlock);
+ // console.log(bitcoin);
+
+ expect(newBlock).toBeTruthy();
+ });
+ });
+});
+
+
diff --git a/spec/helpers/jasmine_examples/SpecHelper.js b/spec/helpers/jasmine_examples/SpecHelper.js
new file mode 100644
index 0000000..578b3e8
--- /dev/null
+++ b/spec/helpers/jasmine_examples/SpecHelper.js
@@ -0,0 +1,15 @@
+beforeEach(function () {
+ jasmine.addMatchers({
+ toBePlaying: function () {
+ return {
+ compare: function (actual, expected) {
+ var player = actual;
+
+ return {
+ pass: player.currentlyPlayingSong === expected && player.isPlaying
+ }
+ }
+ };
+ }
+ });
+});
diff --git a/spec/jasmine_examples/PlayerSpec.js b/spec/jasmine_examples/PlayerSpec.js
new file mode 100644
index 0000000..80f149e
--- /dev/null
+++ b/spec/jasmine_examples/PlayerSpec.js
@@ -0,0 +1,60 @@
+describe("Player", function() {
+ var Player = require('../../lib/jasmine_examples/Player');
+ var Song = require('../../lib/jasmine_examples/Song');
+ var player;
+ var song;
+
+ beforeEach(function() {
+ player = new Player();
+ song = new Song();
+ });
+
+ it("should be able to play a Song", function() {
+ player.play(song);
+ expect(player.currentlyPlayingSong).toEqual(song);
+
+ //demonstrates use of custom matcher
+ expect(player).toBePlaying(song);
+ });
+
+ describe("when song has been paused", function() {
+ beforeEach(function() {
+ player.play(song);
+ player.pause();
+ });
+
+ it("should indicate that the song is currently paused", function() {
+ expect(player.isPlaying).toBeFalsy();
+
+ // demonstrates use of 'not' with a custom matcher
+ expect(player).not.toBePlaying(song);
+ });
+
+ it("should be possible to resume", function() {
+ player.resume();
+ expect(player.isPlaying).toBeTruthy();
+ expect(player.currentlyPlayingSong).toEqual(song);
+ });
+ });
+
+ // demonstrates use of spies to intercept and test method calls
+ it("tells the current song if the user has made it a favorite", function() {
+ spyOn(song, 'persistFavoriteStatus');
+
+ player.play(song);
+ player.makeFavorite();
+
+ expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true);
+ });
+
+ //demonstrates use of expected exceptions
+ describe("#resume", function() {
+ it("should throw an exception if song is already playing", function() {
+ player.play(song);
+
+ expect(function() {
+ player.resume();
+ }).toThrowError("song is already playing");
+ });
+ });
+});
diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json
new file mode 100644
index 0000000..6b8aa06
--- /dev/null
+++ b/spec/support/jasmine.json
@@ -0,0 +1,13 @@
+{
+ "spec_dir": "spec",
+ "spec_files": [
+ "**/*[sS]pec.js",
+ "**/*[sS]pec.mjs"
+ ],
+ "helpers": [
+ "helpers/**/*.js",
+ "helpers/**/*.mjs"
+ ],
+ "stopSpecOnExpectationFailure": false,
+ "random": true
+}