Use curve functions from native module
This commit is contained in:
parent
e29eee4583
commit
d3d2b0ec52
20 changed files with 623 additions and 74127 deletions
|
@ -12,7 +12,6 @@ script:
|
|||
- yarn generate
|
||||
- yarn lint
|
||||
- yarn lint-deps
|
||||
- yarn test-node
|
||||
- yarn prepare-beta-build
|
||||
- $(yarn bin)/build --config.extraMetadata.environment=$SIGNAL_ENV --config.mac.bundleVersion='$TRAVIS_BUILD_NUMBER' --publish=never --config.directories.output=release
|
||||
- ./travis.sh
|
||||
|
|
|
@ -160,16 +160,12 @@ module.exports = grunt => {
|
|||
archive: `mac/${
|
||||
packageJson.productName
|
||||
}.app/Contents/Resources/app.asar`,
|
||||
appUpdateYML: `mac/${
|
||||
packageJson.productName
|
||||
}.app/Contents/Resources/app-update.yml`,
|
||||
exe: `mac/${packageJson.productName}.app/Contents/MacOS/${
|
||||
packageJson.productName
|
||||
}`,
|
||||
},
|
||||
mas: {
|
||||
archive: 'mas/Signal.app/Contents/Resources/app.asar',
|
||||
appUpdateYML: 'mac/Signal.app/Contents/Resources/app-update.yml',
|
||||
exe: `mas/${packageJson.productName}.app/Contents/MacOS/${
|
||||
packageJson.productName
|
||||
}`,
|
||||
|
@ -180,7 +176,6 @@ module.exports = grunt => {
|
|||
},
|
||||
win: {
|
||||
archive: 'win-unpacked/resources/app.asar',
|
||||
appUpdateYML: 'win-unpacked/resources/app-update.yml',
|
||||
exe: `win-unpacked/${packageJson.productName}.exe`,
|
||||
},
|
||||
},
|
||||
|
|
16
app/sql.js
16
app/sql.js
|
@ -1160,9 +1160,11 @@ async function initialize({ configDir, key, messages }) {
|
|||
|
||||
filePath = join(dbDir, 'db.sqlite');
|
||||
|
||||
let promisified;
|
||||
|
||||
try {
|
||||
const sqlInstance = await openDatabase(filePath);
|
||||
const promisified = promisify(sqlInstance);
|
||||
promisified = promisify(sqlInstance);
|
||||
|
||||
// promisified.on('trace', async statement => {
|
||||
// if (!db || statement.startsWith('--')) {
|
||||
|
@ -1177,16 +1179,18 @@ async function initialize({ configDir, key, messages }) {
|
|||
|
||||
await updateSchema(promisified);
|
||||
|
||||
db = promisified;
|
||||
|
||||
// test database
|
||||
|
||||
const result = await getSQLIntegrityCheck(db);
|
||||
const result = await getSQLIntegrityCheck(promisified);
|
||||
if (result) {
|
||||
console.log('Database integrity check failed:', result);
|
||||
throw new Error(`Integrity check failed: ${result}`);
|
||||
}
|
||||
|
||||
// At this point we can allow general access to the database
|
||||
db = promisified;
|
||||
|
||||
// test database
|
||||
await getMessageCount();
|
||||
} catch (error) {
|
||||
console.log('Database startup error:', error.stack);
|
||||
|
@ -1207,7 +1211,9 @@ async function initialize({ configDir, key, messages }) {
|
|||
`Database startup error:\n\n${redactAll(error.stack)}`
|
||||
);
|
||||
} else {
|
||||
await close();
|
||||
if (promisified) {
|
||||
await promisified.close();
|
||||
}
|
||||
await removeDB();
|
||||
removeUserConfig();
|
||||
app.relaunch();
|
||||
|
|
|
@ -16,8 +16,8 @@ build_script:
|
|||
- yarn generate
|
||||
- yarn lint-windows
|
||||
- yarn lint-deps
|
||||
- yarn test-node
|
||||
- node build\grunt.js
|
||||
- yarn test-node
|
||||
- type package.json | findstr /v certificateSubjectName > temp.json
|
||||
- move temp.json package.json
|
||||
- yarn prepare-beta-build
|
||||
|
|
|
@ -163,8 +163,6 @@
|
|||
window.owsDesktopApp = {};
|
||||
window.document.title = window.getTitle();
|
||||
|
||||
// start a background worker for ecc
|
||||
textsecure.startWorker('js/libsignal-protocol-worker.js');
|
||||
Whisper.KeyChangeListener.init(textsecure.storage.protocol);
|
||||
textsecure.storage.protocol.on('removePreKey', () => {
|
||||
getAccountManager().refreshPreKeys();
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,158 +0,0 @@
|
|||
/* vim: ts=4:sw=4:expandtab */
|
||||
var Internal = global.Internal || {};
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Insert some bytes into the emscripten memory and return a pointer
|
||||
function _allocate(bytes) {
|
||||
var address = Module._malloc(bytes.length);
|
||||
Module.HEAPU8.set(bytes, address);
|
||||
|
||||
return address;
|
||||
}
|
||||
|
||||
function _readBytes(address, length, array) {
|
||||
array.set(Module.HEAPU8.subarray(address, address + length));
|
||||
}
|
||||
|
||||
var basepoint = new Uint8Array(32);
|
||||
basepoint[0] = 9;
|
||||
|
||||
Internal.curve25519 = {
|
||||
keyPair: function(privKey) {
|
||||
var priv = new Uint8Array(privKey);
|
||||
priv[0] &= 248;
|
||||
priv[31] &= 127;
|
||||
priv[31] |= 64;
|
||||
|
||||
// Where to store the result
|
||||
var publicKey_ptr = Module._malloc(32);
|
||||
|
||||
// Get a pointer to the private key
|
||||
var privateKey_ptr = _allocate(priv);
|
||||
|
||||
// The basepoint for generating public keys
|
||||
var basepoint_ptr = _allocate(basepoint);
|
||||
|
||||
// The return value is just 0, the operation is done in place
|
||||
var err = Module._curve25519_donna(
|
||||
publicKey_ptr,
|
||||
privateKey_ptr,
|
||||
basepoint_ptr
|
||||
);
|
||||
|
||||
var res = new Uint8Array(32);
|
||||
_readBytes(publicKey_ptr, 32, res);
|
||||
|
||||
Module._free(publicKey_ptr);
|
||||
Module._free(privateKey_ptr);
|
||||
Module._free(basepoint_ptr);
|
||||
|
||||
return { pubKey: res.buffer, privKey: priv.buffer };
|
||||
},
|
||||
sharedSecret: function(pubKey, privKey) {
|
||||
// Where to store the result
|
||||
var sharedKey_ptr = Module._malloc(32);
|
||||
|
||||
// Get a pointer to our private key
|
||||
var privateKey_ptr = _allocate(new Uint8Array(privKey));
|
||||
|
||||
// Get a pointer to their public key, the basepoint when you're
|
||||
// generating a shared secret
|
||||
var basepoint_ptr = _allocate(new Uint8Array(pubKey));
|
||||
|
||||
// Return value is 0 here too of course
|
||||
var err = Module._curve25519_donna(
|
||||
sharedKey_ptr,
|
||||
privateKey_ptr,
|
||||
basepoint_ptr
|
||||
);
|
||||
|
||||
var res = new Uint8Array(32);
|
||||
_readBytes(sharedKey_ptr, 32, res);
|
||||
|
||||
Module._free(sharedKey_ptr);
|
||||
Module._free(privateKey_ptr);
|
||||
Module._free(basepoint_ptr);
|
||||
|
||||
return res.buffer;
|
||||
},
|
||||
sign: function(privKey, message) {
|
||||
// Where to store the result
|
||||
var signature_ptr = Module._malloc(64);
|
||||
|
||||
// Get a pointer to our private key
|
||||
var privateKey_ptr = _allocate(new Uint8Array(privKey));
|
||||
|
||||
// Get a pointer to the message
|
||||
var message_ptr = _allocate(new Uint8Array(message));
|
||||
|
||||
var err = Module._curve25519_sign(
|
||||
signature_ptr,
|
||||
privateKey_ptr,
|
||||
message_ptr,
|
||||
message.byteLength
|
||||
);
|
||||
|
||||
var res = new Uint8Array(64);
|
||||
_readBytes(signature_ptr, 64, res);
|
||||
|
||||
Module._free(signature_ptr);
|
||||
Module._free(privateKey_ptr);
|
||||
Module._free(message_ptr);
|
||||
|
||||
return res.buffer;
|
||||
},
|
||||
verify: function(pubKey, message, sig) {
|
||||
// Get a pointer to their public key
|
||||
var publicKey_ptr = _allocate(new Uint8Array(pubKey));
|
||||
|
||||
// Get a pointer to the signature
|
||||
var signature_ptr = _allocate(new Uint8Array(sig));
|
||||
|
||||
// Get a pointer to the message
|
||||
var message_ptr = _allocate(new Uint8Array(message));
|
||||
|
||||
var res = Module._curve25519_verify(
|
||||
signature_ptr,
|
||||
publicKey_ptr,
|
||||
message_ptr,
|
||||
message.byteLength
|
||||
);
|
||||
|
||||
Module._free(publicKey_ptr);
|
||||
Module._free(signature_ptr);
|
||||
Module._free(message_ptr);
|
||||
|
||||
return res !== 0;
|
||||
},
|
||||
};
|
||||
|
||||
Internal.curve25519_async = {
|
||||
keyPair: function(privKey) {
|
||||
return new Promise(function(resolve) {
|
||||
resolve(Internal.curve25519.keyPair(privKey));
|
||||
});
|
||||
},
|
||||
sharedSecret: function(pubKey, privKey) {
|
||||
return new Promise(function(resolve) {
|
||||
resolve(Internal.curve25519.sharedSecret(pubKey, privKey));
|
||||
});
|
||||
},
|
||||
sign: function(privKey, message) {
|
||||
return new Promise(function(resolve) {
|
||||
resolve(Internal.curve25519.sign(privKey, message));
|
||||
});
|
||||
},
|
||||
verify: function(pubKey, message, sig) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
if (Internal.curve25519.verify(pubKey, message, sig)) {
|
||||
reject(new Error('Invalid signature'));
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
})();
|
|
@ -2094,11 +2094,6 @@
|
|||
const messageId = message.id;
|
||||
const isExpiringMessage = Message.hasExpiration(messageJSON);
|
||||
|
||||
window.log.info('Add notification', {
|
||||
conversationId: this.idForLogging(),
|
||||
isExpiringMessage,
|
||||
messageSentAt,
|
||||
});
|
||||
Whisper.Notifications.add({
|
||||
conversationId,
|
||||
iconUrl,
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
const isAudioNotificationEnabled =
|
||||
storage.get('audio-notification') || false;
|
||||
const isAudioNotificationSupported = Settings.isAudioNotificationSupported();
|
||||
const isNotificationGroupingSupported = Settings.isNotificationGroupingSupported();
|
||||
const numNotifications = this.length;
|
||||
const userSetting = this.getUserSetting();
|
||||
|
||||
|
@ -71,13 +70,6 @@
|
|||
userSetting,
|
||||
});
|
||||
|
||||
window.log.info(
|
||||
'Update notifications:',
|
||||
Object.assign({}, status, {
|
||||
isNotificationGroupingSupported,
|
||||
})
|
||||
);
|
||||
|
||||
if (status.type !== 'ok') {
|
||||
if (status.shouldClearNotifications) {
|
||||
this.reset([]);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;(function(){
|
||||
var Internal = {};
|
||||
window.libsignal = {};
|
||||
window.libsignal = window.libsignal || {};
|
||||
// The Module object: Our interface to the outside world. We import
|
||||
// and export values on it, and do the work to get that through
|
||||
// closure compiler if necessary. There are various ways Module can be used:
|
||||
|
@ -35194,9 +35194,19 @@ Curve25519Worker.prototype = {
|
|||
}
|
||||
|
||||
Internal.wrapCurve = wrapCurve;
|
||||
libsignal.Curve = wrapCurve(Internal.Curve);
|
||||
libsignal.Curve.async = wrapCurve(Internal.Curve.async);
|
||||
if (libsignal.externalCurve) {
|
||||
libsignal.Curve = libsignal.externalCurve;
|
||||
Internal.Curve = libsignal.externalCurve;
|
||||
} else {
|
||||
libsignal.Curve = wrapCurve(Internal.Curve);
|
||||
}
|
||||
|
||||
if (libsignal.externalCurveAsync) {
|
||||
libsignal.Curve.async = libsignal.externalCurveAsync;
|
||||
Internal.Curve.async = libsignal.externalCurveAsync;
|
||||
} else {
|
||||
libsignal.Curve.async = wrapCurve(Internal.Curve.async);
|
||||
}
|
||||
})();
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
"publish-to-apt": "NAME=$npm_package_name VERSION=$npm_package_version ./aptly.sh",
|
||||
"test": "yarn test-node && yarn test-electron",
|
||||
"test-electron": "yarn grunt test",
|
||||
"test-node": "mocha --recursive test/app test/modules ts/test",
|
||||
"test-node": "electron-mocha --recursive test/app test/modules ts/test",
|
||||
"test-node-coverage": "nyc --reporter=lcov --reporter=text mocha --recursive test/app test/modules ts/test",
|
||||
"eslint": "eslint .",
|
||||
"lint": "yarn format --list-different && yarn lint-windows",
|
||||
|
@ -53,10 +53,12 @@
|
|||
"bunyan": "1.8.12",
|
||||
"classnames": "2.2.5",
|
||||
"config": "1.28.1",
|
||||
"curve25519-n": "https://github.com/scottnonnenberg-signal/node-curve25519.git#1bd0580843dcf836284dee7f1c4dfb4c698f7969",
|
||||
"draft-js": "0.10.5",
|
||||
"electron-context-menu": "0.11.0",
|
||||
"electron-editor-context-menu": "1.1.1",
|
||||
"electron-is-dev": "0.3.0",
|
||||
"electron-mocha": "8.1.1",
|
||||
"emoji-datasource": "4.1.0",
|
||||
"emoji-datasource-apple": "4.1.0",
|
||||
"emoji-regex": "8.0.0",
|
||||
|
@ -296,6 +298,7 @@
|
|||
"!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.editorconfig,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}",
|
||||
"node_modules/spellchecker/build/Release/*.node",
|
||||
"node_modules/websocket/build/Release/*.node",
|
||||
"node_modules/curve25519-n/build/Release/*.node",
|
||||
"node_modules/socks/build/*.js",
|
||||
"node_modules/socks/build/common/*.js",
|
||||
"node_modules/socks/build/client/*.js",
|
||||
|
|
85
preload.js
85
preload.js
|
@ -2,6 +2,7 @@
|
|||
|
||||
const electron = require('electron');
|
||||
const semver = require('semver');
|
||||
const curve = require('curve25519-n');
|
||||
|
||||
const { deferredToPromise } = require('./js/modules/deferred_to_promise');
|
||||
|
||||
|
@ -325,6 +326,90 @@ window.Signal = Signal.setup({
|
|||
logger: window.log,
|
||||
});
|
||||
|
||||
function wrapWithPromise(fn) {
|
||||
return (...args) => Promise.resolve(fn(...args));
|
||||
}
|
||||
function typedArrayToArrayBuffer(typedArray) {
|
||||
const { buffer, byteOffset, byteLength } = typedArray;
|
||||
return buffer.slice(byteOffset, byteLength + byteOffset);
|
||||
}
|
||||
const externalCurve = {
|
||||
generateKeyPair: () => {
|
||||
const { privKey, pubKey } = curve.generateKeyPair();
|
||||
|
||||
return {
|
||||
privKey: typedArrayToArrayBuffer(privKey),
|
||||
pubKey: typedArrayToArrayBuffer(pubKey),
|
||||
};
|
||||
},
|
||||
createKeyPair: incomingKey => {
|
||||
const incomingKeyBuffer = Buffer.from(incomingKey);
|
||||
const { privKey, pubKey } = curve.createKeyPair(incomingKeyBuffer);
|
||||
|
||||
return {
|
||||
privKey: typedArrayToArrayBuffer(privKey),
|
||||
pubKey: typedArrayToArrayBuffer(pubKey),
|
||||
};
|
||||
},
|
||||
calculateAgreement: (pubKey, privKey) => {
|
||||
const pubKeyBuffer = Buffer.from(pubKey);
|
||||
const privKeyBuffer = Buffer.from(privKey);
|
||||
|
||||
const buffer = curve.calculateAgreement(pubKeyBuffer, privKeyBuffer);
|
||||
|
||||
return typedArrayToArrayBuffer(buffer);
|
||||
},
|
||||
verifySignature: (pubKey, message, signature) => {
|
||||
const pubKeyBuffer = Buffer.from(pubKey);
|
||||
const messageBuffer = Buffer.from(message);
|
||||
const signatureBuffer = Buffer.from(signature);
|
||||
|
||||
const result = curve.verifySignature(
|
||||
pubKeyBuffer,
|
||||
messageBuffer,
|
||||
signatureBuffer
|
||||
);
|
||||
|
||||
return result;
|
||||
},
|
||||
calculateSignature: (privKey, message) => {
|
||||
const privKeyBuffer = Buffer.from(privKey);
|
||||
const messageBuffer = Buffer.from(message);
|
||||
|
||||
const buffer = curve.calculateSignature(privKeyBuffer, messageBuffer);
|
||||
|
||||
return typedArrayToArrayBuffer(buffer);
|
||||
},
|
||||
validatePubKeyFormat: pubKey => {
|
||||
const pubKeyBuffer = Buffer.from(pubKey);
|
||||
|
||||
return curve.validatePubKeyFormat(pubKeyBuffer);
|
||||
},
|
||||
};
|
||||
externalCurve.ECDHE = externalCurve.calculateAgreement;
|
||||
externalCurve.Ed25519Sign = externalCurve.calculateSignature;
|
||||
externalCurve.Ed25519Verify = externalCurve.verifySignature;
|
||||
const externalCurveAsync = {
|
||||
generateKeyPair: wrapWithPromise(externalCurve.generateKeyPair),
|
||||
createKeyPair: wrapWithPromise(externalCurve.createKeyPair),
|
||||
calculateAgreement: wrapWithPromise(externalCurve.calculateAgreement),
|
||||
verifySignature: async (...args) => {
|
||||
// The async verifySignature function has a different signature than the sync function
|
||||
const verifyFailed = externalCurve.verifySignature(...args);
|
||||
if (verifyFailed) {
|
||||
throw new Error('Invalid signature');
|
||||
}
|
||||
},
|
||||
calculateSignature: wrapWithPromise(externalCurve.calculateSignature),
|
||||
validatePubKeyFormat: wrapWithPromise(externalCurve.validatePubKeyFormat),
|
||||
ECDHE: wrapWithPromise(externalCurve.ECDHE),
|
||||
Ed25519Sign: wrapWithPromise(externalCurve.Ed25519Sign),
|
||||
Ed25519Verify: wrapWithPromise(externalCurve.Ed25519Verify),
|
||||
};
|
||||
window.libsignal = window.libsignal || {};
|
||||
window.libsignal.externalCurve = externalCurve;
|
||||
window.libsignal.externalCurveAsync = externalCurveAsync;
|
||||
|
||||
// Pulling these in separately since they access filesystem, electron
|
||||
window.Signal.Backup = require('./js/modules/backup');
|
||||
window.Signal.Debug = require('./js/modules/debug');
|
||||
|
|
|
@ -299,13 +299,16 @@ describe('SecretSessionCipher', () => {
|
|||
|
||||
try {
|
||||
await bobCipher.decrypt(
|
||||
createCertificateValidator(trustRoot.puKey),
|
||||
createCertificateValidator(trustRoot.pubKey),
|
||||
ciphertext,
|
||||
31335
|
||||
);
|
||||
throw new Error('It did not fail!');
|
||||
} catch (error) {
|
||||
assert.strictEqual(error.message, 'Invalid public key');
|
||||
assert.strictEqual(
|
||||
error.message,
|
||||
"Sender's certificate key does not match key used in message"
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
|
|||
sleep 3
|
||||
fi
|
||||
|
||||
yarn test-node
|
||||
yarn test-electron
|
||||
|
||||
NODE_ENV=production yarn grunt test-release:$TRAVIS_OS_NAME
|
||||
|
|
13
ts/curve25519-n.d.ts
vendored
Normal file
13
ts/curve25519-n.d.ts
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
declare module 'curve25519-n' {
|
||||
export function generateKeyPair(
|
||||
privKey: Buffer
|
||||
): { pubKey: Buffer; privKey: Buffer };
|
||||
|
||||
export function calculateSignature(privKey: Buffer, message: Buffer): Buffer;
|
||||
|
||||
export function verifySignature(
|
||||
publicKey: Buffer,
|
||||
message: Buffer,
|
||||
signature: Buffer
|
||||
): Buffer;
|
||||
}
|
|
@ -1,42 +1,13 @@
|
|||
import { randomBytes } from 'crypto';
|
||||
|
||||
const g = global as any;
|
||||
|
||||
// Because curve wrapper will populate this
|
||||
g.Internal = {};
|
||||
|
||||
// Because curve wrapper uses 'Module' to get at curve-provided functionality
|
||||
// tslint:disable-next-line
|
||||
g.Module = require('../../js/curve/curve25519_compiled');
|
||||
// tslint:disable-next-line
|
||||
require('../../js/curve/curve25519_wrapper');
|
||||
|
||||
export type BinaryType = Uint8Array | Buffer;
|
||||
|
||||
interface CurveType {
|
||||
keyPair: (
|
||||
privateKey: BinaryType
|
||||
) => {
|
||||
pubKey: BinaryType;
|
||||
privKey: BinaryType;
|
||||
};
|
||||
sign: (privateKey: BinaryType, message: BinaryType) => BinaryType;
|
||||
verify: (
|
||||
publicKey: BinaryType,
|
||||
message: BinaryType,
|
||||
signature: BinaryType
|
||||
) => boolean;
|
||||
}
|
||||
|
||||
const {
|
||||
keyPair: internalKeyPair,
|
||||
sign: internalSign,
|
||||
verify: internalVerify,
|
||||
} = g.Internal.curve25519 as CurveType;
|
||||
import {
|
||||
calculateSignature,
|
||||
generateKeyPair,
|
||||
verifySignature,
|
||||
} from 'curve25519-n';
|
||||
|
||||
export function keyPair() {
|
||||
const privateKey = randomBytes(32);
|
||||
const { pubKey, privKey } = internalKeyPair(privateKey);
|
||||
const { pubKey, privKey } = generateKeyPair(privateKey);
|
||||
|
||||
return {
|
||||
publicKey: pubKey,
|
||||
|
@ -44,16 +15,16 @@ export function keyPair() {
|
|||
};
|
||||
}
|
||||
|
||||
export function sign(privateKey: BinaryType, message: BinaryType) {
|
||||
return internalSign(privateKey, message);
|
||||
export function sign(privateKey: Buffer, message: Buffer): Buffer {
|
||||
return calculateSignature(privateKey, message);
|
||||
}
|
||||
|
||||
export function verify(
|
||||
publicKey: BinaryType,
|
||||
message: BinaryType,
|
||||
signature: BinaryType
|
||||
) {
|
||||
const failed = internalVerify(publicKey, message, signature);
|
||||
publicKey: Buffer,
|
||||
message: Buffer,
|
||||
signature: Buffer
|
||||
): boolean {
|
||||
const failed = verifySignature(publicKey, message, signature);
|
||||
|
||||
return !failed;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ import { basename, dirname, join, resolve as resolvePath } from 'path';
|
|||
|
||||
import pify from 'pify';
|
||||
|
||||
import { BinaryType, sign, verify } from './curve';
|
||||
import { sign, verify } from './curve';
|
||||
|
||||
const readFile = pify(readFileCallback);
|
||||
const writeFile = pify(writeFileCallback);
|
||||
|
@ -27,7 +27,7 @@ export async function generateSignature(
|
|||
export async function verifySignature(
|
||||
updatePackagePath: string,
|
||||
version: string,
|
||||
publicKey: BinaryType
|
||||
publicKey: Buffer
|
||||
): Promise<boolean> {
|
||||
const signaturePath = getSignaturePath(updatePackagePath);
|
||||
const signature = await loadHexFromPath(signaturePath);
|
||||
|
@ -41,7 +41,7 @@ export async function verifySignature(
|
|||
async function generateMessage(
|
||||
updatePackagePath: string,
|
||||
version: string
|
||||
): Promise<BinaryType> {
|
||||
): Promise<Buffer> {
|
||||
const hash = await _getFileHash(updatePackagePath);
|
||||
const messageString = `${Buffer.from(hash).toString('hex')}-${version}`;
|
||||
|
||||
|
@ -62,9 +62,7 @@ export async function writeSignature(
|
|||
await writeHexToPath(signaturePath, signature);
|
||||
}
|
||||
|
||||
export async function _getFileHash(
|
||||
updatePackagePath: string
|
||||
): Promise<BinaryType> {
|
||||
export async function _getFileHash(updatePackagePath: string): Promise<Buffer> {
|
||||
const hash = createHash('sha256');
|
||||
const stream = createReadStream(updatePackagePath);
|
||||
|
||||
|
@ -93,20 +91,20 @@ export function getSignaturePath(updatePackagePath: string): string {
|
|||
return join(updateDir, getSignatureFileName(updateFileName));
|
||||
}
|
||||
|
||||
export function hexToBinary(target: string): BinaryType {
|
||||
export function hexToBinary(target: string): Buffer {
|
||||
return Buffer.from(target, 'hex');
|
||||
}
|
||||
|
||||
export function binaryToHex(data: BinaryType): string {
|
||||
export function binaryToHex(data: Buffer): string {
|
||||
return Buffer.from(data).toString('hex');
|
||||
}
|
||||
|
||||
export async function loadHexFromPath(target: string): Promise<BinaryType> {
|
||||
export async function loadHexFromPath(target: string): Promise<Buffer> {
|
||||
const hexString = await readFile(target, 'utf8');
|
||||
|
||||
return hexToBinary(hexString);
|
||||
}
|
||||
|
||||
export async function writeHexToPath(target: string, data: BinaryType) {
|
||||
export async function writeHexToPath(target: string, data: Buffer) {
|
||||
await writeFile(target, binaryToHex(data));
|
||||
}
|
||||
|
|
|
@ -1391,6 +1391,22 @@
|
|||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-07-31T00:19:18.696Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-wrap(",
|
||||
"path": "node_modules/ansi-colors/index.js",
|
||||
"line": " return typeof style === 'function' ? style(input) : style.wrap(input, newline);",
|
||||
"lineNumber": 33,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T18:03:38.741Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-wrap(",
|
||||
"path": "node_modules/ansi-colors/index.js",
|
||||
"line": " while (n-- > 0) str = wrap(colors.styles[stack[n]], str, nl);",
|
||||
"lineNumber": 46,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T18:03:38.741Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-after(",
|
||||
"path": "node_modules/archiver-utils/node_modules/lodash/after.js",
|
||||
|
@ -5568,6 +5584,24 @@
|
|||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-07-19T17:16:02.404Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-$(",
|
||||
"path": "node_modules/object.getownpropertydescriptors/node_modules/es-abstract/operations/getOps.js",
|
||||
"line": "var root = $(specHTML);",
|
||||
"lineNumber": 23,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T18:03:38.741Z",
|
||||
"reasonDetail": "$ in this case is cheerio"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-$(",
|
||||
"path": "node_modules/object.getownpropertydescriptors/node_modules/es-abstract/operations/getOps.js",
|
||||
"line": " var op = $(x);",
|
||||
"lineNumber": 30,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T18:03:38.741Z",
|
||||
"reasonDetail": "$ in this case is cheerio"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-wrap(",
|
||||
"path": "node_modules/optionator/lib/help.js",
|
||||
|
@ -6662,6 +6696,14 @@
|
|||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-07-16T21:56:03.429Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-wrap(",
|
||||
"path": "node_modules/svg2png/node_modules/yargs/yargs.js",
|
||||
"line": " usage.wrap(cols)",
|
||||
"lineNumber": 643,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T18:03:38.741Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-append(",
|
||||
"path": "node_modules/table/dist/createStream.js",
|
||||
|
@ -7135,13 +7177,45 @@
|
|||
"reasonCategory": "falseMatch",
|
||||
"updated": "2018-09-19T21:59:32.770Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-$(",
|
||||
"path": "node_modules/yargs/lib/completion-templates.js",
|
||||
"line": " type_list=$({{app_path}} --get-yargs-completions \"\\${args[@]}\")",
|
||||
"lineNumber": 17,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T21:47:42.627Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-$(",
|
||||
"path": "node_modules/yargs/lib/completion-templates.js",
|
||||
"line": " COMPREPLY=( $(compgen -W \"\\${type_list}\" -- \\${cur_word}) )",
|
||||
"lineNumber": 19,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T21:47:42.627Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-$(",
|
||||
"path": "node_modules/yargs/lib/completion-templates.js",
|
||||
"line": " IFS=$'\\n' reply=($(COMP_CWORD=\"$((CURRENT-1))\" COMP_LINE=\"$BUFFER\" COMP_POINT=\"$CURSOR\" {{app_path}} --get-yargs-completions \"\\${words[@]}\"))",
|
||||
"lineNumber": 43,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T21:47:42.627Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-wrap(",
|
||||
"path": "node_modules/yargs/node_modules/cliui/index.js",
|
||||
"line": " if (_this.wrap) wrapped = wrap(col.text, _this._negatePadding(col), { hard: true }).split('\\n')",
|
||||
"lineNumber": 216,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2019-08-19T21:47:42.627Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-wrap(",
|
||||
"path": "node_modules/yargs/yargs.js",
|
||||
"line": " usage.wrap(cols)",
|
||||
"lineNumber": 643,
|
||||
"lineNumber": 756,
|
||||
"reasonCategory": "falseMatch",
|
||||
"updated": "2018-09-19T18:13:29.628Z"
|
||||
"updated": "2019-08-19T18:03:38.741Z"
|
||||
},
|
||||
{
|
||||
"rule": "jQuery-after(",
|
||||
|
|
|
@ -103,6 +103,7 @@ const excludedFiles = [
|
|||
'^node_modules/degenerator/*',
|
||||
'^node_modules/detect-port-alt/*',
|
||||
'^node_modules/electron-builder/*',
|
||||
'^node_modules/electron-mocha/',
|
||||
'^node_modules/electron-icon-maker/*',
|
||||
'^node_modules/electron-osx-sign/*',
|
||||
'^node_modules/electron-publish/*',
|
||||
|
@ -182,6 +183,7 @@ const excludedFiles = [
|
|||
'^node_modules/xmlbuilder/*',
|
||||
'^node_modules/xmldom/*',
|
||||
'^node_modules/xml-parse-from-string/*',
|
||||
'^node_modules/yargs-unparser/',
|
||||
];
|
||||
|
||||
function setupRules(allRules: Array<RuleType>) {
|
||||
|
|
424
yarn.lock
424
yarn.lock
|
@ -470,6 +470,16 @@ ansi-align@^3.0.0:
|
|||
dependencies:
|
||||
string-width "^3.0.0"
|
||||
|
||||
ansi-colors@3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
|
||||
integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
|
||||
|
||||
ansi-colors@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
|
||||
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
|
||||
|
||||
ansi-escapes@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
|
||||
|
@ -986,6 +996,13 @@ binary@^0.3.0:
|
|||
buffers "~0.1.1"
|
||||
chainsaw "~0.1.0"
|
||||
|
||||
bindings@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
|
||||
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
|
||||
dependencies:
|
||||
file-uri-to-path "1.0.0"
|
||||
|
||||
bl@^1.0.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
|
||||
|
@ -1191,6 +1208,11 @@ browser-stdout@1.3.0:
|
|||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
|
||||
|
||||
browser-stdout@1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
|
||||
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
|
||||
|
||||
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
|
||||
|
@ -1732,6 +1754,15 @@ cliui@^3.2.0:
|
|||
strip-ansi "^3.0.1"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
cliui@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
|
||||
integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
|
||||
dependencies:
|
||||
string-width "^2.1.1"
|
||||
strip-ansi "^4.0.0"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
cliui@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
|
||||
|
@ -2146,7 +2177,7 @@ cross-spawn@^4:
|
|||
lru-cache "^4.0.1"
|
||||
which "^1.2.9"
|
||||
|
||||
cross-spawn@^6.0.5:
|
||||
cross-spawn@^6.0.0, cross-spawn@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
|
||||
|
@ -2312,6 +2343,13 @@ currently-unhandled@^0.4.1:
|
|||
dependencies:
|
||||
array-find-index "^1.0.1"
|
||||
|
||||
"curve25519-n@https://github.com/scottnonnenberg-signal/node-curve25519.git#1bd0580843dcf836284dee7f1c4dfb4c698f7969":
|
||||
version "1.5.0"
|
||||
resolved "https://github.com/scottnonnenberg-signal/node-curve25519.git#1bd0580843dcf836284dee7f1c4dfb4c698f7969"
|
||||
dependencies:
|
||||
bindings "^1.5.0"
|
||||
nan "^2.14.0"
|
||||
|
||||
cyclist@~0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
|
||||
|
@ -2364,6 +2402,13 @@ debug@3.1.0, debug@^3.1.0:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@3.2.6:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^2.1.3, debug@^2.2.0, debug@^2.6.8:
|
||||
version "2.6.8"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
|
||||
|
@ -2580,14 +2625,14 @@ diff@3.3.1:
|
|||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
|
||||
|
||||
diff@3.5.0, diff@^3.2.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
||||
|
||||
diff@^3.1.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
|
||||
|
||||
diff@^3.2.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
||||
|
||||
diffie-hellman@^5.0.0:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
|
||||
|
@ -2823,6 +2868,19 @@ electron-is-dev@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-1.0.1.tgz#6e0a184736fe7aea77d18210b0b0f6a02402c4bc"
|
||||
integrity sha512-iwM3EotA9HTXqMGpQRkR/kT8OZqBbdfHTnlwcxsjSLYqY8svvsq0MuujsWCn3/vtgRmDv/PC/gKUUpoZvi5C1w==
|
||||
|
||||
electron-mocha@8.1.1:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.yarnpkg.com/electron-mocha/-/electron-mocha-8.1.1.tgz#e540e7d9ba80a024007a18533ae491c18f9a0ce2"
|
||||
integrity sha512-/tba/uMivpDdECIFPDIb5Qa5V/9LhY8HbtDo3hOsOXw3zeRyCnLdhSHSPXWBm+C7GxaJheEyoHEMkiMnCbVbvg==
|
||||
dependencies:
|
||||
ansi-colors "^4.1.1"
|
||||
electron-window "^0.8.0"
|
||||
fs-extra "^8.1.0"
|
||||
log-symbols "^3.0.0"
|
||||
mocha "~6.2.0"
|
||||
which "^1.3.1"
|
||||
yargs "^13.3.0"
|
||||
|
||||
electron-publish@21.2.0:
|
||||
version "21.2.0"
|
||||
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-21.2.0.tgz#cc225cb46aa62e74b899f2f7299b396c9802387d"
|
||||
|
@ -2840,6 +2898,13 @@ electron-to-chromium@^1.2.7:
|
|||
version "1.3.41"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.41.tgz#7e33643e00cd85edfd17e04194f6d00e73737235"
|
||||
|
||||
electron-window@^0.8.0:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/electron-window/-/electron-window-0.8.1.tgz#16ca187eb4870b0679274fc8299c5960e6ab2c5e"
|
||||
integrity sha1-FsoYfrSHCwZ5J0/IKZxZYOarLF4=
|
||||
dependencies:
|
||||
is-electron-renderer "^2.0.0"
|
||||
|
||||
electron@6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-6.0.1.tgz#9dcdb3773e933890f432403f2ff5851cffbea126"
|
||||
|
@ -2940,6 +3005,18 @@ error-ex@^1.2.0:
|
|||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
es-abstract@^1.5.1:
|
||||
version "1.13.0"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
|
||||
integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
|
||||
dependencies:
|
||||
es-to-primitive "^1.2.0"
|
||||
function-bind "^1.1.1"
|
||||
has "^1.0.3"
|
||||
is-callable "^1.1.4"
|
||||
is-regex "^1.0.4"
|
||||
object-keys "^1.0.12"
|
||||
|
||||
es-abstract@^1.7.0:
|
||||
version "1.11.0"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681"
|
||||
|
@ -2958,6 +3035,15 @@ es-to-primitive@^1.1.1:
|
|||
is-date-object "^1.0.1"
|
||||
is-symbol "^1.0.1"
|
||||
|
||||
es-to-primitive@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
|
||||
integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
|
||||
dependencies:
|
||||
is-callable "^1.1.4"
|
||||
is-date-object "^1.0.1"
|
||||
is-symbol "^1.0.2"
|
||||
|
||||
es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
|
||||
version "0.10.49"
|
||||
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.49.tgz#059a239de862c94494fec28f8150c977028c6c5e"
|
||||
|
@ -3259,6 +3345,19 @@ execa@^0.7.0:
|
|||
signal-exit "^3.0.0"
|
||||
strip-eof "^1.0.0"
|
||||
|
||||
execa@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
|
||||
integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
|
||||
dependencies:
|
||||
cross-spawn "^6.0.0"
|
||||
get-stream "^4.0.0"
|
||||
is-stream "^1.1.0"
|
||||
npm-run-path "^2.0.0"
|
||||
p-finally "^1.0.0"
|
||||
signal-exit "^3.0.0"
|
||||
strip-eof "^1.0.0"
|
||||
|
||||
exif-parser@^0.1.9:
|
||||
version "0.1.9"
|
||||
resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.9.tgz#1d087e05fd2b079e3a8eaf8ff249978cb5f6fba7"
|
||||
|
@ -3502,9 +3601,10 @@ file-type@^3.1.0:
|
|||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
|
||||
integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
|
||||
|
||||
file-uri-to-path@1:
|
||||
file-uri-to-path@1, file-uri-to-path@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
|
||||
|
||||
file-url@^2.0.0:
|
||||
version "2.0.2"
|
||||
|
@ -3572,6 +3672,13 @@ find-cache-dir@^1.0.0:
|
|||
make-dir "^1.0.0"
|
||||
pkg-dir "^2.0.0"
|
||||
|
||||
find-up@3.0.0, find-up@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
||||
integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
|
||||
dependencies:
|
||||
locate-path "^3.0.0"
|
||||
|
||||
find-up@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
|
||||
|
@ -3585,13 +3692,6 @@ find-up@^2.0.0, find-up@^2.1.0:
|
|||
dependencies:
|
||||
locate-path "^2.0.0"
|
||||
|
||||
find-up@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
||||
integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
|
||||
dependencies:
|
||||
locate-path "^3.0.0"
|
||||
|
||||
find-yarn-workspace-root@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
|
||||
|
@ -3627,6 +3727,13 @@ flat-cache@^1.2.1:
|
|||
graceful-fs "^4.1.2"
|
||||
write "^0.2.1"
|
||||
|
||||
flat@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
|
||||
integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
|
||||
dependencies:
|
||||
is-buffer "~2.0.3"
|
||||
|
||||
flatten@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
|
||||
|
@ -3899,7 +4006,7 @@ get-stream@3.0.0, get-stream@^3.0.0:
|
|||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||
|
||||
get-stream@^4.1.0:
|
||||
get-stream@^4.0.0, get-stream@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
|
||||
integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
|
||||
|
@ -3975,6 +4082,18 @@ glob@7.1.2, glob@^7.0.6, glob@^7.1.2:
|
|||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@7.1.3:
|
||||
version "7.1.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
|
||||
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^6.0.1, glob@^6.0.4:
|
||||
version "6.0.4"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
|
||||
|
@ -4181,9 +4300,9 @@ graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3,
|
|||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||
|
||||
graceful-fs@^4.2.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d"
|
||||
integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
|
||||
integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
|
||||
|
||||
"graceful-readlink@>= 1.0.0":
|
||||
version "1.0.1"
|
||||
|
@ -4198,6 +4317,11 @@ growl@1.10.3:
|
|||
version "1.10.3"
|
||||
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
|
||||
|
||||
growl@1.10.5:
|
||||
version "1.10.5"
|
||||
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
|
||||
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
|
||||
|
||||
grunt-cli@1.2.0, grunt-cli@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.2.0.tgz#562b119ebb069ddb464ace2845501be97b35b6a8"
|
||||
|
@ -4385,6 +4509,11 @@ has-symbol-support-x@^1.4.1:
|
|||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
|
||||
|
||||
has-symbols@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
|
||||
integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
|
||||
|
||||
has-to-string-tag-x@^1.2.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
|
||||
|
@ -4433,6 +4562,13 @@ has@^1.0.1:
|
|||
dependencies:
|
||||
function-bind "^1.0.2"
|
||||
|
||||
has@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
hash-base@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
|
||||
|
@ -4830,6 +4966,11 @@ invert-kv@^1.0.0:
|
|||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||
|
||||
invert-kv@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
|
||||
integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
|
||||
|
||||
ip-regex@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
|
||||
|
@ -4888,6 +5029,11 @@ is-buffer@^1.1.4, is-buffer@^1.1.5:
|
|||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||
|
||||
is-buffer@~2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
|
||||
integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
|
||||
|
||||
is-builtin-module@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
|
||||
|
@ -4898,6 +5044,11 @@ is-callable@^1.1.1, is-callable@^1.1.3:
|
|||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
|
||||
|
||||
is-callable@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
|
||||
integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
|
||||
|
||||
is-ci@^1.0.10:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
|
||||
|
@ -4957,6 +5108,11 @@ is-dotfile@^1.0.0:
|
|||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
|
||||
|
||||
is-electron-renderer@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz#a469d056f975697c58c98c6023eb0aa79af895a2"
|
||||
integrity sha1-pGnQVvl1aXxYyYxgI+sKp5r4laI=
|
||||
|
||||
is-equal-shallow@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
|
||||
|
@ -5155,6 +5311,13 @@ is-symbol@^1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
|
||||
|
||||
is-symbol@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
|
||||
integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
|
||||
dependencies:
|
||||
has-symbols "^1.0.0"
|
||||
|
||||
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||
|
@ -5618,6 +5781,13 @@ lcid@^1.0.0:
|
|||
dependencies:
|
||||
invert-kv "^1.0.0"
|
||||
|
||||
lcid@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
|
||||
integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
|
||||
dependencies:
|
||||
invert-kv "^2.0.0"
|
||||
|
||||
leven@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
|
||||
|
@ -5802,12 +5972,19 @@ lodash@~4.3.0:
|
|||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.3.0.tgz#efd9c4a6ec53f3b05412429915c3e4824e4d25a4"
|
||||
|
||||
log-symbols@^2.2.0:
|
||||
log-symbols@2.2.0, log-symbols@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
|
||||
log-symbols@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4"
|
||||
integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
|
||||
loglevel@^1.4.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
|
||||
|
@ -5906,6 +6083,13 @@ make-dir@^1.0.0:
|
|||
dependencies:
|
||||
pify "^2.3.0"
|
||||
|
||||
map-age-cleaner@^0.1.1:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
|
||||
integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
|
||||
dependencies:
|
||||
p-defer "^1.0.0"
|
||||
|
||||
map-cache@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
|
||||
|
@ -6000,6 +6184,15 @@ mem@^1.1.0:
|
|||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
mem@^4.0.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
|
||||
integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
|
||||
dependencies:
|
||||
map-age-cleaner "^0.1.1"
|
||||
mimic-fn "^2.0.0"
|
||||
p-is-promise "^2.0.0"
|
||||
|
||||
memoizee@0.4.14:
|
||||
version "0.4.14"
|
||||
resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57"
|
||||
|
@ -6161,6 +6354,11 @@ mimic-fn@^1.0.0:
|
|||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
|
||||
|
||||
mimic-fn@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
|
||||
|
||||
mimic-response@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e"
|
||||
|
@ -6190,7 +6388,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
|
||||
"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2:
|
||||
"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
dependencies:
|
||||
|
@ -6314,6 +6512,35 @@ mocha@4.1.0:
|
|||
mkdirp "0.5.1"
|
||||
supports-color "4.4.0"
|
||||
|
||||
mocha@~6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.0.tgz#f896b642843445d1bb8bca60eabd9206b8916e56"
|
||||
integrity sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==
|
||||
dependencies:
|
||||
ansi-colors "3.2.3"
|
||||
browser-stdout "1.3.1"
|
||||
debug "3.2.6"
|
||||
diff "3.5.0"
|
||||
escape-string-regexp "1.0.5"
|
||||
find-up "3.0.0"
|
||||
glob "7.1.3"
|
||||
growl "1.10.5"
|
||||
he "1.2.0"
|
||||
js-yaml "3.13.1"
|
||||
log-symbols "2.2.0"
|
||||
minimatch "3.0.4"
|
||||
mkdirp "0.5.1"
|
||||
ms "2.1.1"
|
||||
node-environment-flags "1.0.5"
|
||||
object.assign "4.1.0"
|
||||
strip-json-comments "2.0.1"
|
||||
supports-color "6.0.0"
|
||||
which "1.3.1"
|
||||
wide-align "1.1.3"
|
||||
yargs "13.2.2"
|
||||
yargs-parser "13.0.0"
|
||||
yargs-unparser "1.5.0"
|
||||
|
||||
modify-filename@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1"
|
||||
|
@ -6347,7 +6574,7 @@ ms@2.0.0:
|
|||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
|
||||
ms@^2.1.1:
|
||||
ms@2.1.1, ms@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
||||
|
@ -6475,6 +6702,14 @@ node-dir@^0.1.10:
|
|||
dependencies:
|
||||
minimatch "^3.0.2"
|
||||
|
||||
node-environment-flags@1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a"
|
||||
integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==
|
||||
dependencies:
|
||||
object.getownpropertydescriptors "^2.0.3"
|
||||
semver "^5.7.0"
|
||||
|
||||
node-fetch@^1.0.1, "node-fetch@https://github.com/scottnonnenberg-signal/node-fetch.git#3e5f51e08c647ee5f20c43b15cf2d352d61c36b4":
|
||||
version "1.7.3"
|
||||
resolved "https://github.com/scottnonnenberg-signal/node-fetch.git#3e5f51e08c647ee5f20c43b15cf2d352d61c36b4"
|
||||
|
@ -6801,6 +7036,11 @@ object-copy@^0.1.0:
|
|||
define-property "^0.2.5"
|
||||
kind-of "^3.0.3"
|
||||
|
||||
object-keys@^1.0.11, object-keys@^1.0.12:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
|
||||
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
||||
|
||||
object-keys@^1.0.8:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
|
||||
|
@ -6815,6 +7055,24 @@ object-visit@^1.0.0:
|
|||
dependencies:
|
||||
isobject "^3.0.0"
|
||||
|
||||
object.assign@4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
|
||||
integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
|
||||
dependencies:
|
||||
define-properties "^1.1.2"
|
||||
function-bind "^1.1.1"
|
||||
has-symbols "^1.0.0"
|
||||
object-keys "^1.0.11"
|
||||
|
||||
object.getownpropertydescriptors@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
|
||||
integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
|
||||
dependencies:
|
||||
define-properties "^1.1.2"
|
||||
es-abstract "^1.5.1"
|
||||
|
||||
object.omit@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
|
||||
|
@ -6925,6 +7183,15 @@ os-locale@^1.4.0:
|
|||
dependencies:
|
||||
lcid "^1.0.0"
|
||||
|
||||
os-locale@^3.0.0, os-locale@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
|
||||
integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
|
||||
dependencies:
|
||||
execa "^1.0.0"
|
||||
lcid "^2.0.0"
|
||||
mem "^4.0.0"
|
||||
|
||||
os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
@ -6952,6 +7219,11 @@ p-cancelable@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
|
||||
integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
|
||||
|
||||
p-defer@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
|
||||
integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
|
||||
|
||||
p-finally@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||
|
@ -6960,6 +7232,11 @@ p-is-promise@^1.1.0:
|
|||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
|
||||
|
||||
p-is-promise@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
|
||||
integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
|
||||
|
||||
p-limit@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
|
||||
|
@ -8890,7 +9167,7 @@ semver@^5.0.1:
|
|||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
||||
|
||||
semver@^5.1.0, semver@^5.5.0, semver@^5.6.0:
|
||||
semver@^5.1.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
@ -9417,6 +9694,13 @@ string-width@^1.0.1, string-width@^1.0.2:
|
|||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string-width@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
|
||||
|
@ -9424,13 +9708,6 @@ string-width@^2.0.0:
|
|||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
string-width@^2.1.0, string-width@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string-width@^3.0.0, string-width@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
|
||||
|
@ -9517,15 +9794,15 @@ strip-indent@^1.0.1:
|
|||
dependencies:
|
||||
get-stdin "^4.0.1"
|
||||
|
||||
strip-json-comments@2.0.1, strip-json-comments@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
|
||||
strip-json-comments@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
|
||||
integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
|
||||
|
||||
strip-json-comments@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
|
||||
style-loader@^0.20.3:
|
||||
version "0.20.3"
|
||||
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4"
|
||||
|
@ -9546,6 +9823,13 @@ supports-color@4.4.0, supports-color@^4.0.0:
|
|||
dependencies:
|
||||
has-flag "^2.0.0"
|
||||
|
||||
supports-color@6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
|
||||
integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
|
@ -10617,12 +10901,26 @@ which@1, which@^1.2.9, which@~1.2.1:
|
|||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
which@1.3.1, which@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
which@^1.2.10, which@^1.2.14, which@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
|
||||
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2"
|
||||
|
||||
wide-align@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
|
||||
|
@ -10762,7 +11060,7 @@ y18n@^3.2.1:
|
|||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||
|
||||
y18n@^4.0.0:
|
||||
"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
||||
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
|
||||
|
@ -10784,6 +11082,22 @@ yallist@^3.0.3:
|
|||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
|
||||
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
|
||||
|
||||
yargs-parser@13.0.0, yargs-parser@^13.0.0:
|
||||
version "13.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b"
|
||||
integrity sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^11.1.1:
|
||||
version "11.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
|
||||
integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^13.1.1:
|
||||
version "13.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
|
||||
|
@ -10810,6 +11124,32 @@ yargs-parser@^8.0.0:
|
|||
dependencies:
|
||||
camelcase "^4.1.0"
|
||||
|
||||
yargs-unparser@1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d"
|
||||
integrity sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==
|
||||
dependencies:
|
||||
flat "^4.1.0"
|
||||
lodash "^4.17.11"
|
||||
yargs "^12.0.5"
|
||||
|
||||
yargs@13.2.2:
|
||||
version "13.2.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993"
|
||||
integrity sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==
|
||||
dependencies:
|
||||
cliui "^4.0.0"
|
||||
find-up "^3.0.0"
|
||||
get-caller-file "^2.0.1"
|
||||
os-locale "^3.1.0"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^2.0.0"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^3.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^13.0.0"
|
||||
|
||||
yargs@6.6.0, yargs@^6.5.0:
|
||||
version "6.6.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
|
||||
|
@ -10846,6 +11186,24 @@ yargs@^10.0.3:
|
|||
y18n "^3.2.1"
|
||||
yargs-parser "^8.0.0"
|
||||
|
||||
yargs@^12.0.5:
|
||||
version "12.0.5"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
|
||||
integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
|
||||
dependencies:
|
||||
cliui "^4.0.0"
|
||||
decamelize "^1.2.0"
|
||||
find-up "^3.0.0"
|
||||
get-caller-file "^1.0.1"
|
||||
os-locale "^3.0.0"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^2.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^3.2.1 || ^4.0.0"
|
||||
yargs-parser "^11.1.1"
|
||||
|
||||
yargs@^13.3.0:
|
||||
version "13.3.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
|
||||
|
|
Loading…
Reference in a new issue