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 Explorer

+
+
+
+
+
+
+ +
+
+ +
+ +

+ No data found for search. +

+
+
+
+
+
+ +

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 }})

+ + + + + + + + + + + + + + + +
SenderRecipientAmount
{{ 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 +}