From 96c2eb476a0578c38acb6b7711ec27bcfdbe150f Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Mon, 30 Mar 2020 12:18:23 -0400 Subject: [PATCH 01/46] move the CPU backend to a top level package --- tfjs-backend-cpu/.npmignore | 27 + tfjs-backend-cpu/.npmrc | 1 + tfjs-backend-cpu/package.json | 76 + .../src}/backend_cpu.ts | 365 +- .../src}/backend_cpu_test.ts | 21 +- .../src}/backend_cpu_test_registry.ts | 3 +- .../cpu => tfjs-backend-cpu/src}/cpu_util.ts | 5 +- tfjs-backend-cpu/src/index.ts | 20 + .../src}/kernels/Div.ts | 2 +- .../src}/kernels/Div_impl.ts | 0 .../src}/kernels/NonMaxSuppressionV5.ts | 9 +- .../src}/kernels/Square.ts | 4 +- .../src}/kernels/SquaredDifference.ts | 2 +- .../src}/kernels/Transpose.ts | 6 +- .../src}/kernels/Transpose_impl.ts | 4 +- .../src}/register_all_kernels.ts | 2 +- .../src}/utils/kernel_utils.ts | 10 +- tfjs-backend-cpu/tsconfig.json | 12 + tfjs-backend-cpu/tslint.json | 3 + tfjs-backend-cpu/yarn.lock | 4455 +++++++++++++++++ tfjs-core/src/backends/kernel_impls.ts | 22 + .../src/backends/webgl/kernels/Transpose.ts | 3 +- .../backends/webgl/kernels/Transpose_impl.ts | 29 + tfjs-core/src/engine.ts | 6 +- tfjs-core/src/engine_test.ts | 314 +- tfjs-core/src/index.ts | 42 +- tfjs-core/src/setup_test.ts | 1 - tfjs-core/src/test_async_backends.ts | 114 +- tfjs-core/yarn.lock | 352 +- 29 files changed, 5274 insertions(+), 636 deletions(-) create mode 100644 tfjs-backend-cpu/.npmignore create mode 100644 tfjs-backend-cpu/.npmrc create mode 100644 tfjs-backend-cpu/package.json rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/backend_cpu.ts (92%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/backend_cpu_test.ts (89%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/backend_cpu_test_registry.ts (86%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/cpu_util.ts (91%) create mode 100644 tfjs-backend-cpu/src/index.ts rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/kernels/Div.ts (95%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/kernels/Div_impl.ts (100%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/kernels/NonMaxSuppressionV5.ts (87%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/kernels/Square.ts (92%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/kernels/SquaredDifference.ts (94%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/kernels/Transpose.ts (90%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/kernels/Transpose_impl.ts (92%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/register_all_kernels.ts (95%) rename {tfjs-core/src/backends/cpu => tfjs-backend-cpu/src}/utils/kernel_utils.ts (92%) create mode 100644 tfjs-backend-cpu/tsconfig.json create mode 100644 tfjs-backend-cpu/tslint.json create mode 100644 tfjs-backend-cpu/yarn.lock create mode 100644 tfjs-core/src/backends/kernel_impls.ts diff --git a/tfjs-backend-cpu/.npmignore b/tfjs-backend-cpu/.npmignore new file mode 100644 index 00000000000..6292b5fdb8a --- /dev/null +++ b/tfjs-backend-cpu/.npmignore @@ -0,0 +1,27 @@ +.babelrc +.DS_Store +.idea/ +.rpt2_cache +.travis.yml +.vscode +*.tgz +*.txt +**.yalc +**yalc.lock +cloudbuild.yml +coverage/ +demo/ +dist/**/*_test.d.ts +dist/**/*_test.js +karma.conf.js +node_modules/ +npm-debug.log +package-lock.json +package/ +rollup.config.js +scripts/ +src/**/*_test.ts +tsconfig.json +tslint.json +yarn-error.log +yarn.lock diff --git a/tfjs-backend-cpu/.npmrc b/tfjs-backend-cpu/.npmrc new file mode 100644 index 00000000000..43c97e719a5 --- /dev/null +++ b/tfjs-backend-cpu/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json new file mode 100644 index 00000000000..eb9dc4e5cb5 --- /dev/null +++ b/tfjs-backend-cpu/package.json @@ -0,0 +1,76 @@ +{ + "name": "@tensorflow/tfjs-backend-cpu", + "version": "0.0.0", + "description": "Vanilla JavaScript backend for TensorFlow.js", + "private": false, + "main": "dist/index.js", + "jsdelivr": "dist/tf-backend-cpu.min.js", + "unpkg": "dist/tf-backend-cpu.min.js", + "types": "dist/index.d.ts", + "jsnext:main": "dist/tf-backend-cpu.esm.js", + "module": "dist/tf-backend-cpu.esm.js", + "engines": { + "yarn": ">= 1.3.2" + }, + "repository": { + "type": "git", + "url": "https://github.com/tensorflow/tfjs.git" + }, + "license": "Apache-2.0", + "devDependencies": { + "@tensorflow/tfjs-core": "link:../tfjs-core", + "@types/jasmine": "~3.0.0", + "browserify": "~16.2.3", + "clang-format": "~1.2.4", + "jasmine": "~3.1.0", + "jasmine-core": "~3.1.0", + "karma": "~4.2.0", + "karma-browserify": "~6.0.0", + "karma-browserstack-launcher": "~1.4.0", + "karma-chrome-launcher": "~2.2.0", + "karma-jasmine": "~1.1.0", + "karma-typescript": "~4.1.1", + "npm-run-all": "~4.1.3", + "rimraf": "~2.6.2", + "rollup": "~1.9.0", + "rollup-plugin-commonjs": "~9.3.4", + "rollup-plugin-node-resolve": "~3.4.0", + "rollup-plugin-terser": "~5.1.3", + "rollup-plugin-typescript2": "~0.20.1", + "rollup-plugin-visualizer": "~1.1.1", + "shelljs": "~0.8.3", + "ts-node": "~7.0.0", + "tslint": "~5.11.0", + "tslint-no-circular-imports": "~0.5.0", + "typescript": "3.5.3", + "watchify": "~3.11.1", + "yalc": "~1.0.0-pre.21" + }, + "scripts": { + "build-ci": "tsc", + "build": "tsc", + "build-core": "cd ../tfjs-core && yarn && yarn build", + "build-npm": "./scripts/build-npm.sh", + "link-local": "yalc link", + "publish-local": "rimraf dist/ && yarn build && rollup -c && yalc push", + "publish-npm": "npm publish", + "lint": "tslint -p . -t verbose", + "test": "karma start", + "run-browserstack": "karma start --browserstack", + "test-async-backends": "rimraf dist/ && tsc && node dist/test_async_backends.js", + "test-async-backends-ci": "node dist/test_async_backends.js", + "test-integration": "yarn && ./scripts/test-integration.js", + "test-ci": "./scripts/test-ci.sh" + }, + "dependencies": { + "@types/seedrandom": "2.4.27", + "seedrandom": "2.4.3" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "link:../tfjs-core" + }, + "browser": { + "util": false, + "crypto": false + } +} diff --git a/tfjs-core/src/backends/cpu/backend_cpu.ts b/tfjs-backend-cpu/src/backend_cpu.ts similarity index 92% rename from tfjs-core/src/backends/cpu/backend_cpu.ts rename to tfjs-backend-cpu/src/backend_cpu.ts index 42d88224ce3..a1d7212f3fc 100644 --- a/tfjs-core/src/backends/cpu/backend_cpu.ts +++ b/tfjs-backend-cpu/src/backend_cpu.ts @@ -15,44 +15,25 @@ * ============================================================================= */ +import * as tf from '@tensorflow/tfjs-core'; +import {engine, env} from '@tensorflow/tfjs-core'; +import {array_ops_util, axis_util, backend_util, broadcast_util, complex_util, concat_util, conv_util, erf_util, fused_util, gather_nd_util, log_util, scatter_nd_util, selu_util, slice_util, util} from '@tensorflow/tfjs-core'; +import {BackendTimingInfo, DataStorage, DataType, DataValues, KernelBackend, NumericDataType, Rank, Scalar, ShapeMap, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, TensorBuffer, TypedArray, upcastType} from '@tensorflow/tfjs-core'; +import {kernel_impls} from '@tensorflow/tfjs-core'; +const nonMaxSuppressionV3 = kernel_impls.nonMaxSuppressionV3; +const split = kernel_impls.split; +const tile = kernel_impls.tile; +const topkImpl = kernel_impls.topkImpl; +const whereImpl = kernel_impls.whereImpl; +// tslint:disable-next-line: no-imports-from-dist +import {EPSILON_FLOAT32} from '@tensorflow/tfjs-core/dist/backends/backend'; import * as seedrandom from 'seedrandom'; - -import {ENGINE} from '../../engine'; -import {env} from '../../environment'; -import {warn} from '../../log'; -import * as array_ops_util from '../../ops/array_ops_util'; -import * as axis_util from '../../ops/axis_util'; -import * as broadcast_util from '../../ops/broadcast_util'; -import {complex, imag, real} from '../../ops/complex_ops'; -import * as concat_util from '../../ops/concat_util'; -import {Conv2DInfo, Conv3DInfo} from '../../ops/conv_util'; -import {div} from '../../ops/div'; -import * as erf_util from '../../ops/erf_util'; -import {Activation, FusedBatchMatMulConfig, FusedConv2DConfig} from '../../ops/fused_util'; -import * as gather_nd_util from '../../ops/gather_nd_util'; -import * as ops from '../../ops/ops'; -import {buffer, scalar, tensor, tensor4d} from '../../ops/ops'; -import * as scatter_nd_util from '../../ops/scatter_nd_util'; -import * as selu_util from '../../ops/selu_util'; -import {computeFlatOffset, computeOutShape, isSliceContinous} from '../../ops/slice_util'; -import {transpose} from '../../ops/transpose'; -import {DataId, Scalar, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, TensorBuffer} from '../../tensor'; -import {BackendValues, DataType, DataValues, NumericDataType, Rank, ShapeMap, TypedArray, upcastType} from '../../types'; -import * as util from '../../util'; -import {getArrayFromDType, inferDtype, now, sizeFromShape} from '../../util'; -import {BackendTimingInfo, DataStorage, EPSILON_FLOAT32, KernelBackend} from '../backend'; -import * as backend_util from '../backend_util'; -import * as complex_util from '../complex_util'; -import {nonMaxSuppressionV3} from '../non_max_suppression_impl'; -import {split} from '../split_shared'; -import {tile} from '../tile_impl'; -import {topkImpl} from '../topk_impl'; -import {whereImpl} from '../where_impl'; - import {assertNotComplex} from './cpu_util'; +interface DataId {} + function mapActivation( - backend: MathBackendCPU, x: Tensor, activation: Activation, + backend: MathBackendCPU, x: Tensor, activation: fused_util.Activation, preluActivationWeights?: Tensor): Tensor { if (activation === 'linear') { return backend.linear(x); @@ -70,7 +51,7 @@ function mapActivation( } export interface TensorData { - values?: BackendValues; + values?: backend_util.BackendValues; dtype: D; // For complex numbers, the real and imaginary parts are stored as their own // individual tensors, with a parent joining the two with the @@ -88,14 +69,15 @@ export class MathBackendCPU extends KernelBackend { constructor() { super(); - this.data = new DataStorage(this, ENGINE); + // this.data = new DataStorage(this, engine()); } - write(values: BackendValues, shape: number[], dtype: DataType): DataId { + write(values: backend_util.BackendValues, shape: number[], dtype: DataType): + DataId { if (this.firstUse) { this.firstUse = false; if (env().get('IS_NODE')) { - warn( + log_util.warn( '\n============================\n' + 'Hi there 👋. Looks like you are running TensorFlow.js in ' + 'Node.js. To speed things up dramatically, install our node ' + @@ -113,8 +95,9 @@ export class MathBackendCPU extends KernelBackend { return dataId; } - move(dataId: DataId, values: BackendValues, shape: number[], dtype: DataType): - void { + move( + dataId: DataId, values: backend_util.BackendValues, shape: number[], + dtype: DataType): void { this.data.set(dataId, {values, dtype}); } @@ -122,10 +105,10 @@ export class MathBackendCPU extends KernelBackend { return this.data.numDataIds(); } - async read(dataId: DataId): Promise { + async read(dataId: DataId): Promise { return this.readSync(dataId); } - readSync(dataId: DataId): BackendValues { + readSync(dataId: DataId): backend_util.BackendValues { const {dtype, complexTensors} = this.data.get(dataId); if (dtype === 'complex64') { const realValues = @@ -148,13 +131,13 @@ export class MathBackendCPU extends KernelBackend { throw new Error('Failed to decode encoded string bytes into utf-8'); } } - return buffer(t.shape, t.dtype, decodedData) as TensorBuffer; + return tf.buffer(t.shape, t.dtype, decodedData) as TensorBuffer; } private makeOutput( - values: BackendValues, shape: number[], dtype: DataType): T { + values: backend_util.BackendValues, shape: number[], dtype: DataType): T { const dataId = this.write(values, shape, dtype); - return ENGINE.makeTensorFromDataId(dataId, shape, dtype, this) as T; + return engine().makeTensorFromDataId(dataId, shape, dtype, this) as T; } disposeData(dataId: DataId): void { @@ -169,9 +152,9 @@ export class MathBackendCPU extends KernelBackend { } async time(f: () => void): Promise { - const start = now(); + const start = util.now(); f(); - const kernelMs = now() - start; + const kernelMs = util.now() - start; return {kernelMs}; } @@ -193,8 +176,8 @@ export class MathBackendCPU extends KernelBackend { // clones. These will explicitly get disposed when the complex tensor is // disposed. resultData.complexTensors = { - real: ENGINE.keep(real.clone()), - imag: ENGINE.keep(imag.clone()) + real: engine().keep(real.clone()), + imag: engine().keep(imag.clone()) }; return result as T; @@ -211,17 +194,17 @@ export class MathBackendCPU extends KernelBackend { slice(x: T, begin: number[], size: number[]): T { assertNotComplex(x, 'slice'); - const isContinous = isSliceContinous(x.shape, begin, size); + const isContinous = slice_util.isSliceContinous(x.shape, begin, size); if (isContinous) { - const flatOffset = computeFlatOffset(begin, x.strides); + const flatOffset = slice_util.computeFlatOffset(begin, x.strides); const length = util.sizeFromShape(size); const vals = this.readSync(x.dataId) as TypedArray; - return tensor( + return tf.tensor( vals.subarray(flatOffset, flatOffset + length), size, x.dtype) as T; } - const buffer = ops.buffer(size, x.dtype); + const buffer = tf.buffer(size, x.dtype); const xBuf = this.bufferSync(x); for (let i = 0; i < buffer.size; ++i) { const loc = buffer.indexToLoc(i); @@ -235,13 +218,13 @@ export class MathBackendCPU extends KernelBackend { x: T, begin: number[], end: number[], strides: number[]): T { assertNotComplex(x, 'stridedSlice'); - const outShape = computeOutShape(begin, end, strides); + const outShape = slice_util.computeOutShape(begin, end, strides); if (outShape.some(axis => axis === 0)) { - return ops.tensor([], outShape) as T; + return tf.tensor([], outShape) as T; } - const buffer = ops.buffer(outShape, x.dtype); + const buffer = tf.buffer(outShape, x.dtype); const xBuf = this.bufferSync(x); for (let i = 0; i < buffer.size; i++) { const loc = buffer.indexToLoc(i); @@ -258,7 +241,7 @@ export class MathBackendCPU extends KernelBackend { diag(x: Tensor): Tensor { const xVals = this.readSync(x.dataId) as TypedArray; - const buffer = ops.buffer([x.size, x.size], x.dtype); + const buffer = tf.buffer([x.size, x.size], x.dtype); const vals = buffer.values; for (let i = 0; i < xVals.length; i++) { vals[i * x.size + i] = xVals[i]; @@ -290,7 +273,7 @@ export class MathBackendCPU extends KernelBackend { reverse(x: T, axis: number[]): T { assertNotComplex(x, 'reverse'); - const buffer = ops.buffer(x.shape, x.dtype); + const buffer = tf.buffer(x.shape, x.dtype); const xBuf = this.bufferSync(x); for (let i = 0; i < buffer.size; i++) { @@ -305,18 +288,19 @@ export class MathBackendCPU extends KernelBackend { concat(tensors: Tensor[], axis: number): Tensor { if (tensors[0].dtype === 'complex64') { - const reals = tensors.map((t) => real(t)); - const imags = tensors.map((t) => imag(t)); - return complex(this.concat(reals, axis), this.concat(imags, axis)); + const reals = tensors.map((t) => tf.real(t)); + const imags = tensors.map((t) => tf.imag(t)); + return tf.complex(this.concat(reals, axis), this.concat(imags, axis)); } const tensors2D = tensors.map(t => { const innerSize = util.sizeFromShape(t.shape.slice(axis)); return t.as2D(-1, innerSize); }); const outShape = - concat_util.computeOutShape(tensors2D.map(t => t.shape), 1 /* axis */); + concat_util.computeOutShape(tensors2D.map(t => t.shape), 1 /* axis + */); const values = - ops.buffer(outShape as [number, number], tensors[0].dtype as 'float32') + tf.buffer(outShape as [number, number], tensors[0].dtype as 'float32') .values; if (tensors2D[0].shape[0] === 1) { // Use built-in TypedArray.set() method for speed. @@ -341,13 +325,13 @@ export class MathBackendCPU extends KernelBackend { } const finalOutShape = concat_util.computeOutShape(tensors.map(t => t.shape), axis); - return tensor(values, finalOutShape, tensors[0].dtype); + return tf.tensor(values, finalOutShape, tensors[0].dtype); } neg(x: T): T { assertNotComplex(x, 'neg'); - return this.multiply(ops.scalar(-1), x) as T; + return this.multiply(tf.scalar(-1), x) as T; } add(a: Tensor, b: Tensor): Tensor { @@ -368,7 +352,7 @@ export class MathBackendCPU extends KernelBackend { assertNotComplex(tensors, 'addN'); const vals = tensors.map(t => this.readSync(t.dataId) as TypedArray); - const result = ops.buffer(tensors[0].shape, tensors[0].dtype as 'float32'); + const result = tf.buffer(tensors[0].shape, tensors[0].dtype as 'float32'); const resultVals = result.values; for (let i = 0; i < tensors.length; i++) { const currVals = vals[i]; @@ -387,9 +371,9 @@ export class MathBackendCPU extends KernelBackend { const b = this.exp(a); const sumExp = this.sum(b, axes).reshape(expandedShape); - // TODO(annxingyuan): Call divImpl rather than op as part of softmax kernel - // modularization. - return div(b, sumExp); + // TODO(annxingyuan): Call divImpl rather than op as part of softmax + // kernel modularization. + return tf.div(b, sumExp); } subtract(a: Tensor, b: Tensor): Tensor { @@ -434,7 +418,7 @@ export class MathBackendCPU extends KernelBackend { [b.strides[1], 1, b.strides[0]]; const size = leftDim * rightDim; - const result = buffer([batchDim, leftDim, rightDim], a.dtype); + const result = tf.buffer([batchDim, leftDim, rightDim], a.dtype); const resVals = result.values as TypedArray; const blockSize = this.blockSize; @@ -467,7 +451,7 @@ export class MathBackendCPU extends KernelBackend { fusedBatchMatMul( {a, b, transposeA, transposeB, bias, activation, preluActivationWeights}: - FusedBatchMatMulConfig): Tensor3D { + fused_util.FusedBatchMatMulConfig): Tensor3D { let result = this.batchMatMul(a, b, transposeA, transposeB); if (bias) { result = this.add(result, bias) as Tensor3D; @@ -512,7 +496,7 @@ export class MathBackendCPU extends KernelBackend { const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); const resultDtype = upcastType(x.dtype, 'int32'); - const result = ops.zeros(outShape, resultDtype); + const result = tf.zeros(outShape, resultDtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -534,7 +518,7 @@ export class MathBackendCPU extends KernelBackend { const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); const resultDtype = upcastType(x.dtype, 'int32'); - const result = ops.zeros(outShape, resultDtype); + const result = tf.zeros(outShape, resultDtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -564,13 +548,13 @@ export class MathBackendCPU extends KernelBackend { } for (let i = 0; i < numSegments; ++i) { - const segmentId = ops.scalar(i, 'int32'); - const mask = ops.equal(segmentId, segmentIds).asType('float32'); + const segmentId = tf.scalar(i, 'int32'); + const mask = tf.equal(segmentId, segmentIds).asType('float32'); const sum = mask.mul(x).sum(0); res.push(sum); } - return ops.stack(res); + return tf.stack(res); } argMin(x: Tensor, axis: number): Tensor { @@ -580,7 +564,7 @@ export class MathBackendCPU extends KernelBackend { axis_util.assertAxesAreInnerMostDims('argMin', axes, x.rank); const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); - const result = ops.zeros(outShape, 'int32'); + const result = tf.zeros(outShape, 'int32'); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -608,7 +592,7 @@ export class MathBackendCPU extends KernelBackend { axis_util.assertAxesAreInnerMostDims('argMax', axes, x.rank); const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); - const result = ops.zeros(outShape, 'int32'); + const result = tf.zeros(outShape, 'int32'); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -639,7 +623,7 @@ export class MathBackendCPU extends KernelBackend { `but got axis=${axis}`); } const resultDtype = upcastType(x.dtype, 'int32'); - const result = ops.zeros(x.shape, resultDtype); + const result = tf.zeros(x.shape, resultDtype); const vals = this.readSync(result.dataId) as TypedArray; const aVals = this.readSync(x.dataId) as TypedArray; @@ -743,7 +727,7 @@ export class MathBackendCPU extends KernelBackend { const values = this.readSync(condition.dataId) as TypedArray; const aValues = this.readSync(a.dataId) as TypedArray; const bValues = this.readSync(b.dataId) as TypedArray; - const result = ops.zeros(a.shape, upcastType(a.dtype, b.dtype)); + const result = tf.zeros(a.shape, upcastType(a.dtype, b.dtype)); const newValues = this.readSync(result.dataId) as TypedArray; let index = 0; const offset = condition.rank === 0 || condition.rank > 1 || a.rank === 1 ? @@ -783,7 +767,7 @@ export class MathBackendCPU extends KernelBackend { axis_util.assertAxesAreInnerMostDims('min', axes, x.rank); const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); - const result = ops.zeros(outShape, x.dtype); + const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -828,7 +812,7 @@ export class MathBackendCPU extends KernelBackend { axis_util.assertAxesAreInnerMostDims('max', axes, x.rank); const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); - const result = ops.zeros(outShape, x.dtype); + const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -860,7 +844,7 @@ export class MathBackendCPU extends KernelBackend { axis_util.assertAxesAreInnerMostDims('all', axes, x.rank); const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); - const result = ops.zeros(outShape, x.dtype); + const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -883,7 +867,7 @@ export class MathBackendCPU extends KernelBackend { axis_util.assertAxesAreInnerMostDims('any', axes, x.rank); const [outShape, reduceShape] = axis_util.computeOutAndReduceShapes(x.shape, axes); - const result = ops.zeros(outShape, x.dtype); + const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -1098,7 +1082,7 @@ export class MathBackendCPU extends KernelBackend { relu(x: T): T { assertNotComplex(x, 'relu'); - const res = ops.zeros(x.shape, x.dtype); + const res = tf.zeros(x.shape, x.dtype); const resVals = this.readSync(res.dataId) as TypedArray; const inVals = this.readSync(x.dataId) as TypedArray; for (let i = 0; i < inVals.length; ++i) { @@ -1110,7 +1094,7 @@ export class MathBackendCPU extends KernelBackend { relu6(x: T): T { assertNotComplex(x, 'relu'); - const res = ops.zeros(x.shape, x.dtype); + const res = tf.zeros(x.shape, x.dtype); const resVals = this.readSync(res.dataId) as TypedArray; const inVals = this.readSync(x.dataId) as TypedArray; for (let i = 0; i < inVals.length; ++i) { @@ -1456,7 +1440,7 @@ export class MathBackendCPU extends KernelBackend { fusedConv2d( {input, filter, convInfo, bias, activation, preluActivationWeights}: - FusedConv2DConfig): Tensor4D { + fused_util.FusedConv2DConfig): Tensor4D { let result = this.conv2d(input, filter, convInfo); if (bias) { @@ -1470,7 +1454,8 @@ export class MathBackendCPU extends KernelBackend { return result; } - conv2d(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D { + conv2d(x: Tensor4D, filter: Tensor4D, convInfo: conv_util.Conv2DInfo): + Tensor4D { assertNotComplex([x, filter], 'conv2d'); const filterHeight = convInfo.filterHeight; @@ -1481,7 +1466,7 @@ export class MathBackendCPU extends KernelBackend { const padTop = convInfo.padInfo.top; const isChannelsLast = convInfo.dataFormat === 'channelsLast'; - const y = ops.buffer(convInfo.outShape, x.dtype as 'float32'); + const y = tf.buffer(convInfo.outShape, x.dtype as 'float32'); const xBatchStride = x.strides[0]; const xRowStride = isChannelsLast ? x.strides[1] : x.strides[2]; @@ -1536,7 +1521,8 @@ export class MathBackendCPU extends KernelBackend { return y.toTensor() as Tensor4D; } - conv3d(x: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo): Tensor5D { + conv3d(x: Tensor5D, filter: Tensor5D, convInfo: conv_util.Conv3DInfo): + Tensor5D { const filterDepth = convInfo.filterDepth; const filterHeight = convInfo.filterHeight; const filterWidth = convInfo.filterWidth; @@ -1546,7 +1532,7 @@ export class MathBackendCPU extends KernelBackend { const padFront = convInfo.padInfo.front; const padLeft = convInfo.padInfo.left; const padTop = convInfo.padInfo.top; - const y = ops.buffer(convInfo.outShape, x.dtype as 'float32'); + const y = tf.buffer(convInfo.outShape, x.dtype as 'float32'); const xVals = this.readSync(x.dataId) as TypedArray; const wVals = this.readSync(filter.dataId) as TypedArray; @@ -1604,11 +1590,12 @@ export class MathBackendCPU extends KernelBackend { return y.toTensor(); } - conv2dDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): - Tensor4D { + conv2dDerInput( + dy: Tensor4D, filter: Tensor4D, + convInfo: conv_util.Conv2DInfo): Tensor4D { assertNotComplex([dy, filter], 'conv2dDerInput'); - const dx = ops.buffer(convInfo.inShape, 'float32'); + const dx = tf.buffer(convInfo.inShape, 'float32'); const dxValues = dx.values; const dyValues = this.readSync(dy.dataId) as TypedArray; const fltValues = this.readSync(filter.dataId) as TypedArray; @@ -1682,9 +1669,10 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - conv3dDerInput(dy: Tensor5D, filter: Tensor5D, convInfo: Conv3DInfo): - Tensor5D { - const dx = ops.buffer(convInfo.inShape, 'float32'); + conv3dDerInput( + dy: Tensor5D, filter: Tensor5D, + convInfo: conv_util.Conv3DInfo): Tensor5D { + const dx = tf.buffer(convInfo.inShape, 'float32'); const dxValues = dx.values; const [dxS0, dxS1, dxS2, dxS3] = dx.strides; const dyValues = this.readSync(dy.dataId) as TypedArray; @@ -1767,7 +1755,8 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo): Tensor4D { + conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: conv_util.Conv2DInfo): + Tensor4D { assertNotComplex([x, dy], 'conv2dDerFilter'); const strideHeight = convInfo.strideHeight; @@ -1775,7 +1764,7 @@ export class MathBackendCPU extends KernelBackend { const filterHeight = convInfo.filterHeight; const filterWidth = convInfo.filterWidth; const isChannelsLast = convInfo.dataFormat === 'channelsLast'; - const dW = ops.buffer(convInfo.filterShape, 'float32'); + const dW = tf.buffer(convInfo.filterShape, 'float32'); const leftPad = convInfo.padInfo.left; const topPad = convInfo.padInfo.top; @@ -1818,7 +1807,8 @@ export class MathBackendCPU extends KernelBackend { return dW.toTensor(); } - conv3dDerFilter(x: Tensor5D, dy: Tensor5D, convInfo: Conv3DInfo): Tensor5D { + conv3dDerFilter(x: Tensor5D, dy: Tensor5D, convInfo: conv_util.Conv3DInfo): + Tensor5D { const strideDepth = convInfo.strideDepth; const strideHeight = convInfo.strideHeight; const strideWidth = convInfo.strideWidth; @@ -1826,7 +1816,7 @@ export class MathBackendCPU extends KernelBackend { const filterHeight = convInfo.filterHeight; const filterWidth = convInfo.filterWidth; - const dw = ops.buffer(convInfo.filterShape, 'float32'); + const dw = tf.buffer(convInfo.filterShape, 'float32'); const dwValues = dw.values; const [dwS0, dwS1, dwS2, dwS3] = dw.strides; const dyValues = this.readSync(dy.dataId) as TypedArray; @@ -1899,7 +1889,7 @@ export class MathBackendCPU extends KernelBackend { fusedDepthwiseConv2D( {input, filter, convInfo, bias, activation, preluActivationWeights}: - FusedConv2DConfig): Tensor4D { + fused_util.FusedConv2DConfig): Tensor4D { let result = this.depthwiseConv2D(input, filter, convInfo); if (bias) { @@ -1913,8 +1903,8 @@ export class MathBackendCPU extends KernelBackend { return result; } - depthwiseConv2D(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): - Tensor4D { + depthwiseConv2D( + x: Tensor4D, filter: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { assertNotComplex([x, filter], 'depthwiseConv2D'); const filterHeight = convInfo.filterHeight; @@ -1924,7 +1914,7 @@ export class MathBackendCPU extends KernelBackend { const padLeft = convInfo.padInfo.left; const padTop = convInfo.padInfo.top; const chMul = convInfo.outChannels / convInfo.inChannels; - const y = ops.buffer(convInfo.outShape, x.dtype as 'float32'); + const y = tf.buffer(convInfo.outShape, x.dtype as 'float32'); const xVals = this.readSync(x.dataId) as TypedArray; const wVals = this.readSync(filter.dataId) as TypedArray; const yVals = y.values; @@ -1971,11 +1961,12 @@ export class MathBackendCPU extends KernelBackend { return y.toTensor() as Tensor4D; } - depthwiseConv2DDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): - Tensor4D { + depthwiseConv2DDerInput( + dy: Tensor4D, filter: Tensor4D, + convInfo: conv_util.Conv2DInfo): Tensor4D { assertNotComplex([dy, filter], 'depthwiseConv2DDerInput'); - const dx = ops.buffer(convInfo.inShape, 'float32'); + const dx = tf.buffer(convInfo.inShape, 'float32'); const dxValues = dx.values; const [dxS0, dxS1, dxS2] = dx.strides; const dyValues = this.readSync(dy.dataId) as TypedArray; @@ -2039,15 +2030,15 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - depthwiseConv2DDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo): - Tensor4D { + depthwiseConv2DDerFilter( + x: Tensor4D, dy: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { assertNotComplex([x, dy], 'depthwiseConv2DDerFilter'); const strideHeight = convInfo.strideHeight; const strideWidth = convInfo.strideWidth; const filterHeight = convInfo.filterHeight; const filterWidth = convInfo.filterWidth; - const dW = ops.buffer(convInfo.filterShape, 'float32'); + const dW = tf.buffer(convInfo.filterShape, 'float32'); const leftPad = convInfo.padInfo.left; const topPad = convInfo.padInfo.top; @@ -2099,7 +2090,7 @@ export class MathBackendCPU extends KernelBackend { (p, i) => p[0] /* beforePad */ + x.shape[i] + p[1] /* afterPad */); const start = paddings.map(p => p[0]); const xBuffer = this.bufferSync(x); - const buffer = ops.buffer(outShape, x.dtype as 'float32'); + const buffer = tf.buffer(outShape, x.dtype as 'float32'); if (constantValue !== 0) { buffer.values.fill(constantValue); } @@ -2118,7 +2109,7 @@ export class MathBackendCPU extends KernelBackend { const newShape: number[] = x.shape.slice(); const indicesValues = this.readSync(indices.dataId) as TypedArray; newShape[axis] = indicesValues.length; - const result = buffer(newShape, x.dtype); + const result = tf.buffer(newShape, x.dtype); const xBuf = this.bufferSync(x); for (let i = 0; i < result.size; ++i) { @@ -2149,7 +2140,7 @@ export class MathBackendCPU extends KernelBackend { const sliceSize = array_ops_util.getSliceSize(reshapedPermuted, crops, blockShape.length); - return transpose(x.reshape(reshaped), permuted) + return tf.transpose(x.reshape(reshaped), permuted) .reshape(reshapedPermuted) .slice(sliceBeginCoords, sliceSize) as T; } @@ -2175,14 +2166,15 @@ export class MathBackendCPU extends KernelBackend { const flattenShape = array_ops_util.getReshapedPermuted( paddedX.shape, blockShape, prod, false); - return transpose( - paddedX.reshape(reshapedPaddedShape), - permutedReshapedPaddedPermutation) + return tf.transpose( + paddedX.reshape(reshapedPaddedShape), + permutedReshapedPaddedPermutation) .reshape(flattenShape) as T; } - private pool(x: Tensor4D, convInfo: Conv2DInfo, poolType: 'max'|'avg'): - Tensor4D { + private pool( + x: Tensor4D, convInfo: conv_util.Conv2DInfo, + poolType: 'max'|'avg'): Tensor4D { assertNotComplex(x, 'pool'); const strideHeight = convInfo.strideHeight; @@ -2199,7 +2191,7 @@ export class MathBackendCPU extends KernelBackend { Number.POSITIVE_INFINITY); const xValues = this.readSync(x.dataId) as TypedArray; - const output = ops.buffer(convInfo.outShape, x.dtype); + const output = tf.buffer(convInfo.outShape, x.dtype); const outputVals = output.values; const outputBatchStrides = @@ -2251,12 +2243,13 @@ export class MathBackendCPU extends KernelBackend { return output.toTensor() as Tensor4D; } - maxPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D { + maxPool(x: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { return this.pool(x, convInfo, 'max'); } - private maxPoolPositions(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D { - const maxPositions = ops.buffer(convInfo.outShape, 'int32'); + private maxPoolPositions(x: Tensor4D, convInfo: conv_util.Conv2DInfo): + Tensor4D { + const maxPositions = tf.buffer(convInfo.outShape, 'int32'); const strideHeight = convInfo.strideHeight; const strideWidth = convInfo.strideWidth; const dilationHeight = convInfo.dilationHeight; @@ -2308,8 +2301,9 @@ export class MathBackendCPU extends KernelBackend { return maxPositions.toTensor() as Tensor4D; } - maxPoolBackprop(dy: Tensor4D, x: Tensor4D, y: Tensor4D, convInfo: Conv2DInfo): - Tensor4D { + maxPoolBackprop( + dy: Tensor4D, x: Tensor4D, y: Tensor4D, + convInfo: conv_util.Conv2DInfo): Tensor4D { assertNotComplex([x, y], 'maxPoolBackprop'); const maxPositions = this.maxPoolPositions(x, convInfo); @@ -2321,7 +2315,7 @@ export class MathBackendCPU extends KernelBackend { const effectiveFilterWidth = convInfo.effectiveFilterWidth; const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; - const dx = ops.buffer(x.shape, 'float32'); + const dx = tf.buffer(x.shape, 'float32'); const maxPosBuf = this.bufferSync(maxPositions); const dyBuf = this.bufferSync(dy); @@ -2367,7 +2361,8 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - avgPoolBackprop(dy: Tensor4D, x: Tensor4D, convInfo: Conv2DInfo): Tensor4D { + avgPoolBackprop(dy: Tensor4D, x: Tensor4D, convInfo: conv_util.Conv2DInfo): + Tensor4D { assertNotComplex([dy, x], 'avgPoolBackprop'); const strideHeight = convInfo.strideHeight; @@ -2380,7 +2375,7 @@ export class MathBackendCPU extends KernelBackend { const effectiveFilterWidth = convInfo.effectiveFilterWidth; const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; - const dx = ops.buffer(x.shape, 'float32'); + const dx = tf.buffer(x.shape, 'float32'); const avgMultiplier = 1 / (filterHeight * filterWidth); @@ -2419,8 +2414,9 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - private pool3d(x: Tensor5D, convInfo: Conv3DInfo, poolType: 'max'|'avg'): - Tensor5D { + private pool3d( + x: Tensor5D, convInfo: conv_util.Conv3DInfo, + poolType: 'max'|'avg'): Tensor5D { assertNotComplex(x, 'pool3d'); const strideDepth = convInfo.strideDepth; @@ -2441,7 +2437,7 @@ export class MathBackendCPU extends KernelBackend { Number.POSITIVE_INFINITY); const xValues = this.readSync(x.dataId) as TypedArray; - const output = ops.buffer(convInfo.outShape, x.dtype); + const output = tf.buffer(convInfo.outShape, x.dtype); const outputVals = output.values; const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] * @@ -2526,13 +2522,14 @@ export class MathBackendCPU extends KernelBackend { return output.toTensor() as Tensor5D; } - avgPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D { + avgPool3d(x: Tensor5D, convInfo: conv_util.Conv3DInfo): Tensor5D { assertNotComplex(x, 'avgPool3d'); return this.pool3d(x, convInfo, 'avg').toFloat(); } - avgPool3dBackprop(dy: Tensor5D, x: Tensor5D, convInfo: Conv3DInfo): Tensor5D { + avgPool3dBackprop(dy: Tensor5D, x: Tensor5D, convInfo: conv_util.Conv3DInfo): + Tensor5D { assertNotComplex([dy, x], 'avgPool3dBackprop'); const strideDepth = convInfo.strideDepth; @@ -2550,7 +2547,7 @@ export class MathBackendCPU extends KernelBackend { const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; - const dx = ops.buffer(x.shape, 'float32'); + const dx = tf.buffer(x.shape, 'float32'); const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth); @@ -2605,14 +2602,15 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - maxPool3d(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D { + maxPool3d(x: Tensor5D, convInfo: conv_util.Conv3DInfo): Tensor5D { assertNotComplex(x, 'maxPool3d'); return this.pool3d(x, convInfo, 'max').toFloat(); } - private maxPool3dPositions(x: Tensor5D, convInfo: Conv3DInfo): Tensor5D { - const maxPositions = ops.buffer(convInfo.outShape, 'int32'); + private maxPool3dPositions(x: Tensor5D, convInfo: conv_util.Conv3DInfo): + Tensor5D { + const maxPositions = tf.buffer(convInfo.outShape, 'int32'); const strideDepth = convInfo.strideDepth; const strideHeight = convInfo.strideHeight; const strideWidth = convInfo.strideWidth; @@ -2688,7 +2686,8 @@ export class MathBackendCPU extends KernelBackend { } maxPool3dBackprop( - dy: Tensor5D, x: Tensor5D, y: Tensor5D, convInfo: Conv3DInfo): Tensor5D { + dy: Tensor5D, x: Tensor5D, y: Tensor5D, + convInfo: conv_util.Conv3DInfo): Tensor5D { assertNotComplex([x, y], 'maxPool3dBackprop'); const maxPositions = this.maxPool3dPositions(x, convInfo); @@ -2704,7 +2703,7 @@ export class MathBackendCPU extends KernelBackend { const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; - const dx = ops.buffer(x.shape, 'float32'); + const dx = tf.buffer(x.shape, 'float32'); const maxPosBuf = this.bufferSync(maxPositions); const dyBuf = this.bufferSync(dy); @@ -2777,7 +2776,7 @@ export class MathBackendCPU extends KernelBackend { return backend_util.reshapeTensor(x, shape); } - avgPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D { + avgPool(x: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { assertNotComplex(x, 'avgPool'); return this.pool(x, convInfo, 'avg').toFloat(); @@ -2843,7 +2842,7 @@ export class MathBackendCPU extends KernelBackend { } } } - return ops.tensor(result, [batch, newHeight, newWidth, numChannels]); + return tf.tensor(result, [batch, newHeight, newWidth, numChannels]); } resizeBilinearBackprop(dy: Tensor4D, x: Tensor4D, alignCorners: boolean) { @@ -2921,7 +2920,7 @@ export class MathBackendCPU extends KernelBackend { } } } - return ops.tensor4d(output, [batch, xWidth, xHeight, depth], x.dtype); + return tf.tensor4d(output, [batch, xWidth, xHeight, depth], x.dtype); } resizeNearestNeighbor( @@ -2974,7 +2973,7 @@ export class MathBackendCPU extends KernelBackend { } } } - return ops.tensor( + return tf.tensor( output, [batch, newHeight, newWidth, numChannels], x.dtype); } @@ -3072,7 +3071,7 @@ export class MathBackendCPU extends KernelBackend { } } } - return ops.tensor4d(output, x.shape, x.dtype); + return tf.tensor4d(output, x.shape, x.dtype); } batchNormalization( @@ -3116,7 +3115,7 @@ export class MathBackendCPU extends KernelBackend { vi = 0; } } - return tensor4d(outVals, x.shape); + return tf.tensor4d(outVals, x.shape); } localResponseNormalization4D( @@ -3151,7 +3150,7 @@ export class MathBackendCPU extends KernelBackend { result[offset] = val; } - return ops.tensor4d(result, x.shape); + return tf.tensor4d(result, x.shape); } LRNGrad( @@ -3189,7 +3188,7 @@ export class MathBackendCPU extends KernelBackend { result[k] += dyi; } } - return ops.tensor4d(result, dy.shape); + return tf.tensor4d(result, dy.shape); } multinomial( @@ -3197,10 +3196,10 @@ export class MathBackendCPU extends KernelBackend { seed: number): Tensor2D { assertNotComplex(logits, 'multinomial'); - const probabilities = normalized ? logits : ops.softmax(logits); + const probabilities = normalized ? logits : tf.softmax(logits); const batchSize = probabilities.shape[0]; const numEvents = probabilities.shape[1]; - const res = ops.zeros([batchSize, numSamples], 'int32'); + const res = tf.zeros([batchSize, numSamples], 'int32'); const resVals = this.readSync(res.dataId) as TypedArray; const probVals = this.readSync(probabilities.dataId) as TypedArray; @@ -3246,7 +3245,7 @@ export class MathBackendCPU extends KernelBackend { res[event * depth + indicesVal[event]] = onValue; } } - return ops.tensor2d(res, [indices.size, depth], 'int32'); + return tf.tensor2d(res, [indices.size, depth], 'int32'); } nonMaxSuppression( @@ -3275,17 +3274,17 @@ export class MathBackendCPU extends KernelBackend { const batch = x.shape[0]; const innerDim = x.shape[1]; // Collects real and imaginary values separately. - const realResult = ops.buffer(x.shape, 'float32'); - const imagResult = ops.buffer(x.shape, 'float32'); + const realResult = tf.buffer(x.shape, 'float32'); + const imagResult = tf.buffer(x.shape, 'float32'); - const real = ops.real(x).as2D(batch, innerDim); - const imag = ops.imag(x).as2D(batch, innerDim); + const real = tf.real(x).as2D(batch, innerDim); + const imag = tf.imag(x).as2D(batch, innerDim); for (let b = 0; b < batch; b++) { // TODO: Support slice ops for complex type. const r = real.slice([b, 0], [1, innerDim]); const i = imag.slice([b, 0], [1, innerDim]); - const input = ops.complex(r, i); + const input = tf.complex(r, i); // Run FFT by batch element. const res = this.readSync(this.fftImpl(input, inverse).dataId) as Float32Array; @@ -3296,7 +3295,7 @@ export class MathBackendCPU extends KernelBackend { } } - const t = ops.complex(realResult.toTensor(), imagResult.toTensor()); + const t = tf.complex(realResult.toTensor(), imagResult.toTensor()); return t.as2D(batch, innerDim); } @@ -3308,9 +3307,9 @@ export class MathBackendCPU extends KernelBackend { if (this.isExponentOf2(n)) { let result = this.fftRadix2(x1D, n, inverse).as2D(x.shape[0], x.shape[1]); if (inverse) { - result = ops.complex( - ops.real(result).div(scalar(n)), - ops.imag(result).div(scalar(n))) as Tensor2D; + result = tf.complex( + tf.real(result).div(tf.scalar(n)), + tf.imag(result).div(tf.scalar(n))) as Tensor2D; } return result; } else { @@ -3318,7 +3317,7 @@ export class MathBackendCPU extends KernelBackend { const rawOutput = this.fourierTransformByMatmul(data, n, inverse) as Float32Array; const output = complex_util.splitRealAndImagArrays(rawOutput); - return ops.complex(output.real, output.imag).as2D(x.shape[0], x.shape[1]); + return tf.complex(output.real, output.imag).as2D(x.shape[0], x.shape[1]); } } @@ -3334,24 +3333,24 @@ export class MathBackendCPU extends KernelBackend { const data = this.readSync(input.dataId) as TypedArray as Float32Array; const half = size / 2; const evenComplex = complex_util.complexWithEvenIndex(data); - let evenTensor = ops.complex(evenComplex.real, evenComplex.imag).as1D(); + let evenTensor = tf.complex(evenComplex.real, evenComplex.imag).as1D(); const oddComplex = complex_util.complexWithOddIndex(data); - let oddTensor = ops.complex(oddComplex.real, oddComplex.imag).as1D(); + let oddTensor = tf.complex(oddComplex.real, oddComplex.imag).as1D(); // Recursive call for half part of original input. evenTensor = this.fftRadix2(evenTensor, half, inverse); oddTensor = this.fftRadix2(oddTensor, half, inverse); const e = complex_util.exponents(size, inverse); - const exponent = ops.complex(e.real, e.imag).mul(oddTensor); + const exponent = tf.complex(e.real, e.imag).mul(oddTensor); const addPart = evenTensor.add(exponent); const subPart = evenTensor.sub(exponent); - const realTensor = ops.real(addPart).concat(ops.real(subPart)); - const imagTensor = ops.imag(addPart).concat(ops.imag(subPart)); + const realTensor = tf.real(addPart).concat(tf.real(subPart)); + const imagTensor = tf.imag(addPart).concat(tf.imag(subPart)); - return ops.complex(realTensor, imagTensor).as1D(); + return tf.complex(realTensor, imagTensor).as1D(); } // Calculate fourier transform by multplying sinusoid matrix. @@ -3384,9 +3383,8 @@ export class MathBackendCPU extends KernelBackend { () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${ dataFormat}`); util.assert( - blockSize > 1, - () => - `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`); + blockSize > 1, () => `blockSize should be > 1 for depthToSpace, but was: + ${blockSize}`); const batchSize = x.shape[0]; const inputHeight = x.shape[1]; @@ -3419,7 +3417,7 @@ export class MathBackendCPU extends KernelBackend { } } } - return ops.tensor4d( + return tf.tensor4d( result, [batchSize, outputHeight, outputWidth, outputDepth]); } @@ -3428,7 +3426,7 @@ export class MathBackendCPU extends KernelBackend { op: (a: number, b: number) => number): Tensor { const newShape = broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape); - const result = ops.buffer(newShape, dtype); + const result = tf.buffer(newShape, dtype); const aVals = this.readSync(a.dataId) as TypedArray; const bVals = this.readSync(b.dataId) as TypedArray; const aBroadcastDims = broadcast_util.getBroadcastDims(a.shape, newShape); @@ -3466,8 +3464,8 @@ export class MathBackendCPU extends KernelBackend { bImag: number) => {real: number, imag: number}): Tensor { const newShape = broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape); - const realResult = ops.buffer(newShape, 'float32'); - const imagResult = ops.buffer(newShape, 'float32'); + const realResult = tf.buffer(newShape, 'float32'); + const imagResult = tf.buffer(newShape, 'float32'); const aVals = this.readSync(a.dataId) as TypedArray; const bVals = this.readSync(b.dataId) as TypedArray; @@ -3543,7 +3541,7 @@ export class MathBackendCPU extends KernelBackend { const [cropHeight, cropWidth] = cropSize; const output = - ops.buffer([numBoxes, cropHeight, cropWidth, numChannels], 'float32'); + tf.buffer([numBoxes, cropHeight, cropWidth, numChannels], 'float32'); const boxVals = this.readSync(boxes.dataId) as TypedArray; const boxIndVals = this.readSync(boxIndex.dataId) as TypedArray; @@ -3686,7 +3684,7 @@ export class MathBackendCPU extends KernelBackend { const [resultShape, numSlices, sliceSize, strides] = gather_nd_util.prepareAndValidate(x, indices); if (numSlices === 0) { - return tensor([], resultShape, x.dtype); + return tf.tensor([], resultShape, x.dtype); } const buffer = new TensorBuffer([numSlices, sliceSize], x.dtype); @@ -3717,7 +3715,7 @@ export class MathBackendCPU extends KernelBackend { indices: Tensor, updates: Tensor, shape: ShapeMap[R]): Tensor { const {sliceRank, numUpdates, sliceSize, strides, outputSize} = scatter_nd_util.calculateShapes(updates, indices, shape); - const defaultValue = scalar(0); + const defaultValue = tf.scalar(0); const sumDupeIndices = true; return this.scatter( indices, updates, shape, outputSize, sliceSize, numUpdates, sliceRank, @@ -3726,10 +3724,11 @@ export class MathBackendCPU extends KernelBackend { fill( shape: ShapeMap[R], value: number|string, dtype?: DataType): Tensor { - dtype = dtype || inferDtype(value); - const values = getArrayFromDType(dtype, sizeFromShape(shape)) as TypedArray; + dtype = dtype || util.inferDtype(value); + const values = + util.getArrayFromDType(dtype, util.sizeFromShape(shape)) as TypedArray; values.fill(value as number); - return ENGINE.makeTensor(values, shape, dtype, this) as Tensor; + return engine().makeTensor(values, shape, dtype, this) as Tensor; } onesLike(x: Tensor): Tensor { @@ -3741,8 +3740,8 @@ export class MathBackendCPU extends KernelBackend { } zerosLike(x: Tensor): Tensor { - const values = - getArrayFromDType(x.dtype, sizeFromShape(x.shape)) as TypedArray; + const values = util.getArrayFromDType( + x.dtype, util.sizeFromShape(x.shape)) as TypedArray; return this.makeOutput(values, x.shape, x.dtype); } @@ -3761,7 +3760,7 @@ export class MathBackendCPU extends KernelBackend { const updatesData = this.readSync(updates.dataId) as TypedArray; if (outputSize === 0) { - return tensor([], shape, updates.dtype); + return tf.tensor([], shape, updates.dtype); } const buffer = new TensorBuffer(flattenShape, updates.dtype as 'float32'); @@ -3795,5 +3794,3 @@ export class MathBackendCPU extends KernelBackend { return buffer.toTensor().reshape(shape); } } - -ENGINE.registerBackend('cpu', () => new MathBackendCPU(), 1 /* priority */); diff --git a/tfjs-core/src/backends/cpu/backend_cpu_test.ts b/tfjs-backend-cpu/src/backend_cpu_test.ts similarity index 89% rename from tfjs-core/src/backends/cpu/backend_cpu_test.ts rename to tfjs-backend-cpu/src/backend_cpu_test.ts index e78ab42980f..bd89d903738 100644 --- a/tfjs-core/src/backends/cpu/backend_cpu_test.ts +++ b/tfjs-backend-cpu/src/backend_cpu_test.ts @@ -15,19 +15,20 @@ * ============================================================================= */ -import {ENGINE} from '../../engine'; -import * as tf from '../../index'; -import {describeWithFlags} from '../../jasmine_util'; -import {tensor2d} from '../../ops/ops'; -import {expectArraysClose, expectArraysEqual} from '../../test_util'; -import {decodeString} from '../../util'; +import * as tf from '@tensorflow/tfjs-core'; +import {engine, util} from '@tensorflow/tfjs-core'; + +// tslint:disable-next-line: no-imports-from-dist +import {describeWithFlags} from '@tensorflow/tfjs-core/dist/jasmine_util'; +// tslint:disable-next-line: no-imports-from-dist +import {expectArraysClose, expectArraysEqual} from '@tensorflow/tfjs-core/dist/test_util'; import {MathBackendCPU} from './backend_cpu'; import {CPU_ENVS} from './backend_cpu_test_registry'; /** Private test util for decoding array of strings in utf-8. */ function decodeStrings(bytes: Uint8Array[]): string[] { - return bytes.map(b => decodeString(b)); + return bytes.map(b => util.decodeString(b)); } describeWithFlags('backendCPU', CPU_ENVS, () => { @@ -37,7 +38,7 @@ describeWithFlags('backendCPU', CPU_ENVS, () => { }); it('register string tensor with values', () => { - const t = ENGINE.makeTensor(['a', 'b', 'c'], [3], 'string'); + const t = engine().makeTensor(['a', 'b', 'c'], [3], 'string'); expectArraysEqual( decodeStrings(backend.readSync(t.dataId) as Uint8Array[]), ['a', 'b', 'c']); @@ -63,8 +64,8 @@ describeWithFlags('depthToSpace', CPU_ENVS, () => { describeWithFlags('gatherND CPU', CPU_ENVS, () => { it('should throw error when index out of range', () => { - const indices = tensor2d([0, 2, 99], [3, 1], 'int32'); - const input = tensor2d( + const indices = tf.tensor2d([0, 2, 99], [3, 1], 'int32'); + const input = tf.tensor2d( [100, 101, 102, 777, 778, 779, 10000, 10001, 10002], [3, 3], 'float32'); expect(() => tf.gatherND(input, indices)).toThrow(); }); diff --git a/tfjs-core/src/backends/cpu/backend_cpu_test_registry.ts b/tfjs-backend-cpu/src/backend_cpu_test_registry.ts similarity index 86% rename from tfjs-core/src/backends/cpu/backend_cpu_test_registry.ts rename to tfjs-backend-cpu/src/backend_cpu_test_registry.ts index 896e9daaa3e..908bf37e31a 100644 --- a/tfjs-core/src/backends/cpu/backend_cpu_test_registry.ts +++ b/tfjs-backend-cpu/src/backend_cpu_test_registry.ts @@ -15,7 +15,8 @@ * ============================================================================= */ -import {Constraints, registerTestEnv} from '../../jasmine_util'; +// tslint:disable-next-line: no-imports-from-dist +import {Constraints, registerTestEnv} from '@tensorflow/tfjs-core/dist/jasmine_util'; export const CPU_ENVS: Constraints = { predicate: testEnv => testEnv.backendName === 'cpu' diff --git a/tfjs-core/src/backends/cpu/cpu_util.ts b/tfjs-backend-cpu/src/cpu_util.ts similarity index 91% rename from tfjs-core/src/backends/cpu/cpu_util.ts rename to tfjs-backend-cpu/src/cpu_util.ts index 519f04d4c00..630e9ba127d 100644 --- a/tfjs-core/src/backends/cpu/cpu_util.ts +++ b/tfjs-backend-cpu/src/cpu_util.ts @@ -15,8 +15,7 @@ * ============================================================================= */ -import {TensorInfo} from '../../kernel_registry'; -import {assert} from '../../util'; +import {TensorInfo, util} from '@tensorflow/tfjs-core'; export function assertNotComplex( tensor: TensorInfo|TensorInfo[], opName: string): void { @@ -25,7 +24,7 @@ export function assertNotComplex( } tensor.forEach(t => { if (t != null) { - assert( + util.assert( t.dtype !== 'complex64', () => `${opName} does not support complex64 tensors.`); } diff --git a/tfjs-backend-cpu/src/index.ts b/tfjs-backend-cpu/src/index.ts new file mode 100644 index 00000000000..6ebaa86a21a --- /dev/null +++ b/tfjs-backend-cpu/src/index.ts @@ -0,0 +1,20 @@ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + +import {registerBackend} from '@tensorflow/tfjs-core'; +import {MathBackendCPU} from './backend_cpu'; +registerBackend('cpu', () => new MathBackendCPU(), 1 /* priority */); diff --git a/tfjs-core/src/backends/cpu/kernels/Div.ts b/tfjs-backend-cpu/src/kernels/Div.ts similarity index 95% rename from tfjs-core/src/backends/cpu/kernels/Div.ts rename to tfjs-backend-cpu/src/kernels/Div.ts index d248a487131..57907fb6e28 100644 --- a/tfjs-core/src/backends/cpu/kernels/Div.ts +++ b/tfjs-backend-cpu/src/kernels/Div.ts @@ -15,7 +15,7 @@ * ============================================================================= */ -import {Div} from '../../../kernel_names'; +import {Div} from '@tensorflow/tfjs-core'; import {createBinaryKernelConfig} from '../utils/kernel_utils'; import {divImpl} from './Div_impl'; diff --git a/tfjs-core/src/backends/cpu/kernels/Div_impl.ts b/tfjs-backend-cpu/src/kernels/Div_impl.ts similarity index 100% rename from tfjs-core/src/backends/cpu/kernels/Div_impl.ts rename to tfjs-backend-cpu/src/kernels/Div_impl.ts diff --git a/tfjs-core/src/backends/cpu/kernels/NonMaxSuppressionV5.ts b/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts similarity index 87% rename from tfjs-core/src/backends/cpu/kernels/NonMaxSuppressionV5.ts rename to tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts index 4885127638f..f28d7b47200 100644 --- a/tfjs-core/src/backends/cpu/kernels/NonMaxSuppressionV5.ts +++ b/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts @@ -15,11 +15,10 @@ * ============================================================================= */ -import {NonMaxSuppressionV5, NonMaxSuppressionV5Attrs, NonMaxSuppressionV5Inputs} from '../../../kernel_names'; -import {KernelConfig} from '../../../kernel_registry'; -import {TypedArray} from '../../../types'; -import {nonMaxSuppressionV5} from '../../non_max_suppression_impl'; - +import {NonMaxSuppressionV5, NonMaxSuppressionV5Attrs, NonMaxSuppressionV5Inputs} from '@tensorflow/tfjs-core'; +import {KernelConfig, TypedArray} from '@tensorflow/tfjs-core'; +// tslint:disable-next-line: no-imports-from-dist +import {nonMaxSuppressionV5} from '@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl'; import {MathBackendCPU} from '../backend_cpu'; import {assertNotComplex} from '../cpu_util'; diff --git a/tfjs-core/src/backends/cpu/kernels/Square.ts b/tfjs-backend-cpu/src/kernels/Square.ts similarity index 92% rename from tfjs-core/src/backends/cpu/kernels/Square.ts rename to tfjs-backend-cpu/src/kernels/Square.ts index e1cf21ed320..849e36a47c7 100644 --- a/tfjs-core/src/backends/cpu/kernels/Square.ts +++ b/tfjs-backend-cpu/src/kernels/Square.ts @@ -15,8 +15,8 @@ * ============================================================================= */ -import {Square, SquareInputs} from '../../../kernel_names'; -import {KernelConfig} from '../../../kernel_registry'; +import {Square, SquareInputs} from '@tensorflow/tfjs-core'; +import {KernelConfig} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from '../backend_cpu'; import {assertNotComplex} from '../cpu_util'; diff --git a/tfjs-core/src/backends/cpu/kernels/SquaredDifference.ts b/tfjs-backend-cpu/src/kernels/SquaredDifference.ts similarity index 94% rename from tfjs-core/src/backends/cpu/kernels/SquaredDifference.ts rename to tfjs-backend-cpu/src/kernels/SquaredDifference.ts index f7ad0205821..8f1ba615942 100644 --- a/tfjs-core/src/backends/cpu/kernels/SquaredDifference.ts +++ b/tfjs-backend-cpu/src/kernels/SquaredDifference.ts @@ -15,7 +15,7 @@ * ============================================================================= */ -import {SquaredDifference} from '../../../kernel_names'; +import {SquaredDifference} from '@tensorflow/tfjs-core'; import {createBinaryKernelImpl} from '../utils/kernel_utils'; import {createBinaryKernelConfig} from '../utils/kernel_utils'; diff --git a/tfjs-core/src/backends/cpu/kernels/Transpose.ts b/tfjs-backend-cpu/src/kernels/Transpose.ts similarity index 90% rename from tfjs-core/src/backends/cpu/kernels/Transpose.ts rename to tfjs-backend-cpu/src/kernels/Transpose.ts index cfd905c4641..05ae13f03cb 100644 --- a/tfjs-core/src/backends/cpu/kernels/Transpose.ts +++ b/tfjs-backend-cpu/src/kernels/Transpose.ts @@ -15,9 +15,9 @@ * ============================================================================= */ -import {Transpose, TransposeAttrs, TransposeInputs} from '../../../kernel_names'; -import {KernelConfig} from '../../../kernel_registry'; -import {TypedArray} from '../../../types'; +import {KernelConfig, TypedArray} from '@tensorflow/tfjs-core'; + +import {Transpose, TransposeAttrs, TransposeInputs} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from '../backend_cpu'; import {assertNotComplex} from '../cpu_util'; diff --git a/tfjs-core/src/backends/cpu/kernels/Transpose_impl.ts b/tfjs-backend-cpu/src/kernels/Transpose_impl.ts similarity index 92% rename from tfjs-core/src/backends/cpu/kernels/Transpose_impl.ts rename to tfjs-backend-cpu/src/kernels/Transpose_impl.ts index 80ccf480f16..3a6d290b777 100644 --- a/tfjs-core/src/backends/cpu/kernels/Transpose_impl.ts +++ b/tfjs-backend-cpu/src/kernels/Transpose_impl.ts @@ -15,8 +15,8 @@ * ============================================================================= */ -import {DataType, NumericDataType, TypedArray} from '../../../types'; -import * as util from '../../../util'; +import {DataType, NumericDataType, TypedArray} from '@tensorflow/tfjs-core'; +import {util} from '@tensorflow/tfjs-core'; export function transposeImpl( xVals: TypedArray, xShape: number[], dtype: DataType, perm: number[], diff --git a/tfjs-core/src/backends/cpu/register_all_kernels.ts b/tfjs-backend-cpu/src/register_all_kernels.ts similarity index 95% rename from tfjs-core/src/backends/cpu/register_all_kernels.ts rename to tfjs-backend-cpu/src/register_all_kernels.ts index 0a1055fd93b..6f889399460 100644 --- a/tfjs-core/src/backends/cpu/register_all_kernels.ts +++ b/tfjs-backend-cpu/src/register_all_kernels.ts @@ -17,7 +17,7 @@ // We explicitly import the modular kernels so they get registered in the // global registry when we compile the library. A modular build would replace // the contents of this file and import only the kernels that are needed. -import {KernelConfig, registerKernel} from '../../kernel_registry'; +import {KernelConfig, registerKernel} from '@tensorflow/tfjs-core'; import {divConfig} from './kernels/Div'; import {nonMaxSuppressionV5Config} from './kernels/NonMaxSuppressionV5'; diff --git a/tfjs-core/src/backends/cpu/utils/kernel_utils.ts b/tfjs-backend-cpu/src/utils/kernel_utils.ts similarity index 92% rename from tfjs-core/src/backends/cpu/utils/kernel_utils.ts rename to tfjs-backend-cpu/src/utils/kernel_utils.ts index 68279392173..8c263201c15 100644 --- a/tfjs-core/src/backends/cpu/utils/kernel_utils.ts +++ b/tfjs-backend-cpu/src/utils/kernel_utils.ts @@ -15,11 +15,11 @@ * ============================================================================= */ -import * as backend_util from '../../../backends/backend_util'; -import {BinaryInputs} from '../../../kernel_names'; -import {KernelConfig} from '../../../kernel_registry'; -import {DataType, NumericDataType, TypedArray} from '../../../types'; -import * as util from '../../../util'; +import {BinaryInputs, KernelConfig} from '@tensorflow/tfjs-core'; +import {DataType, NumericDataType, TypedArray} from '@tensorflow/tfjs-core'; +import {backend_util} from '@tensorflow/tfjs-core'; + +import {util} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from '../backend_cpu'; import {assertNotComplex} from '../cpu_util'; diff --git a/tfjs-backend-cpu/tsconfig.json b/tfjs-backend-cpu/tsconfig.json new file mode 100644 index 00000000000..ecb732e2195 --- /dev/null +++ b/tfjs-backend-cpu/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig", + "include": [ + "src/" + ], + "exclude": [ + "node_modules/" + ], + "compilerOptions": { + "outDir": "./dist" + } +} diff --git a/tfjs-backend-cpu/tslint.json b/tfjs-backend-cpu/tslint.json new file mode 100644 index 00000000000..ec365f164b3 --- /dev/null +++ b/tfjs-backend-cpu/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "../tslint.json" +} diff --git a/tfjs-backend-cpu/yarn.lock b/tfjs-backend-cpu/yarn.lock new file mode 100644 index 00000000000..35616624f01 --- /dev/null +++ b/tfjs-backend-cpu/yarn.lock @@ -0,0 +1,4455 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@tensorflow/tfjs-core@link:../tfjs-core": + version "0.0.0" + uid "" + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/jasmine@~3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.0.0.tgz#9a6b6755a02fcd6baa088a767557709c79728f98" + integrity sha512-yeQ81bQ46gOfj+AQLp5/x0Kylq6lz9d5a82Vo5JS63rDn1ctoItKcwrcKEM1wGsjqA4SrYkzzIHo8dbq8RhG5w== + +"@types/node@^11.13.2": + version "11.15.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.7.tgz#97559c6d7f8b15dcf275365512799f405c20cd4e" + integrity sha512-3c3Kc7VIdE5UpqpmztRy7FU+turZgIurGnwpGFy/fRFOirfPc7ZnoFL83qVoqEDENJENqDhtGyQZ5fkXNQ6Qkw== + +"@types/offscreencanvas@~2019.3.0": + version "2019.3.0" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" + integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== + +"@types/seedrandom@2.4.27": + version "2.4.27" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" + integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE= + +"@types/webgl-ext@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" + integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg== + +"@types/webgl2@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.4.tgz#c3b0f9d6b465c66138e84e64cb3bdf8373c2c279" + integrity sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw== + +JSONStream@^1.0.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + +accepts@~1.3.4: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^6.1.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn-walk@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" + integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== + +acorn@^6.0.5, acorn@^6.1.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== + dependencies: + ansi-wrap "^0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@1.x, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + 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" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +big-integer@^1.6.17: + version "1.6.48" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + dependencies: + 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" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +bluebird@^3.3.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +body-parser@^1.16.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + 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" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-pack@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" + integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.8.0" + defined "^1.0.0" + safe-buffer "^5.1.1" + through2 "^2.0.0" + umd "^3.0.0" + +browser-resolve@^1.11.0, browser-resolve@^1.11.3, browser-resolve@^1.7.0: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserify@^16.1.0: + version "16.5.0" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.0.tgz#a1c2bc0431bec11fd29151941582e3f645ede881" + integrity sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw== + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.2.0" + buffer "^5.0.2" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^2.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + mkdirp "^0.5.0" + module-deps "^6.0.0" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^3.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.10.1" + vm-browserify "^1.0.0" + xtend "^4.0.0" + +browserify@~16.2.3: + version "16.2.3" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.3.tgz#7ee6e654ba4f92bce6ab3599c3485b1cc7a0ad0b" + integrity sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ== + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.2.0" + buffer "^5.0.2" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^2.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + mkdirp "^0.5.0" + module-deps "^6.0.0" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.10.1" + vm-browserify "^1.0.0" + xtend "^4.0.0" + +browserstack@~1.5.1: + version "1.5.3" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" + integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== + dependencies: + https-proxy-agent "^2.2.1" + +browserstacktunnel-wrapper@~2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/browserstacktunnel-wrapper/-/browserstacktunnel-wrapper-2.0.4.tgz#0ebffd3d6311b8526c30d8b430fdc651a535eebb" + integrity sha512-GCV599FUUxNOCFl3WgPnfc5dcqq9XTmMXoxWpqkvmk0R9TOIoqmjENNU6LY6DtgIL6WfBVbg/jmWtnM5K6UYSg== + dependencies: + https-proxy-agent "^2.2.1" + unzipper "^0.9.3" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0, buffer-from@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^5.0.2, buffer@^5.2.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" + integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtin-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + 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" + +cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" + integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.1.1: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clang-format@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/clang-format/-/clang-format-1.2.4.tgz#4bb4b0a98180428deb093cf20982e9fc1af20b6c" + integrity sha512-sw+nrGUp3hvmANd1qF8vZPuezSYQAiXgGBiEtkXTtJnnu6b00fCqkkDIsnRKrNgg4nv6NYZE92ejvOMIXZoejw== + dependencies: + async "^1.5.2" + glob "^7.0.0" + resolve "^1.1.6" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combine-source-map@^0.8.0, combine-source-map@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + +commander@^2.12.1, commander@^2.20.0, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect@^3.6.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0, constants-browserify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.1.3, convert-source-map@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^3.1.3: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +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== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.0.0, crypto-browserify@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +dash-ast@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" + integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== + +date-format@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== + +dateformat@^1.0.6: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.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@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +deps-sort@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" + integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== + dependencies: + JSONStream "^1.0.3" + shasum-object "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + dependencies: + acorn-node "^1.6.1" + defined "^1.0.0" + minimist "^1.1.1" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +diff@^3.1.0, diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +domain-browser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2, duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +elliptic@^6.0.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +engine.io-client@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" + integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~3.3.1" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + +estree-walker@^0.6.0, estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + +events@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" + integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== + +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + 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" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + 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" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-safe-stringify@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + +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== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +follow-redirects@^1.0.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb" + integrity sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ== + dependencies: + debug "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= + dependencies: + null-check "^1.0.0" + +fs-extra@7.0.1, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.12" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" + integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-assigned-identifiers@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" + integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + 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" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +handlebars@^4.0.1: + version "4.7.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" + integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, 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@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hat@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" + integrity sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo= + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-proxy@^1.13.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^5.0.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= + dependencies: + source-map "~0.5.3" + +insert-module-globals@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" + integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw== + dependencies: + JSONStream "^1.0.3" + acorn-node "^1.5.2" + combine-source-map "^0.8.0" + concat-stream "^1.6.1" + is-buffer "^1.1.0" + path-is-absolute "^1.0.1" + process "~0.11.0" + through2 "^2.0.0" + undeclared-identifiers "^1.1.2" + xtend "^4.0.0" + +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.0, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-nan@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.0.tgz#85d1f5482f7051c2019f5673ccebdb06f3b0db03" + integrity sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ== + dependencies: + define-properties "^1.1.3" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isbinaryfile@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +istanbul@0.4.5, istanbul@^0.4.0: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jasmine-core@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.1.0.tgz#a4785e135d5df65024dfc9224953df585bd2766c" + integrity sha1-pHheE11d9lAk38kiSVPfWFvSdmw= + +jasmine@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.1.0.tgz#2bd59fd7ec6ec0e8acb64e09f45a68ed2ad1952a" + integrity sha1-K9Wf1+xuwOistk4J9Fpo7SrRlSo= + dependencies: + glob "^7.0.6" + jasmine-core "~3.1.0" + +jest-worker@^24.6.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +js-string-escape@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.x, js-yaml@^3.7.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +karma-browserify@~6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/karma-browserify/-/karma-browserify-6.0.0.tgz#423b719fe80d064ad5ec36f8eb15c399305b9aba" + integrity sha512-G3dGjoy1/6P8I6qTp799fbcAxs4P+1JcyEKUzy9g1/xMakqf9FFPwW2T9iEtCbWoH5WIKD3z+YwGL5ysBhzrsg== + dependencies: + convert-source-map "^1.1.3" + hat "^0.0.3" + js-string-escape "^1.0.0" + lodash "^4.17.10" + minimatch "^3.0.0" + os-shim "^0.1.3" + +karma-browserstack-launcher@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/karma-browserstack-launcher/-/karma-browserstack-launcher-1.4.0.tgz#22f92e969d2db6cfc00e578708bda39378d5f2ab" + integrity sha512-bUQK84U+euDfOUfEjcF4IareySMOBNRLrrl9q6cttIe8f011Ir6olLITTYMOJDcGY58wiFIdhPHSPd9Pi6+NfQ== + dependencies: + browserstack "~1.5.1" + browserstacktunnel-wrapper "~2.0.2" + q "~1.5.0" + +karma-chrome-launcher@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" + integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w== + dependencies: + fs-access "^1.0.0" + which "^1.2.1" + +karma-coverage@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689" + integrity sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw== + dependencies: + dateformat "^1.0.6" + istanbul "^0.4.0" + lodash "^4.17.0" + minimatch "^3.0.0" + source-map "^0.5.1" + +karma-jasmine@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.2.tgz#394f2b25ffb4a644b9ada6f22d443e2fd08886c3" + integrity sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM= + +karma-typescript@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-4.1.1.tgz#2b37164e31f23397cf35774fb436e3a7e7f78a29" + integrity sha512-NiGt3Lh8pxKY6hSW4mBV7X45zfB+EA4ezVMNN/vnzLvN+du0UoEc8lTAhrD/DMrjKP3wDlpabku652svRyguXg== + dependencies: + acorn "^6.0.5" + acorn-walk "^6.1.1" + assert "^2.0.0" + async "^3.0.1" + browser-resolve "^1.11.3" + browserify-zlib "^0.2.0" + buffer "^5.2.1" + combine-source-map "^0.8.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + convert-source-map "^1.6.0" + crypto-browserify "^3.12.0" + diff "^4.0.1" + domain-browser "^1.2.0" + events "^3.0.0" + glob "^7.1.3" + https-browserify "^1.0.0" + istanbul "0.4.5" + json-stringify-safe "^5.0.1" + karma-coverage "^1.1.1" + lodash "^4.17.11" + log4js "^4.0.1" + minimatch "^3.0.4" + os-browserify "^0.3.0" + pad "^3.2.0" + path-browserify "^1.0.0" + process "^0.11.10" + punycode "^2.1.1" + querystring-es3 "^0.2.1" + readable-stream "^3.1.1" + remap-istanbul "^0.13.0" + source-map "^0.7.3" + stream-browserify "^2.0.2" + stream-http "^3.0.0" + string_decoder "^1.2.0" + timers-browserify "^2.0.10" + tmp "^0.1.0" + tty-browserify "^0.0.1" + url "^0.11.0" + util "^0.12.0" + vm-browserify "1.1.0" + +karma@~4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-4.2.0.tgz#27e88b310cde090d016980ff5444e3a239196fca" + integrity sha512-fmCuxN1rwJxTdZfOXK5LjlmS4Ana/OvzNMpkyLL/TLE8hmgSkpVpMYQ7RTVa8TNKRVQDZNl5W1oF5cfKfgIMlA== + dependencies: + bluebird "^3.3.0" + body-parser "^1.16.1" + braces "^3.0.2" + chokidar "^3.0.0" + colors "^1.1.0" + connect "^3.6.0" + core-js "^3.1.3" + di "^0.0.1" + dom-serialize "^2.2.0" + flatted "^2.0.0" + glob "^7.1.1" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^4.17.11" + log4js "^4.0.0" + mime "^2.3.1" + minimatch "^3.0.2" + optimist "^0.6.1" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.6.0" + safe-buffer "^5.0.1" + socket.io "2.1.1" + source-map "^0.6.1" + tmp "0.0.33" + useragent "2.3.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +labeled-stream-splicer@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" + integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== + dependencies: + inherits "^2.0.1" + stream-splicer "^2.0.0" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= + +lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log4js@^4.0.0, log4js@^4.0.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" + integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== + dependencies: + date-format "^2.0.0" + debug "^4.1.1" + flatted "^2.0.0" + rfdc "^1.1.4" + streamroller "^1.0.6" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@4.1.x: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + 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" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@^2.3.1: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +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" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== + dependencies: + minimist "^1.2.5" + +module-deps@^6.0.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.2.tgz#d8a15c2265dfc119153c29bb47386987d0ee423b" + integrity sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w== + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + cached-path-relative "^1.0.2" + concat-stream "~1.6.0" + defined "^1.0.0" + detective "^5.2.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.4.0" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + 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" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" + integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.4.1: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-run-all@~4.1.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + 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.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@1.x, once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opn@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-browserify@^0.3.0, os-browserify@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-shim@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +outpipe@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I= + dependencies: + shell-quote "^1.4.2" + +pad@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/pad/-/pad-3.2.0.tgz#be7a1d1cb6757049b4ad5b70e71977158fea95d1" + integrity sha512-2u0TrjcGbOjBTJpyewEl4hBO3OeX5wWue7eIFPzQTg6wFSvoaHcBTTUY5m+n0hd04gmTCPuY0kCpVIVuw5etwg== + dependencies: + wcwidth "^1.0.1" + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= + dependencies: + path-platform "~0.11.15" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-browserify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +plugin-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" + integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== + dependencies: + ansi-colors "^1.0.1" + arr-diff "^4.0.0" + arr-union "^3.1.0" + extend-shallow "^3.0.2" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10, process@~0.11.0: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qjobs@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +querystring-es3@^0.2.1, querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= + dependencies: + readable-stream "^2.0.2" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== + dependencies: + picomatch "^2.0.7" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remap-istanbul@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.13.0.tgz#a529dfd080bb760f5274e3671c9c065f29923ed1" + integrity sha512-rS5ZpVAx3fGtKZkiBe1esXg5mKYbgW9iz8kkADFt3p6lo3NsBBUX1q6SwdhwUtYCGnr7nK6gRlbYK3i8R0jbRA== + dependencies: + istanbul "0.4.5" + minimatch "^3.0.4" + plugin-error "^1.0.1" + source-map "0.6.1" + through2 "3.0.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7, resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.4, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rfdc@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" + integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== + +rimraf@2, rimraf@^2.6.0, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup-plugin-commonjs@~9.3.4: + version "9.3.4" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz#2b3dddbbbded83d45c36ff101cdd29e924fd23bc" + integrity sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w== + dependencies: + estree-walker "^0.6.0" + magic-string "^0.25.2" + resolve "^1.10.0" + rollup-pluginutils "^2.6.0" + +rollup-plugin-node-resolve@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" + integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== + dependencies: + builtin-modules "^2.0.0" + is-module "^1.0.0" + resolve "^1.1.6" + +rollup-plugin-terser@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.3.tgz#5f4c4603b12b4f8d093f4b6f31c9aa5eba98a223" + integrity sha512-FuFuXE5QUJ7snyxHLPp/0LFXJhdomKlIx/aK7Tg88Yubsx/UU/lmInoJafXJ4jwVVNcORJ1wRUC5T9cy5yk0wA== + dependencies: + "@babel/code-frame" "^7.0.0" + jest-worker "^24.6.0" + rollup-pluginutils "^2.8.1" + serialize-javascript "^2.1.2" + terser "^4.1.0" + +rollup-plugin-typescript2@~0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.20.1.tgz#fb1d411975cd875d24882ea66f5f4fd11d2f2240" + integrity sha512-uxA5JQNOfmJ9rsO0yJKTObb1t4nNYUexCg9zxhEKF+NzZwljYWdfgrA06UzA24cOk8fQjGEe7Q5+Vge2vFlnnw== + dependencies: + fs-extra "7.0.1" + resolve "1.10.0" + rollup-pluginutils "2.4.1" + tslib "1.9.3" + +rollup-plugin-visualizer@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-1.1.1.tgz#454ae0aed23845407ebfb81cc52114af308d6d90" + integrity sha512-7xkSKp+dyJmSC7jg2LXqViaHuOnF1VvIFCnsZEKjrgT5ZVyiLLSbeszxFcQSfNJILphqgAEmWAUz0Z4xYScrRw== + dependencies: + mkdirp "^0.5.1" + opn "^5.4.0" + source-map "^0.7.3" + typeface-oswald "0.0.54" + +rollup-pluginutils@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db" + integrity sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw== + dependencies: + estree-walker "^0.6.0" + micromatch "^3.1.10" + +rollup-pluginutils@^2.6.0, rollup-pluginutils@^2.8.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@~1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.9.3.tgz#c898fd562dff3165470fc5de9b5e191d50f944b2" + integrity sha512-20iIOjee5n3H6W6CXsVdYs2xw86j4l+LQLM6yACynt+YJCwkqaYNHAjQ/dhVBIKsFpHwPqHamn/GHq+3Zp8ybQ== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "^11.13.2" + acorn "^6.1.1" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +seedrandom@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" + integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shasum-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" + integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== + dependencies: + fast-safe-stringify "^2.0.7" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@^1.4.2, shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@~0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + 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" + +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== + +socket.io-client@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.2.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.2.0" + to-array "0.1.4" + +socket.io-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== + dependencies: + debug "~3.1.0" + engine.io "~3.2.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.1.1" + socket.io-parser "~3.2.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + 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-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.5.1, source-map@^0.5.6, source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + dependencies: + amdefine ">=0.0.4" + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.0, stream-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-http@^2.0.0: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-http@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57" + integrity sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^3.0.6" + xtend "^4.0.0" + +stream-splicer@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" + integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + +streamroller@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" + integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== + dependencies: + async "^2.6.2" + date-format "^2.0.0" + debug "^3.2.6" + fs-extra "^7.0.1" + lodash "^4.17.14" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string.prototype.padend@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@^1.1.1, string_decoder@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= + dependencies: + minimist "^1.1.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +syntax-error@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== + dependencies: + acorn-node "^1.2.0" + +terser@^4.1.0: + version "4.6.7" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" + integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +through2@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2" + integrity sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ== + dependencies: + readable-stream "2 || 3" + xtend "~4.0.1" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= + dependencies: + process "~0.11.0" + +timers-browserify@^2.0.10: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +tmp@0.0.33, tmp@0.0.x: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +ts-node@~7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" + integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== + dependencies: + arrify "^1.0.0" + buffer-from "^1.1.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.6" + yn "^2.0.0" + +tslib@1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +tslib@^1.8.0, tslib@^1.8.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + +tslint-no-circular-imports@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/tslint-no-circular-imports/-/tslint-no-circular-imports-0.5.2.tgz#47ac9194ec531101ac19198d5144f7ac9f57d980" + integrity sha512-Uzu2NiVX7b/kAk9vPrLqUmoCkth0dXUUNOaqwfxpvYgsHfoH67cmj0IHOUMZ1bC0swksJjaTyq7acHe/gU8H4A== + +tslint@~5.11.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" + integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0= + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.7.0" + minimatch "^3.0.4" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.27.2" + +tsutils@^2.27.2: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.1, tty-browserify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.17: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typeface-oswald@0.0.54: + version "0.0.54" + resolved "https://registry.yarnpkg.com/typeface-oswald/-/typeface-oswald-0.0.54.tgz#1e253011622cdd50f580c04e7d625e7f449763d7" + integrity sha512-U1WMNp4qfy4/3khIfHMVAIKnNu941MXUfs3+H9R8PFgnoz42Hh9pboSFztWr86zut0eXC8byalmVhfkiKON/8Q== + +typescript@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== + +uglify-js@^3.1.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" + integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== + dependencies: + commander "~2.20.3" + source-map "~0.6.1" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +umd@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" + integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== + +undeclared-identifiers@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" + integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== + dependencies: + acorn-node "^1.3.0" + dash-ast "^1.0.0" + get-assigned-identifiers "^1.2.0" + simple-concat "^1.0.0" + xtend "^4.0.1" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzipper@^0.9.3: + version "0.9.15" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.9.15.tgz#97d99203dad17698ee39882483c14e4845c7549c" + integrity sha512-2aaUvO4RAeHDvOCuEtth7jrHFaCKTSXPqUkXwADaLBzGbgZGzUDccoEdJ5lW+3RmfpOZYNx0Rw6F6PUzM6caIA== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url@^0.11.0, url@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8= + dependencies: + os-homedir "^1.0.0" + +useragent@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== + dependencies: + lru-cache "4.1.x" + tmp "0.0.x" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.12.0: + version "0.12.2" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.2.tgz#54adb634c9e7c748707af2bf5a8c7ab640cbba2b" + integrity sha512-XE+MkWQvglYa+IOfBt5UFG93EmncEMP23UqpgDvVZVFBPxwmkK10QRp6pgU4xICPnWRf/t0zPv4noYSUq9gqUQ== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + safe-buffer "^5.1.2" + +util@~0.10.1: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vm-browserify@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + +vm-browserify@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +watchify@~3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.1.tgz#8e4665871fff1ef64c0430d1a2c9d084d9721881" + integrity sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog== + dependencies: + anymatch "^2.0.0" + browserify "^16.1.0" + chokidar "^2.1.1" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "^2.0.0" + xtend "^4.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which@^1.1.1, which@^1.2.1, which@^1.2.9: + 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" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yalc@~1.0.0-pre.21: + version "1.0.0-pre.35" + resolved "https://registry.yarnpkg.com/yalc/-/yalc-1.0.0-pre.35.tgz#c997d6694e6bdad3e988d6e183bc05158dd102fe" + integrity sha512-EGZN0Z+9nVzX8nWaEL4yRCNUNepGz7ouXa8eLA9orqtgwVv+iCtZGzhe3rngR71h01Xy2bwlDjJt0PsC5fkHoA== + dependencies: + fs-extra "^8.0.1" + glob "^7.1.4" + ignore "^5.0.4" + npm-packlist "^1.4.1" + user-home "^2.0.0" + yargs "^7.1.0" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= + dependencies: + camelcase "^3.0.0" + +yargs@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" + integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= diff --git a/tfjs-core/src/backends/kernel_impls.ts b/tfjs-core/src/backends/kernel_impls.ts new file mode 100644 index 00000000000..39d43bafdab --- /dev/null +++ b/tfjs-core/src/backends/kernel_impls.ts @@ -0,0 +1,22 @@ +/** + * @license + * Copyright 2020 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + +export {nonMaxSuppressionV3} from './non_max_suppression_impl'; +export {split} from './split_shared'; +export {tile} from './tile_impl'; +export {topkImpl} from './topk_impl'; +export {whereImpl} from './where_impl'; diff --git a/tfjs-core/src/backends/webgl/kernels/Transpose.ts b/tfjs-core/src/backends/webgl/kernels/Transpose.ts index 086923e5eaa..d2d310720ae 100644 --- a/tfjs-core/src/backends/webgl/kernels/Transpose.ts +++ b/tfjs-core/src/backends/webgl/kernels/Transpose.ts @@ -16,11 +16,12 @@ */ import {TypedArray} from '../../../../src/types'; -import {transposeImpl as cpuTranspose} from '../../../backends/cpu/kernels/Transpose_impl'; import {Transpose, TransposeAttrs, TransposeInputs} from '../../../kernel_names'; import {KernelConfig, TensorInfo} from '../../../kernel_registry'; import {MathBackendWebGL} from '../backend_webgl'; + import {transposeImpl} from './Transpose_impl'; +import {transposeImplCPU as cpuTranspose} from './Transpose_impl'; export const transposeConfig: KernelConfig = { kernelName: Transpose, diff --git a/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts b/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts index 498aae12529..f15d0c2e28a 100644 --- a/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts +++ b/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts @@ -17,6 +17,8 @@ import {env} from '../../../environment'; import {TensorInfo} from '../../../kernel_registry'; +import {DataType, NumericDataType, TypedArray} from '../../../types'; +import * as util from '../../../util'; import {MathBackendWebGL} from '../backend_webgl'; import {TransposeProgram} from '../transpose_gpu'; import {TransposePackedProgram} from '../transpose_packed_gpu'; @@ -28,3 +30,30 @@ export function transposeImpl( new TransposeProgram(x.shape, perm); return backend.runWebGLProgram(program, [x], x.dtype); } + +// todo(@yassogba) import this from cpu backend once that package is published. +export function transposeImplCPU( + xVals: TypedArray, xShape: number[], dtype: DataType, perm: number[], + newShape: number[]): TypedArray { + const xSize = util.sizeFromShape(xShape); + const xRank = xShape.length; + const xStrides = util.computeStrides(xShape); + const newStrides = util.computeStrides(newShape); + + const result = util.getTypedArrayFromDType( + dtype as NumericDataType, util.sizeFromShape(newShape)); + + for (let i = 0; i < xSize; ++i) { + const loc = util.indexToLoc(i, xRank, xStrides); + + // Permute location. + const newLoc: number[] = new Array(loc.length); + for (let i = 0; i < newLoc.length; i++) { + newLoc[i] = loc[perm[i]]; + } + + const newIndex = util.locToIndex(newLoc, xRank, newStrides); + result[newIndex] = xVals[i]; + } + return result; +} diff --git a/tfjs-core/src/engine.ts b/tfjs-core/src/engine.ts index 3c518d9be37..3d9e09933e0 100644 --- a/tfjs-core/src/engine.ts +++ b/tfjs-core/src/engine.ts @@ -377,15 +377,15 @@ export class Engine implements TensorTracker, DataMover { `failed.`); } - moveData(destBackend: KernelBackend, dataId: DataId) { + moveData(backend: KernelBackend, dataId: DataId) { const info = this.state.tensorInfo.get(dataId); const srcBackend = info.backend; const values = this.readSync(dataId); // Delete the tensor from the old backend and move it to the new // backend. srcBackend.disposeData(dataId); - info.backend = destBackend; - destBackend.move(dataId, values, info.shape, info.dtype); + info.backend = backend; + backend.move(dataId, values, info.shape, info.dtype); if (this.shouldCheckForMemLeaks()) { // Track the number of moves during a kernel execution to correctly // detect memory leaks. diff --git a/tfjs-core/src/engine_test.ts b/tfjs-core/src/engine_test.ts index 673592aae37..131dee7d20d 100644 --- a/tfjs-core/src/engine_test.ts +++ b/tfjs-core/src/engine_test.ts @@ -452,75 +452,75 @@ describeWithFlags('disposeVariables', ALL_ENVS, () => { * concrete backend to exist. This test will work for any backend, but currently * this is the simplest backend to test against. */ -describeWithFlags( - 'Switching cpu backends', - {predicate: testEnv => testEnv.backendName === 'cpu'}, () => { - beforeEach(() => { - tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); - tf.registerBackend('cpu2', tf.findBackendFactory('cpu')); - }); - - afterEach(() => { - tf.removeBackend('cpu1'); - tf.removeBackend('cpu2'); - }); - - it('Move data from cpu1 to cpu2 backend', async () => { - tf.setBackend('cpu1'); - // This scalar lives in cpu1. - const a = tf.scalar(5); - - tf.setBackend('cpu2'); - // This scalar lives in cpu2. - const b = tf.scalar(3); - - expect(tf.memory().numDataBuffers).toBe(2); - expect(tf.memory().numTensors).toBe(2); - expect(tf.memory().numBytes).toBe(8); - - // Make sure you can read both tensors. - expectArraysClose(await a.data(), [5]); - expectArraysClose(await b.data(), [3]); - - // Switch back to cpu1. - tf.setBackend('cpu1'); - // Again make sure you can read both tensors. - expectArraysClose(await a.data(), [5]); - expectArraysClose(await b.data(), [3]); - - tf.dispose([a, b]); - - expect(tf.memory().numDataBuffers).toBe(0); - expect(tf.memory().numTensors).toBe(0); - expect(tf.memory().numBytes).toBe(0); - }); - - it('can execute op with data from mixed backends', async () => { - tf.setBackend('cpu1'); - // This scalar lives in cpu1. - const a = tf.scalar(5); - - tf.setBackend('cpu2'); - // This scalar lives in cpu2. - const b = tf.scalar(3); - - // Verify that ops can execute with mixed backend data. - ENGINE.startScope(); - tf.setBackend('cpu1'); - expectArraysClose(await tf.add(a, b).data(), [8]); - - tf.setBackend('cpu2'); - expectArraysClose(await tf.add(a, b).data(), [8]); - ENGINE.endScope(); - expect(tf.memory().numTensors).toBe(2); - expect(tf.memory().numDataBuffers).toBe(2); - - tf.dispose([a, b]); - - expect(tf.memory().numTensors).toBe(0); - expect(tf.memory().numDataBuffers).toBe(0); - }); - }); +// describeWithFlags( +// 'Switching cpu backends', +// {predicate: testEnv => testEnv.backendName === 'cpu'}, () => { +// beforeEach(() => { +// tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); +// tf.registerBackend('cpu2', tf.findBackendFactory('cpu')); +// }); + +// afterEach(() => { +// tf.removeBackend('cpu1'); +// tf.removeBackend('cpu2'); +// }); + +// it('Move data from cpu1 to cpu2 backend', async () => { +// tf.setBackend('cpu1'); +// // This scalar lives in cpu1. +// const a = tf.scalar(5); + +// tf.setBackend('cpu2'); +// // This scalar lives in cpu2. +// const b = tf.scalar(3); + +// expect(tf.memory().numDataBuffers).toBe(2); +// expect(tf.memory().numTensors).toBe(2); +// expect(tf.memory().numBytes).toBe(8); + +// // Make sure you can read both tensors. +// expectArraysClose(await a.data(), [5]); +// expectArraysClose(await b.data(), [3]); + +// // Switch back to cpu1. +// tf.setBackend('cpu1'); +// // Again make sure you can read both tensors. +// expectArraysClose(await a.data(), [5]); +// expectArraysClose(await b.data(), [3]); + +// tf.dispose([a, b]); + +// expect(tf.memory().numDataBuffers).toBe(0); +// expect(tf.memory().numTensors).toBe(0); +// expect(tf.memory().numBytes).toBe(0); +// }); + +// it('can execute op with data from mixed backends', async () => { +// tf.setBackend('cpu1'); +// // This scalar lives in cpu1. +// const a = tf.scalar(5); + +// tf.setBackend('cpu2'); +// // This scalar lives in cpu2. +// const b = tf.scalar(3); + +// // Verify that ops can execute with mixed backend data. +// ENGINE.startScope(); +// tf.setBackend('cpu1'); +// expectArraysClose(await tf.add(a, b).data(), [8]); + +// tf.setBackend('cpu2'); +// expectArraysClose(await tf.add(a, b).data(), [8]); +// ENGINE.endScope(); +// expect(tf.memory().numTensors).toBe(2); +// expect(tf.memory().numDataBuffers).toBe(2); + +// tf.dispose([a, b]); + +// expect(tf.memory().numTensors).toBe(0); +// expect(tf.memory().numDataBuffers).toBe(0); +// }); +// }); /** * The following unit test is a special integration-style test that assumes @@ -531,94 +531,94 @@ describeWithFlags( * have coverage for when these backends are enabled and ensure they work with * the engine. */ -describeWithFlags( - 'Switching WebGL + CPU backends', { - predicate: testEnv => testEnv.backendName === 'webgl' && - ENGINE.backendNames().indexOf('webgl') !== -1 && - ENGINE.backendNames().indexOf('cpu') !== -1 - }, - () => { - beforeEach(() => { - tf.registerBackend('webgl1', tf.findBackendFactory('webgl')); - tf.registerBackend('webgl2', tf.findBackendFactory('webgl')); - tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); - }); - - afterEach(() => { - tf.removeBackend('webgl1'); - tf.removeBackend('webgl2'); - tf.removeBackend('cpu1'); - }); - - it('can execute op with data from mixed backends', async () => { - tf.setBackend('webgl1'); - const a = tf.scalar(5); - - tf.setBackend('webgl2'); - const b = tf.scalar(3); - - tf.setBackend('cpu1'); - const c = tf.scalar(2); - - // Verify that ops can execute with mixed backend data. - ENGINE.startScope(); - tf.setBackend('webgl1'); - expectArraysClose(await tf.addN([a, b, c]).data(), [10]); - - tf.setBackend('webgl2'); - expectArraysClose(await tf.addN([a, b, c]).data(), [10]); - - tf.setBackend('cpu1'); - expectArraysClose(await tf.addN([a, b, c]).data(), [10]); - ENGINE.endScope(); - - expect(tf.memory().numTensors).toBe(3); - expect(tf.memory().numDataBuffers).toBe(3); - - tf.dispose([a, b, c]); - - expect(tf.memory().numTensors).toBe(0); - expect(tf.memory().numDataBuffers).toBe(0); - }); - - it('fromPixels with mixed backends works', async () => { - tf.setBackend('webgl1'); - const a = tf.browser.fromPixels( - new ImageData(new Uint8ClampedArray([1, 2, 3, 4]), 1, 1)); - - tf.setBackend('webgl2'); - const b = tf.browser.fromPixels( - new ImageData(new Uint8ClampedArray([5, 6, 7, 8]), 1, 1)); - - expectArraysClose(await tf.add(a, b).data(), [6, 8, 10]); - }); - - it('single tidy multiple backends', () => { - const kernelFunc = tf.getKernel('Square', 'webgl').kernelFunc; - tf.registerKernel( - {kernelName: 'Square', backendName: 'webgl1', kernelFunc}); - tf.registerKernel( - {kernelName: 'Square', backendName: 'webgl2', kernelFunc}); - - expect(tf.memory().numTensors).toBe(0); - - tf.tidy(() => { - tf.setBackend('webgl1'); - const a = tf.scalar(1); - a.square(); // Uploads to GPU. - - tf.setBackend('webgl2'); - const b = tf.scalar(1); - b.square(); // Uploads to GPU. - - expect(tf.memory().numTensors).toBe(4); - }); - expect(tf.memory().numTensors).toBe(0); - - tf.unregisterKernel('Square', 'webgl1'); - tf.unregisterKernel('Square', 'webgl2'); - }); - }); +// describeWithFlags( +// 'Switching WebGL + CPU backends', { +// predicate: testEnv => testEnv.backendName === 'webgl' && +// ENGINE.backendNames().indexOf('webgl') !== -1 && +// ENGINE.backendNames().indexOf('cpu') !== -1 +// }, +// () => { +// beforeEach(() => { +// tf.registerBackend('webgl1', tf.findBackendFactory('webgl')); +// tf.registerBackend('webgl2', tf.findBackendFactory('webgl')); +// tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); +// }); + +// afterEach(() => { +// tf.removeBackend('webgl1'); +// tf.removeBackend('webgl2'); +// tf.removeBackend('cpu1'); +// }); + +// it('can execute op with data from mixed backends', async () => { +// tf.setBackend('webgl1'); +// const a = tf.scalar(5); + +// tf.setBackend('webgl2'); +// const b = tf.scalar(3); + +// tf.setBackend('cpu1'); +// const c = tf.scalar(2); + +// // Verify that ops can execute with mixed backend data. +// ENGINE.startScope(); +// tf.setBackend('webgl1'); +// expectArraysClose(await tf.addN([a, b, c]).data(), [10]); + +// tf.setBackend('webgl2'); +// expectArraysClose(await tf.addN([a, b, c]).data(), [10]); + +// tf.setBackend('cpu1'); +// expectArraysClose(await tf.addN([a, b, c]).data(), [10]); +// ENGINE.endScope(); + +// expect(tf.memory().numTensors).toBe(3); +// expect(tf.memory().numDataBuffers).toBe(3); + +// tf.dispose([a, b, c]); + +// expect(tf.memory().numTensors).toBe(0); +// expect(tf.memory().numDataBuffers).toBe(0); +// }); + +// it('fromPixels with mixed backends works', async () => { +// tf.setBackend('webgl1'); +// const a = tf.browser.fromPixels( +// new ImageData(new Uint8ClampedArray([1, 2, 3, 4]), 1, 1)); + +// tf.setBackend('webgl2'); +// const b = tf.browser.fromPixels( +// new ImageData(new Uint8ClampedArray([5, 6, 7, 8]), 1, 1)); + +// expectArraysClose(await tf.add(a, b).data(), [6, 8, 10]); +// }); + +// it('single tidy multiple backends', () => { +// const kernelFunc = tf.getKernel('Square', 'webgl').kernelFunc; +// tf.registerKernel( +// {kernelName: 'Square', backendName: 'webgl1', kernelFunc}); +// tf.registerKernel( +// {kernelName: 'Square', backendName: 'webgl2', kernelFunc}); + +// expect(tf.memory().numTensors).toBe(0); + +// tf.tidy(() => { +// tf.setBackend('webgl1'); +// const a = tf.scalar(1); +// a.square(); // Uploads to GPU. + +// tf.setBackend('webgl2'); +// const b = tf.scalar(1); +// b.square(); // Uploads to GPU. + +// expect(tf.memory().numTensors).toBe(4); +// }); +// expect(tf.memory().numTensors).toBe(0); + +// tf.unregisterKernel('Square', 'webgl1'); +// tf.unregisterKernel('Square', 'webgl2'); +// }); +// }); interface TestStorage extends KernelBackend { id: number; diff --git a/tfjs-core/src/index.ts b/tfjs-core/src/index.ts index c3eda908af1..45212aedb21 100644 --- a/tfjs-core/src/index.ts +++ b/tfjs-core/src/index.ts @@ -29,22 +29,16 @@ import './engine'; // Register backend-agnostic flags. import './flags'; -// backend_cpu.ts and backend_webgl.ts are standalone files and should be +// backend_webgl.ts are standalone files and should be // explicitly included here. import './backends/webgl/backend_webgl'; -import './backends/cpu/backend_cpu'; -// Import all kernels from cpu. -import './backends/cpu/register_all_kernels'; // Import all kernels from webgl. import './backends/webgl/register_all_kernels'; - // Register all the gradients. import './register_all_gradients'; - import './platforms/platform_browser'; import './platforms/platform_node'; -import * as backend_util from './backends/backend_util'; // Serialization. import * as io from './io/io'; import * as math from './math'; @@ -72,7 +66,7 @@ export {RMSPropOptimizer} from './optimizers/rmsprop_optimizer'; export {SGDOptimizer} from './optimizers/sgd_optimizer'; export {Scalar, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, TensorBuffer, Variable} from './tensor'; export {GradSaveFunc, NamedTensorMap, TensorContainer, TensorContainerArray, TensorContainerObject} from './tensor_types'; -export {DataType, DataTypeMap, DataValues, Rank, RecursiveArray, ShapeMap, sumOutType, TensorLike} from './types'; +export {DataType, DataTypeMap, DataValues, NumericDataType, Rank, RecursiveArray, ShapeMap, sumOutType, TensorLike, TypedArray, upcastType} from './types'; export * from './ops/ops'; export {LSTMCellFunc} from './ops/lstm'; @@ -93,6 +87,19 @@ export {version as version_core}; export {nextFrame} from './browser_util'; // Second level exports. +import * as backend_util from './backends/backend_util'; +import * as complex_util from './backends/complex_util'; +import * as broadcast_util from './ops/broadcast_util'; +import * as axis_util from './ops/axis_util'; +import * as concat_util from './ops/concat_util'; +import * as array_ops_util from './ops/array_ops_util'; +import * as gather_nd_util from './ops/gather_nd_util'; +import * as scatter_nd_util from './ops/scatter_nd_util'; +import * as selu_util from './ops/selu_util'; +import * as fused_util from './ops/fused_util'; +import * as erf_util from './ops/erf_util'; +import * as conv_util from './ops/conv_util'; +import * as log_util from './log'; export { browser, io, @@ -101,18 +108,35 @@ export { test_util, util, backend_util, + complex_util, webgl, tensor_util, slice_util, gather_util, - scatter_util + scatter_util, + broadcast_util, + axis_util, + concat_util, + array_ops_util, + gather_nd_util, + selu_util, + scatter_nd_util, + fused_util, + erf_util, + conv_util, + log_util, }; +import * as kernel_impls from './backends/kernel_impls'; +export {kernel_impls}; // Backend specific. export {KernelBackend, BackendTimingInfo, DataMover, DataStorage} from './backends/backend'; import * as ops from './ops/ops'; setOpHandler(ops); +// Export all kernel names / info +export * from './kernel_names'; + // Import all op chainers and add type info to Tensor. import './public/chained_ops/register_all_chained_ops'; diff --git a/tfjs-core/src/setup_test.ts b/tfjs-core/src/setup_test.ts index 97f7711d66d..48a85c0135c 100644 --- a/tfjs-core/src/setup_test.ts +++ b/tfjs-core/src/setup_test.ts @@ -19,7 +19,6 @@ * This file is necessary so we register all test environments before we start * executing tests. */ -import './backends/cpu/backend_cpu_test_registry'; import './backends/webgl/backend_webgl_test_registry'; import {parseTestEnvFromKarmaFlags, setTestEnvs, TEST_ENVS} from './jasmine_util'; diff --git a/tfjs-core/src/test_async_backends.ts b/tfjs-core/src/test_async_backends.ts index 4bd4e9072d2..5772777f37d 100644 --- a/tfjs-core/src/test_async_backends.ts +++ b/tfjs-core/src/test_async_backends.ts @@ -15,76 +15,76 @@ * limitations under the License. * ============================================================================= */ - /** * This file tests that we don't have any dataSyncs in the unconstrainted tests * so that we can run backends that have async init and async data reads against * our exported test files. */ -import './index'; +// import './index'; -import {setTestEnvs} from './jasmine_util'; -import {MathBackendCPU} from './backends/cpu/backend_cpu'; -import {registerBackend} from './globals'; -import {KernelBackend} from './backends/backend'; -import {getKernelsForBackend, registerKernel} from './kernel_registry'; +// import {setTestEnvs} from './jasmine_util'; +// import {MathBackendCPU} from './backends/cpu/backend_cpu'; +// import {registerBackend} from './globals'; +// import {KernelBackend} from './backends/backend'; +// import {getKernelsForBackend, registerKernel} from './kernel_registry'; -// tslint:disable-next-line:no-require-imports -const jasmine = require('jasmine'); +// // tslint:disable-next-line:no-require-imports +// const jasmine = require('jasmine'); -process.on('unhandledRejection', e => { - throw e; -}); +// process.on('unhandledRejection', e => { +// throw e; +// }); -class AsyncCPUBackend extends KernelBackend {} -const asyncBackend = new AsyncCPUBackend(); +// class AsyncCPUBackend extends KernelBackend {} +// const asyncBackend = new AsyncCPUBackend(); -// backend is cast as any so that we can access methods through bracket -// notation. -// tslint:disable-next-line:no-any -const backend: any = new MathBackendCPU(); -const proxyBackend = new Proxy(asyncBackend, { - get(target, name, receiver) { - if (name === 'readSync') { - throw new Error( - `Found dataSync() in a unit test. This is disabled so unit tests ` + - `can run in backends that only support async data. Please use ` + - `.data() in unit tests or if you truly are testing dataSync(), ` + - `constrain your test with SYNC_BACKEND_ENVS`); - } - const origSymbol = backend[name]; - if (typeof origSymbol === 'function') { - // tslint:disable-next-line:no-any - return (...args: any[]) => { - return origSymbol.apply(backend, args); - }; - } else { - return origSymbol; - } - } -}); +// // backend is cast as any so that we can access methods through bracket +// // notation. +// // tslint:disable-next-line:no-any +// const backend: any = new MathBackendCPU(); +// const proxyBackend = new Proxy(asyncBackend, { +// get(target, name, receiver) { +// if (name === 'readSync') { +// throw new Error( +// `Found dataSync() in a unit test. This is disabled so unit tests ` +// + `can run in backends that only support async data. Please use ` + +// `.data() in unit tests or if you truly are testing dataSync(), ` + +// `constrain your test with SYNC_BACKEND_ENVS`); +// } +// const origSymbol = backend[name]; +// if (typeof origSymbol === 'function') { +// // tslint:disable-next-line:no-any +// return (...args: any[]) => { +// return origSymbol.apply(backend, args); +// }; +// } else { +// return origSymbol; +// } +// } +// }); -const proxyBackendName = 'test-async-cpu'; +// const proxyBackendName = 'test-async-cpu'; -// The registration is async on purpose, so we know our testing infra works -// with backends that have async init (e.g. WASM and WebGPU). -registerBackend(proxyBackendName, async () => proxyBackend); +// // The registration is async on purpose, so we know our testing infra works +// // with backends that have async init (e.g. WASM and WebGPU). +// registerBackend(proxyBackendName, async () => proxyBackend); -// All the kernels are registered under the 'cpu' name, so we need to register -// them also under the proxy backend name. -const kernels = getKernelsForBackend('cpu'); -kernels.forEach(({kernelName, kernelFunc, setupFunc}) => { - registerKernel( - {kernelName, backendName: proxyBackendName, kernelFunc, setupFunc}); -}); +// // All the kernels are registered under the 'cpu' name, so we need to +// register +// // them also under the proxy backend name. +// const kernels = getKernelsForBackend('cpu'); +// kernels.forEach(({kernelName, kernelFunc, setupFunc}) => { +// registerKernel( +// {kernelName, backendName: proxyBackendName, kernelFunc, setupFunc}); +// }); -setTestEnvs([{ - name: proxyBackendName, - backendName: proxyBackendName, - isDataSync: false, -}]); +// setTestEnvs([{ +// name: proxyBackendName, +// backendName: proxyBackendName, +// isDataSync: false, +// }]); -const runner = new jasmine(); +// const runner = new jasmine(); -runner.loadConfig({spec_files: ['dist/**/**_test.js'], random: false}); -runner.execute(); +// runner.loadConfig({spec_files: ['dist/**/**_test.js'], random: false}); +// runner.execute(); diff --git a/tfjs-core/yarn.lock b/tfjs-core/yarn.lock index e708e93c2b3..2457f9afbae 100644 --- a/tfjs-core/yarn.lock +++ b/tfjs-core/yarn.lock @@ -181,12 +181,12 @@ abbrev@1.0.x: integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= accepts@~1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" + mime-types "~2.1.24" + negotiator "0.6.2" acorn-dynamic-import@^4.0.0: version "4.0.0" @@ -287,10 +287,10 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.0.3.tgz#2fb624fe0e84bccab00afee3d0006ed310f22f09" - integrity sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g== +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -402,9 +402,9 @@ async-each@^1.0.1: integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@1.x, async@^1.5.2: version "1.5.2" @@ -511,9 +511,9 @@ blob@0.0.5: integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== bluebird@^3.3.0: - version "3.5.4" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" - integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bluebird@~3.4.1: version "3.4.7" @@ -526,20 +526,20 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== body-parser@^1.16.1: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: - bytes "3.0.0" + bytes "3.1.0" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" + http-errors "1.7.2" + iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" brace-expansion@^1.1.7: version "1.1.11" @@ -565,7 +565,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -793,10 +793,10 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cache-base@^1.0.1: version "1.0.1" @@ -893,19 +893,19 @@ chokidar@^2.1.1: fsevents "^1.2.7" chokidar@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681" - integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== - dependencies: - anymatch "^3.0.1" - braces "^3.0.2" - glob-parent "^5.0.0" - is-binary-path "^2.1.0" - is-glob "^4.0.1" - normalize-path "^3.0.0" - readdirp "^3.1.1" + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" optionalDependencies: - fsevents "^2.0.6" + fsevents "~2.1.2" chownr@^1.1.1: version "1.1.1" @@ -988,9 +988,9 @@ color-name@1.1.3: integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= colors@^1.1.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== combine-source-map@^0.8.0, combine-source-map@~0.8.0: version "0.8.0" @@ -1043,13 +1043,13 @@ concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: typedarray "^0.0.6" connect@^3.6.0: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== dependencies: debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" + finalhandler "1.1.2" + parseurl "~1.3.3" utils-merge "1.0.1" console-browserify@^1.1.0: @@ -1102,9 +1102,9 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.4.tgz#3a2837fc48e582e1ae25907afcd6cf03b0cc7a07" - integrity sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ== + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== core-util-is@~1.0.0: version "1.0.2" @@ -1207,7 +1207,7 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.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== @@ -1400,7 +1400,7 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== -encodeurl@~1.0.1: +encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= @@ -1570,10 +1570,10 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== events@^2.0.0: version "2.1.0" @@ -1675,17 +1675,17 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" find-up@^1.0.0: @@ -1704,16 +1704,16 @@ find-up@^3.0.0: locate-path "^3.0.0" flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== follow-redirects@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" - integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== dependencies: - debug "^3.2.6" + debug "^3.0.0" for-in@^1.0.2: version "1.0.2" @@ -1772,10 +1772,10 @@ fsevents@^1.2.7: nan "^2.9.2" node-pre-gyp "^0.10.0" -fsevents@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" - integrity sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== fstream@^1.0.12: version "1.0.12" @@ -1846,10 +1846,10 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" @@ -1876,7 +1876,7 @@ glob@^7.0.0, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.6, glob@^7.1.3: +glob@^7.0.6, glob@^7.1.1, glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -1888,7 +1888,7 @@ glob@^7.0.6, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.0, glob@^7.1.1: +glob@^7.1.0: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -2043,22 +2043,23 @@ htmlescape@^1.1.0: resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= -http-errors@1.6.3, http-errors@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== dependencies: depd "~1.1.2" inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" http-proxy@^1.13.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" @@ -2075,14 +2076,7 @@ https-proxy-agent@^2.2.1: agent-base "^4.1.0" debug "^3.1.0" -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -2215,7 +2209,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-binary-path@^2.1.0: +is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== @@ -2317,7 +2311,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -2755,18 +2749,7 @@ lodash@^4.17.10: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -log4js@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.1.0.tgz#57983c6a443546a8c8607e9cb045d2a117c27644" - integrity sha512-eDa+zZPeVEeK6QGJAePyXM6pg4P3n3TO5rX9iZMVY48JshsTyLJZLIL5HipI1kQ2qLsSyOpUqNND/C5H4WhhiA== - dependencies: - date-format "^2.0.0" - debug "^4.1.1" - flatted "^2.0.0" - rfdc "^1.1.2" - streamroller "^1.0.4" - -log4js@^4.0.1: +log4js@^4.0.0, log4js@^4.0.1: version "4.5.1" resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== @@ -2910,22 +2893,22 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" - integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== -mime-types@~2.1.18: - version "2.1.22" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" - integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== +mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: - mime-db "~1.38.0" + mime-db "1.43.0" mime@^2.3.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78" - integrity sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg== + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mimic-fn@^2.0.0: version "2.1.0" @@ -3056,10 +3039,10 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.6.0: version "2.6.1" @@ -3124,7 +3107,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -3436,10 +3419,10 @@ parseuri@0.0.5: dependencies: better-assert "~1.0.0" -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" @@ -3520,10 +3503,10 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -picomatch@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pidtree@^0.3.0: version "0.3.0" @@ -3651,10 +3634,10 @@ qjobs@^1.1.4: resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== querystring-es3@^0.2.1, querystring-es3@~0.2.0: version "0.2.1" @@ -3682,18 +3665,18 @@ randomfill@^1.0.3: safe-buffer "^5.1.0" range-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" unpipe "1.0.0" rc@^1.2.7: @@ -3770,12 +3753,12 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.1.tgz#b158123ac343c8b0f31d65680269cc0fc1025db1" - integrity sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ== +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== dependencies: - picomatch "^2.0.4" + picomatch "^2.0.7" rechoir@^0.6.2: version "0.6.2" @@ -3889,19 +3872,19 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rfdc@^1.1.2, rfdc@^1.1.4: +rfdc@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== -rimraf@2, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@~2.6.2: +rimraf@2, rimraf@^2.6.1, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -rimraf@^2.6.3: +rimraf@^2.6.0, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -4070,10 +4053,10 @@ setimmediate@^1.0.4, setimmediate@~1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.11" @@ -4163,9 +4146,9 @@ snapdragon@^0.8.1: use "^3.1.0" socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== socket.io-client@2.1.1: version "2.1.1" @@ -4321,16 +4304,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= - stream-browserify@^2.0.0, stream-browserify@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -4376,17 +4354,6 @@ stream-splicer@^2.0.0: inherits "^2.0.1" readable-stream "^2.0.2" -streamroller@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.5.tgz#71660c20b06b1a7b204d46085731ad13c10a562d" - integrity sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw== - dependencies: - async "^2.6.2" - date-format "^2.0.0" - debug "^3.2.6" - fs-extra "^7.0.1" - lodash "^4.17.11" - streamroller@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" @@ -4666,6 +4633,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" @@ -4744,13 +4716,13 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== +type-is@~1.6.17: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" - mime-types "~2.1.18" + mime-types "~2.1.24" typedarray@^0.0.6: version "0.0.6" From 5f82f28277b25ad7c3d0cd63337845b704a4eeac Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 11:13:17 -0400 Subject: [PATCH 02/46] add test runner to backend cpu --- tfjs-backend-cpu/karma.conf.js | 61 +++++++++++++++++++ tfjs-backend-cpu/package.json | 2 +- tfjs-backend-cpu/src/backend_cpu.ts | 7 ++- tfjs-backend-cpu/src/index.ts | 1 + ...end_cpu_test_registry.ts => setup_test.ts} | 10 ++- tfjs-backend-cpu/yarn.lock | 28 ++++----- 6 files changed, 85 insertions(+), 24 deletions(-) create mode 100644 tfjs-backend-cpu/karma.conf.js rename tfjs-backend-cpu/src/{backend_cpu_test_registry.ts => setup_test.ts} (70%) diff --git a/tfjs-backend-cpu/karma.conf.js b/tfjs-backend-cpu/karma.conf.js new file mode 100644 index 00000000000..23df1ce0ad7 --- /dev/null +++ b/tfjs-backend-cpu/karma.conf.js @@ -0,0 +1,61 @@ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + +const karmaTypescriptConfig = { + tsconfig: 'tsconfig.json', + // Disable coverage reports and instrumentation by default for tests + coverageOptions: {instrumentation: false}, + reports: {}, + bundlerOptions: { + // worker_node_test in tfjs-core contains a conditional require statement + // that confuses the bundler of karma-typescript. + ignore: ['./worker_node_test'] + } +}; + +module.exports = function(config) { + const args = []; + if (config.grep) { + args.push('--grep', config.grep); + } + if (config.flags) { + args.push('--flags', config.flags); + } + let exclude = []; + if (config.excludeTest != null) { + exclude.push(config.excludeTest); + } + + config.set({ + basePath: '', + frameworks: ['jasmine', 'karma-typescript'], + files: [ + 'src/setup_test.ts', // Setup the environment for the tests. + {pattern: 'src/**/*.ts'}, // Import all tests. + ], + exclude, + preprocessors: {'**/*.ts': ['karma-typescript']}, + karmaTypescriptConfig, + reporters: ['progress', 'karma-typescript'], + port: 9876, + colors: true, + autoWatch: false, + browsers: ['Chrome'], + singleRun: true, + client: {jasmine: {random: false}, args: args} + }) +} diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index eb9dc4e5cb5..3f056e8b11e 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -24,7 +24,7 @@ "clang-format": "~1.2.4", "jasmine": "~3.1.0", "jasmine-core": "~3.1.0", - "karma": "~4.2.0", + "karma": "~4.4.1", "karma-browserify": "~6.0.0", "karma-browserstack-launcher": "~1.4.0", "karma-chrome-launcher": "~2.2.0", diff --git a/tfjs-backend-cpu/src/backend_cpu.ts b/tfjs-backend-cpu/src/backend_cpu.ts index a1d7212f3fc..d7c3c3e7a57 100644 --- a/tfjs-backend-cpu/src/backend_cpu.ts +++ b/tfjs-backend-cpu/src/backend_cpu.ts @@ -69,7 +69,7 @@ export class MathBackendCPU extends KernelBackend { constructor() { super(); - // this.data = new DataStorage(this, engine()); + this.data = new DataStorage(this, engine()); } write(values: backend_util.BackendValues, shape: number[], dtype: DataType): @@ -3383,8 +3383,9 @@ export class MathBackendCPU extends KernelBackend { () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${ dataFormat}`); util.assert( - blockSize > 1, () => `blockSize should be > 1 for depthToSpace, but was: - ${blockSize}`); + blockSize > 1, + () => + `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`); const batchSize = x.shape[0]; const inputHeight = x.shape[1]; diff --git a/tfjs-backend-cpu/src/index.ts b/tfjs-backend-cpu/src/index.ts index 6ebaa86a21a..8d056f6d998 100644 --- a/tfjs-backend-cpu/src/index.ts +++ b/tfjs-backend-cpu/src/index.ts @@ -18,3 +18,4 @@ import {registerBackend} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from './backend_cpu'; registerBackend('cpu', () => new MathBackendCPU(), 1 /* priority */); +import './register_all_kernels'; diff --git a/tfjs-backend-cpu/src/backend_cpu_test_registry.ts b/tfjs-backend-cpu/src/setup_test.ts similarity index 70% rename from tfjs-backend-cpu/src/backend_cpu_test_registry.ts rename to tfjs-backend-cpu/src/setup_test.ts index 908bf37e31a..b9a08f978aa 100644 --- a/tfjs-backend-cpu/src/backend_cpu_test_registry.ts +++ b/tfjs-backend-cpu/src/setup_test.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2019 Google LLC. All Rights Reserved. + * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,10 +16,14 @@ */ // tslint:disable-next-line: no-imports-from-dist -import {Constraints, registerTestEnv} from '@tensorflow/tfjs-core/dist/jasmine_util'; +import {Constraints, setTestEnvs} from '@tensorflow/tfjs-core/dist/jasmine_util'; export const CPU_ENVS: Constraints = { predicate: testEnv => testEnv.backendName === 'cpu' }; -registerTestEnv({name: 'cpu', backendName: 'cpu', isDataSync: true}); +setTestEnvs([{name: 'cpu', backendName: 'cpu', isDataSync: true}]); + +// Import and run all the tests from core. +// tslint:disable-next-line:no-imports-from-dist +import '@tensorflow/tfjs-core/dist/tests'; diff --git a/tfjs-backend-cpu/yarn.lock b/tfjs-backend-cpu/yarn.lock index 35616624f01..7b21214f94c 100644 --- a/tfjs-backend-cpu/yarn.lock +++ b/tfjs-backend-cpu/yarn.lock @@ -980,11 +980,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^3.1.3: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" - integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== - core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1530,14 +1525,14 @@ find-up@^1.0.0: pinkie-promise "^2.0.0" flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== follow-redirects@^1.0.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb" - integrity sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ== + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== dependencies: debug "^3.0.0" @@ -2339,10 +2334,10 @@ karma-typescript@~4.1.1: util "^0.12.0" vm-browserify "1.1.0" -karma@~4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/karma/-/karma-4.2.0.tgz#27e88b310cde090d016980ff5444e3a239196fca" - integrity sha512-fmCuxN1rwJxTdZfOXK5LjlmS4Ana/OvzNMpkyLL/TLE8hmgSkpVpMYQ7RTVa8TNKRVQDZNl5W1oF5cfKfgIMlA== +karma@~4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/karma/-/karma-4.4.1.tgz#6d9aaab037a31136dc074002620ee11e8c2e32ab" + integrity sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A== dependencies: bluebird "^3.3.0" body-parser "^1.16.1" @@ -2350,7 +2345,6 @@ karma@~4.2.0: chokidar "^3.0.0" colors "^1.1.0" connect "^3.6.0" - core-js "^3.1.3" di "^0.0.1" dom-serialize "^2.2.0" flatted "^2.0.0" @@ -2358,7 +2352,7 @@ karma@~4.2.0: graceful-fs "^4.1.2" http-proxy "^1.13.0" isbinaryfile "^3.0.0" - lodash "^4.17.11" + lodash "^4.17.14" log4js "^4.0.0" mime "^2.3.1" minimatch "^3.0.2" From ee82ec2675fec63b5ec1e8c434bc22759ef68df8 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 11:30:14 -0400 Subject: [PATCH 03/46] small refactor --- tfjs-backend-cpu/src/backend_cpu_test.ts | 2 +- tfjs-backend-cpu/src/backend_cpu_test_envs.ts | 23 +++++++++++++++++++ tfjs-backend-cpu/src/index.ts | 2 +- tfjs-backend-cpu/src/setup_test.ts | 7 +----- 4 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 tfjs-backend-cpu/src/backend_cpu_test_envs.ts diff --git a/tfjs-backend-cpu/src/backend_cpu_test.ts b/tfjs-backend-cpu/src/backend_cpu_test.ts index bd89d903738..e1d07f15c88 100644 --- a/tfjs-backend-cpu/src/backend_cpu_test.ts +++ b/tfjs-backend-cpu/src/backend_cpu_test.ts @@ -24,7 +24,7 @@ import {describeWithFlags} from '@tensorflow/tfjs-core/dist/jasmine_util'; import {expectArraysClose, expectArraysEqual} from '@tensorflow/tfjs-core/dist/test_util'; import {MathBackendCPU} from './backend_cpu'; -import {CPU_ENVS} from './backend_cpu_test_registry'; +import {CPU_ENVS} from './backend_cpu_test_envs'; /** Private test util for decoding array of strings in utf-8. */ function decodeStrings(bytes: Uint8Array[]): string[] { diff --git a/tfjs-backend-cpu/src/backend_cpu_test_envs.ts b/tfjs-backend-cpu/src/backend_cpu_test_envs.ts new file mode 100644 index 00000000000..adb7ae21113 --- /dev/null +++ b/tfjs-backend-cpu/src/backend_cpu_test_envs.ts @@ -0,0 +1,23 @@ +/** + * @license + * Copyright 2020 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + +// tslint:disable-next-line: no-imports-from-dist +import {Constraints} from '@tensorflow/tfjs-core/dist/jasmine_util'; + +export const CPU_ENVS: Constraints = { + predicate: testEnv => testEnv.backendName === 'cpu' +}; diff --git a/tfjs-backend-cpu/src/index.ts b/tfjs-backend-cpu/src/index.ts index 8d056f6d998..75a0318c8ff 100644 --- a/tfjs-backend-cpu/src/index.ts +++ b/tfjs-backend-cpu/src/index.ts @@ -18,4 +18,4 @@ import {registerBackend} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from './backend_cpu'; registerBackend('cpu', () => new MathBackendCPU(), 1 /* priority */); -import './register_all_kernels'; +// import './register_all_kernels'; diff --git a/tfjs-backend-cpu/src/setup_test.ts b/tfjs-backend-cpu/src/setup_test.ts index b9a08f978aa..cce2bf030b1 100644 --- a/tfjs-backend-cpu/src/setup_test.ts +++ b/tfjs-backend-cpu/src/setup_test.ts @@ -16,12 +16,7 @@ */ // tslint:disable-next-line: no-imports-from-dist -import {Constraints, setTestEnvs} from '@tensorflow/tfjs-core/dist/jasmine_util'; - -export const CPU_ENVS: Constraints = { - predicate: testEnv => testEnv.backendName === 'cpu' -}; - +import {setTestEnvs} from '@tensorflow/tfjs-core/dist/jasmine_util'; setTestEnvs([{name: 'cpu', backendName: 'cpu', isDataSync: true}]); // Import and run all the tests from core. From 10e01b52d4f0a5401c443b4d359e7cfc14fe405a Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 13:08:41 -0400 Subject: [PATCH 04/46] add backend cpu to cloudbuild --- cloudbuild.yml | 8 +++ scripts/package_dependencies.json | 3 +- tfjs-backend-cpu/cloudbuild.yml | 39 ++++++++++++ tfjs-backend-cpu/karma.conf.js | 99 +++++++++++++++++++++++++---- tfjs-backend-cpu/package.json | 2 +- tfjs-backend-cpu/scripts/test-ci.sh | 40 ++++++++++++ 6 files changed, 178 insertions(+), 13 deletions(-) create mode 100644 tfjs-backend-cpu/cloudbuild.yml create mode 100644 tfjs-backend-cpu/scripts/test-ci.sh diff --git a/cloudbuild.yml b/cloudbuild.yml index fb2c9cd1144..db3e0f8240e 100644 --- a/cloudbuild.yml +++ b/cloudbuild.yml @@ -24,6 +24,14 @@ steps: waitFor: ['find-affected-packages'] env: ['NIGHTLY=$_NIGHTLY'] +# CPU backend. +- name: 'gcr.io/cloud-builders/gcloud' + entrypoint: 'bash' + id: 'tfjs-backend-cpu' + args: ['./scripts/run-build.sh', 'tfjs-backend-cpu'] + waitFor: ['find-affected-packages'] + env: ['NIGHTLY=$_NIGHTLY'] + # Converter. - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' diff --git a/scripts/package_dependencies.json b/scripts/package_dependencies.json index 6e1671d31fe..3ac3e000685 100644 --- a/scripts/package_dependencies.json +++ b/scripts/package_dependencies.json @@ -4,5 +4,6 @@ "tfjs-converter": ["tfjs-core"], "tfjs-layers": ["tfjs-core"], "tfjs-data": ["tfjs-core", "tfjs-layers"], - "tfjs-backend-wasm": ["tfjs-core"] + "tfjs-backend-wasm": ["tfjs-core"], + "tfjs-backend-cpu": ["tfjs-core"] } diff --git a/tfjs-backend-cpu/cloudbuild.yml b/tfjs-backend-cpu/cloudbuild.yml new file mode 100644 index 00000000000..33e4e566d36 --- /dev/null +++ b/tfjs-backend-cpu/cloudbuild.yml @@ -0,0 +1,39 @@ +steps: +# Install common dependencies. +- name: 'node:10' + id: 'yarn-common' + entrypoint: 'yarn' + args: ['install'] + +# Install webgpu dependencies. +- name: 'node:10' + dir: 'tfjs-backend-cpu' + id: 'yarn' + entrypoint: 'yarn' + args: ['install'] + waitFor: ['yarn-common'] + +# Build core from master. +- name: 'node:10' + dir: 'tfjs-backend-cpu' + id: 'build-core' + entrypoint: 'yarn' + args: ['build-core'] + waitFor: ['yarn-common'] + +# Run tests. +- name: 'node:10' + dir: 'tfjs-backend-cpu' + entrypoint: 'yarn' + id: 'test-backend-cpu' + args: ['test-ci'] + waitFor: ['build-core'] + +# General configuration +timeout: 1800s +logsBucket: 'gs://tfjs-build-logs' +substitutions: + _NIGHTLY: '' +options: + logStreamingOption: 'STREAM_ON' + substitution_option: 'ALLOW_LOOSE' diff --git a/tfjs-backend-cpu/karma.conf.js b/tfjs-backend-cpu/karma.conf.js index 23df1ce0ad7..235ebdc52a9 100644 --- a/tfjs-backend-cpu/karma.conf.js +++ b/tfjs-backend-cpu/karma.conf.js @@ -21,12 +21,36 @@ const karmaTypescriptConfig = { coverageOptions: {instrumentation: false}, reports: {}, bundlerOptions: { + sourceMap: true, + // Ignore the import of the `worker_threads` package used in a core test + // meant to run in node. + exclude: ['worker_threads'], // worker_node_test in tfjs-core contains a conditional require statement // that confuses the bundler of karma-typescript. ignore: ['./worker_node_test'] } }; +const devConfig = { + frameworks: ['jasmine', 'karma-typescript'], + files: ['src/setup_test.ts', {pattern: 'src/**/*.ts'}], + preprocessors: {'**/*.ts': ['karma-typescript']}, + karmaTypescriptConfig, + reporters: ['dots', 'karma-typescript'], +}; + +// const browserstackConfig = { +// frameworks: ['browserify', 'jasmine'], +// files: ['dist/setup_test.js', {pattern: 'dist/**/*_test.js'}], +// preprocessors: {'dist/**/*_test.js': ['browserify']}, +// browserify: {debug: false}, +// reporters: ['dots'], +// singleRun: true, +// hostname: 'bs-local.com', +// }; + + + module.exports = function(config) { const args = []; if (config.grep) { @@ -40,22 +64,75 @@ module.exports = function(config) { exclude.push(config.excludeTest); } + let extraConfig = null; + if (config.browserstack) { + extraConfig = devConfig; + } else { + extraConfig = devConfig; + } + config.set({ - basePath: '', - frameworks: ['jasmine', 'karma-typescript'], - files: [ - 'src/setup_test.ts', // Setup the environment for the tests. - {pattern: 'src/**/*.ts'}, // Import all tests. - ], + ...extraConfig, exclude, - preprocessors: {'**/*.ts': ['karma-typescript']}, karmaTypescriptConfig, - reporters: ['progress', 'karma-typescript'], - port: 9876, colors: true, autoWatch: false, browsers: ['Chrome'], - singleRun: true, - client: {jasmine: {random: false}, args: args} + client: {jasmine: {random: false}, args: args}, + browserStack: { + username: process.env.BROWSERSTACK_USERNAME, + accessKey: process.env.BROWSERSTACK_KEY + }, + captureTimeout: 120000, + reportSlowerThan: 500, + browserNoActivityTimeout: 240000, + customLaunchers: { + // For browserstack configs see: + // https://www.browserstack.com/automate/node + bs_chrome_mac: { + base: 'BrowserStack', + browser: 'chrome', + browser_version: 'latest', + os: 'OS X', + os_version: 'High Sierra' + }, + bs_firefox_mac: { + base: 'BrowserStack', + browser: 'firefox', + browser_version: 'latest', + os: 'OS X', + os_version: 'High Sierra' + }, + bs_safari_mac: { + base: 'BrowserStack', + browser: 'safari', + browser_version: 'latest', + os: 'OS X', + os_version: 'High Sierra' + }, + bs_ios_11: { + base: 'BrowserStack', + device: 'iPhone X', + os: 'iOS', + os_version: '11.0', + real_mobile: true + }, + bs_android_9: { + base: 'BrowserStack', + device: 'Google Pixel 3 XL', + os: 'android', + os_version: '9.0', + real_mobile: true + }, + win_10_chrome: { + base: 'BrowserStack', + browser: 'chrome', + // Latest Chrome on Windows has WebGL problems: + // https://github.com/tensorflow/tfjs/issues/2272 + browser_version: '77.0', + os: 'Windows', + os_version: '10' + }, + }, }) } diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index 3f056e8b11e..704f7e3c483 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -48,7 +48,7 @@ }, "scripts": { "build-ci": "tsc", - "build": "tsc", + "build": "rimraf dist/ && tsc", "build-core": "cd ../tfjs-core && yarn && yarn build", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", diff --git a/tfjs-backend-cpu/scripts/test-ci.sh b/tfjs-backend-cpu/scripts/test-ci.sh new file mode 100644 index 00000000000..bd4fec2c586 --- /dev/null +++ b/tfjs-backend-cpu/scripts/test-ci.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# Copyright 2019 Google LLC. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================= + +set -e + +yarn lint +yarn build + +if [ "$NIGHTLY" = true ] +then + # Run the first karma separately so it can download the BrowserStack binary + # without conflicting with others. + yarn run-browserstack --browsers=bs_safari_mac,bs_ios_11 + + # Run the rest of the karma tests in parallel. These runs will reuse the + # already downloaded binary. + npm-run-all -p -c --aggregate-output \ + "run-browserstack --browsers=bs_android_9" \ + "run-browserstack --browsers=bs_firefox_mac,bs_chrome_mac" \ + "run-browserstack --browsers=win_10_chrome" \ + + + # Safari doesn't have offscreen canvas so use it to test cpu in a webworker. + # yarn test-webworker --browsers=bs_safari_mac +else + yarn run-browserstack --browsers=bs_chrome_mac +fi From 549f151a4a145bdfec4aecc085f4eea8b2f7f21a Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 13:25:02 -0400 Subject: [PATCH 05/46] fix file perms --- tfjs-backend-cpu/scripts/test-ci.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tfjs-backend-cpu/scripts/test-ci.sh diff --git a/tfjs-backend-cpu/scripts/test-ci.sh b/tfjs-backend-cpu/scripts/test-ci.sh old mode 100644 new mode 100755 From 1423b74ddca32c0290eb8a4bec5ae253082f77dd Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 15:37:08 -0400 Subject: [PATCH 06/46] fix test-snippets --- tfjs-backend-cpu/src/index.ts | 2 +- tfjs-core/package.json | 4 +++- tfjs-core/scripts/test_snippets/test_snippets.ts | 3 ++- tfjs-core/yarn.lock | 4 ++++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tfjs-backend-cpu/src/index.ts b/tfjs-backend-cpu/src/index.ts index 75a0318c8ff..8d056f6d998 100644 --- a/tfjs-backend-cpu/src/index.ts +++ b/tfjs-backend-cpu/src/index.ts @@ -18,4 +18,4 @@ import {registerBackend} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from './backend_cpu'; registerBackend('cpu', () => new MathBackendCPU(), 1 /* priority */); -// import './register_all_kernels'; +import './register_all_kernels'; diff --git a/tfjs-core/package.json b/tfjs-core/package.json index 8b5c83b2b8b..51e004c53c9 100644 --- a/tfjs-core/package.json +++ b/tfjs-core/package.json @@ -21,6 +21,7 @@ "devDependencies": { "@bazel/bazel": "^0.24.0", "@bazel/typescript": "^0.27.8", + "@tensorflow/tfjs-cpu": "link:../tfjs-backend-cpu", "@types/jasmine": "~3.0.0", "@types/node": "~9.6.0", "@types/node-fetch": "~2.1.2", @@ -55,6 +56,7 @@ "build-ci": "./scripts/enumerate-tests.js --ci && tsc && yarn build-test-snippets", "build": "node ./scripts/enumerate-tests.js && tsc", "build-npm": "./scripts/build-npm.sh", + "build-cpu-backend": "cd ../tfjs-backend-cpu && yarn && yarn build", "build:bazel": "bazel build //...", "build-test-snippets": "yarn tsc --project ./scripts/test_snippets/tsconfig.json", "format-all": "clang-format -i -style=Google --glob=src/**/*.ts", @@ -73,7 +75,7 @@ "test-async-backends-ci": "node dist/test_async_backends.js", "test-integration": "yarn && ./scripts/test-integration.js", "test-ci": "./scripts/test-ci.sh", - "test-snippets": "ts-node ./scripts/test_snippets/test_snippets.ts" + "test-snippets": "yarn build-cpu-backend && ts-node ./scripts/test_snippets/test_snippets.ts" }, "dependencies": { "@types/offscreencanvas": "~2019.3.0", diff --git a/tfjs-core/scripts/test_snippets/test_snippets.ts b/tfjs-core/scripts/test_snippets/test_snippets.ts index 906222d4d05..a4677a77e70 100644 --- a/tfjs-core/scripts/test_snippets/test_snippets.ts +++ b/tfjs-core/scripts/test_snippets/test_snippets.ts @@ -15,7 +15,8 @@ * limitations under the License. * ============================================================================= */ -import * as tf from '../../src/index'; +import * as tf from '../../dist/index'; +import '@tensorflow/tfjs-cpu'; import {parseAndEvaluateSnippets} from './util'; parseAndEvaluateSnippets(tf); diff --git a/tfjs-core/yarn.lock b/tfjs-core/yarn.lock index 2457f9afbae..19099c6a63f 100644 --- a/tfjs-core/yarn.lock +++ b/tfjs-core/yarn.lock @@ -105,6 +105,10 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= +"@tensorflow/tfjs-cpu@link:../tfjs-backend-cpu": + version "0.0.0" + uid "" + "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" From 9616a99fad0dfeb702464a00a8de5f8fdc758d00 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 16:32:32 -0400 Subject: [PATCH 07/46] add secrets --- tfjs-backend-cpu/cloudbuild.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tfjs-backend-cpu/cloudbuild.yml b/tfjs-backend-cpu/cloudbuild.yml index 33e4e566d36..3aaf16ef247 100644 --- a/tfjs-backend-cpu/cloudbuild.yml +++ b/tfjs-backend-cpu/cloudbuild.yml @@ -30,6 +30,10 @@ steps: waitFor: ['build-core'] # General configuration +secrets: +- kmsKeyName: projects/learnjs-174218/locations/global/keyRings/tfjs/cryptoKeys/enc + secretEnv: + BROWSERSTACK_KEY: CiQAkwyoIW0LcnxymzotLwaH4udVTQFBEN4AEA5CA+a3+yflL2ASPQAD8BdZnGARf78MhH5T9rQqyz9HNODwVjVIj64CTkFlUCGrP1B2HX9LXHWHLmtKutEGTeFFX9XhuBzNExA= timeout: 1800s logsBucket: 'gs://tfjs-build-logs' substitutions: From 94f068ab29cde0526f8237d11537b0d9c76f4267 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 16:35:07 -0400 Subject: [PATCH 08/46] save --- tfjs-core/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tfjs-core/package.json b/tfjs-core/package.json index 51e004c53c9..cd99973338e 100644 --- a/tfjs-core/package.json +++ b/tfjs-core/package.json @@ -56,7 +56,7 @@ "build-ci": "./scripts/enumerate-tests.js --ci && tsc && yarn build-test-snippets", "build": "node ./scripts/enumerate-tests.js && tsc", "build-npm": "./scripts/build-npm.sh", - "build-cpu-backend": "cd ../tfjs-backend-cpu && yarn && yarn build", + "build-cpu-backend": "cd ../tfjs-backend-cpu && yarn && yarn build-ci", "build:bazel": "bazel build //...", "build-test-snippets": "yarn tsc --project ./scripts/test_snippets/tsconfig.json", "format-all": "clang-format -i -style=Google --glob=src/**/*.ts", @@ -75,7 +75,7 @@ "test-async-backends-ci": "node dist/test_async_backends.js", "test-integration": "yarn && ./scripts/test-integration.js", "test-ci": "./scripts/test-ci.sh", - "test-snippets": "yarn build-cpu-backend && ts-node ./scripts/test_snippets/test_snippets.ts" + "test-snippets": "yarn build && yarn build-cpu-backend && ts-node ./scripts/test_snippets/test_snippets.ts" }, "dependencies": { "@types/offscreencanvas": "~2019.3.0", From cd1f2ce914d3dbf8c1835c69b01b68fcbee87ee8 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 16:39:05 -0400 Subject: [PATCH 09/46] save --- tfjs-backend-cpu/cloudbuild.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tfjs-backend-cpu/cloudbuild.yml b/tfjs-backend-cpu/cloudbuild.yml index 3aaf16ef247..cc9e62d80e5 100644 --- a/tfjs-backend-cpu/cloudbuild.yml +++ b/tfjs-backend-cpu/cloudbuild.yml @@ -28,6 +28,8 @@ steps: id: 'test-backend-cpu' args: ['test-ci'] waitFor: ['build-core'] + env: ['BROWSERSTACK_USERNAME=deeplearnjs1'] + secretEnv: ['BROWSERSTACK_KEY'] # General configuration secrets: From 6cb55461da9d3a9512cd02e152a2279b7247772e Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 16:57:58 -0400 Subject: [PATCH 10/46] cleanup --- tfjs-backend-cpu/karma.conf.js | 36 +++++++++------------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/tfjs-backend-cpu/karma.conf.js b/tfjs-backend-cpu/karma.conf.js index 235ebdc52a9..6ec1a941d8f 100644 --- a/tfjs-backend-cpu/karma.conf.js +++ b/tfjs-backend-cpu/karma.conf.js @@ -31,24 +31,6 @@ const karmaTypescriptConfig = { } }; -const devConfig = { - frameworks: ['jasmine', 'karma-typescript'], - files: ['src/setup_test.ts', {pattern: 'src/**/*.ts'}], - preprocessors: {'**/*.ts': ['karma-typescript']}, - karmaTypescriptConfig, - reporters: ['dots', 'karma-typescript'], -}; - -// const browserstackConfig = { -// frameworks: ['browserify', 'jasmine'], -// files: ['dist/setup_test.js', {pattern: 'dist/**/*_test.js'}], -// preprocessors: {'dist/**/*_test.js': ['browserify']}, -// browserify: {debug: false}, -// reporters: ['dots'], -// singleRun: true, -// hostname: 'bs-local.com', -// }; - module.exports = function(config) { @@ -64,20 +46,20 @@ module.exports = function(config) { exclude.push(config.excludeTest); } - let extraConfig = null; - if (config.browserstack) { - extraConfig = devConfig; - } else { - extraConfig = devConfig; - } - config.set({ - ...extraConfig, - exclude, + frameworks: ['jasmine', 'karma-typescript'], + files: [ + 'src/setup_test.ts', + {pattern: 'src/**/*.ts'}, + ], + preprocessors: {'**/*.ts': ['karma-typescript']}, karmaTypescriptConfig, + reporters: ['dots', 'karma-typescript'], + exclude, colors: true, autoWatch: false, browsers: ['Chrome'], + singleRun: true, client: {jasmine: {random: false}, args: args}, browserStack: { username: process.env.BROWSERSTACK_USERNAME, From 57cff9da1f7f8f2cbbf2f650d5f1f36efc0799c7 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 17:09:45 -0400 Subject: [PATCH 11/46] disable cpu testEnv in nightly of core. --- tfjs-converter/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tfjs-converter/package.json b/tfjs-converter/package.json index 0ec81daeec7..1fa97c8f9c0 100644 --- a/tfjs-converter/package.json +++ b/tfjs-converter/package.json @@ -19,6 +19,7 @@ }, "devDependencies": { "@tensorflow/tfjs-core": "link:../tfjs-core", + "@tensorflow/tfjs-cpu": "link:../tfjs-backend-cpu", "@types/deep-equal": "^1.0.1", "@types/jasmine": "~2.8.6", "@types/long": "~3.0.32", From 1c56c99e9cbecf5911430b569152ce206f088581 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 17:11:15 -0400 Subject: [PATCH 12/46] add cpu backend as dev dep of converter --- tfjs-converter/package.json | 3 ++- tfjs-converter/run_tests.ts | 2 ++ tfjs-converter/yarn.lock | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tfjs-converter/package.json b/tfjs-converter/package.json index 1fa97c8f9c0..803c5e9d392 100644 --- a/tfjs-converter/package.json +++ b/tfjs-converter/package.json @@ -58,8 +58,9 @@ "build": "yarn gen-json --test && tsc", "build-ci": "yarn gen-json --test && tsc", "build-core": "cd ../tfjs-core && yarn && yarn build", + "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", - "build-deps": "yarn build-core", + "build-deps": "yarn build-core && yarn build-backend-cpu", "build-deps-ci": "yarn build-core-ci", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", diff --git a/tfjs-converter/run_tests.ts b/tfjs-converter/run_tests.ts index 2fdce3c4f78..61403eb9d3f 100644 --- a/tfjs-converter/run_tests.ts +++ b/tfjs-converter/run_tests.ts @@ -15,6 +15,8 @@ * ============================================================================= */ +// Use the CPU backend for running tests. +import '@tensorflow/tfjs-cpu'; // tslint:disable-next-line:no-imports-from-dist import * as jasmine_util from '@tensorflow/tfjs-core/dist/jasmine_util'; diff --git a/tfjs-converter/yarn.lock b/tfjs-converter/yarn.lock index 7e49367c2f0..2993b2e843e 100644 --- a/tfjs-converter/yarn.lock +++ b/tfjs-converter/yarn.lock @@ -59,6 +59,10 @@ version "0.0.0" uid "" +"@tensorflow/tfjs-cpu@link:../tfjs-backend-cpu": + version "0.0.0" + uid "" + "@types/deep-equal@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/deep-equal/-/deep-equal-1.0.1.tgz#71cfabb247c22bcc16d536111f50c0ed12476b03" From 136be4afc62ab19d7596f99d8202c6b4481165ff Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 17:16:15 -0400 Subject: [PATCH 13/46] save --- tfjs-core/src/setup_test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tfjs-core/src/setup_test.ts b/tfjs-core/src/setup_test.ts index 48a85c0135c..d2666626180 100644 --- a/tfjs-core/src/setup_test.ts +++ b/tfjs-core/src/setup_test.ts @@ -15,6 +15,9 @@ * ============================================================================= */ +// Register the CPU backend as a default backend for tests. +import '@tensorflow/tfjs-cpu'; + /** * This file is necessary so we register all test environments before we start * executing tests. From 2f9cfe62f25164bd1b6833552400de56e3ec8119 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 17:30:05 -0400 Subject: [PATCH 14/46] save --- tfjs-converter/run_tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tfjs-converter/run_tests.ts b/tfjs-converter/run_tests.ts index 61403eb9d3f..5e9fcbb2e6e 100644 --- a/tfjs-converter/run_tests.ts +++ b/tfjs-converter/run_tests.ts @@ -16,7 +16,7 @@ */ // Use the CPU backend for running tests. -import '@tensorflow/tfjs-cpu'; +import '@tensorflow/tfjs-backend-cpu'; // tslint:disable-next-line:no-imports-from-dist import * as jasmine_util from '@tensorflow/tfjs-core/dist/jasmine_util'; From 5adc5c1c808ca5f794ba34f9a0738bbbd28aeb70 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 1 Apr 2020 17:34:06 -0400 Subject: [PATCH 15/46] save --- tfjs-converter/package.json | 2 +- tfjs-converter/yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tfjs-converter/package.json b/tfjs-converter/package.json index 803c5e9d392..91c42dd3cd7 100644 --- a/tfjs-converter/package.json +++ b/tfjs-converter/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@tensorflow/tfjs-core": "link:../tfjs-core", - "@tensorflow/tfjs-cpu": "link:../tfjs-backend-cpu", + "@tensorflow/tfjs-backend-cpu": "link:../tfjs-backend-cpu", "@types/deep-equal": "^1.0.1", "@types/jasmine": "~2.8.6", "@types/long": "~3.0.32", diff --git a/tfjs-converter/yarn.lock b/tfjs-converter/yarn.lock index 2993b2e843e..73c3d71a198 100644 --- a/tfjs-converter/yarn.lock +++ b/tfjs-converter/yarn.lock @@ -55,11 +55,11 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@tensorflow/tfjs-core@link:../tfjs-core": +"@tensorflow/tfjs-backend-cpu@link:../tfjs-backend-cpu": version "0.0.0" uid "" -"@tensorflow/tfjs-cpu@link:../tfjs-backend-cpu": +"@tensorflow/tfjs-core@link:../tfjs-core": version "0.0.0" uid "" From 18dc1ca96779a0a14cea68fba0adc694fa580afc Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 10:48:32 -0400 Subject: [PATCH 16/46] exclude web worker test from backend test suite --- tfjs-backend-cpu/src/setup_test.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tfjs-backend-cpu/src/setup_test.ts b/tfjs-backend-cpu/src/setup_test.ts index cce2bf030b1..28823597573 100644 --- a/tfjs-backend-cpu/src/setup_test.ts +++ b/tfjs-backend-cpu/src/setup_test.ts @@ -16,9 +16,22 @@ */ // tslint:disable-next-line: no-imports-from-dist -import {setTestEnvs} from '@tensorflow/tfjs-core/dist/jasmine_util'; +import {setTestEnvs, setupTestFilters, TestFilter} from '@tensorflow/tfjs-core/dist/jasmine_util'; + setTestEnvs([{name: 'cpu', backendName: 'cpu', isDataSync: true}]); -// Import and run all the tests from core. +const TEST_FILTERS: TestFilter[] = []; +const customInclude = (testName: string) => { + // Exclude webworker test + if (testName.includes('computation in worker')) { + return false; + } + // Include all other tests. + return true; +}; + +setupTestFilters(TEST_FILTERS, customInclude); + +// Import and run tests from core. // tslint:disable-next-line:no-imports-from-dist import '@tensorflow/tfjs-core/dist/tests'; From 8801964cc856cae6a7295ceffbb72ec937ed90d9 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 10:52:39 -0400 Subject: [PATCH 17/46] converter cloudbuild, run yarn install --- tfjs-converter/cloudbuild.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tfjs-converter/cloudbuild.yml b/tfjs-converter/cloudbuild.yml index 39667e4dd71..77c8e803d39 100644 --- a/tfjs-converter/cloudbuild.yml +++ b/tfjs-converter/cloudbuild.yml @@ -6,6 +6,15 @@ steps: id: 'yarn-common' args: ['install'] +# Install tfjs-converter dependencies +- name: 'node:10' + dir: 'tfjs-converter' + entrypoint: 'yarn' + id: 'yarn' + args: ['install'] + waitFor: ['yarn-common'] + env: ['NIGHTLY=$_NIGHTLY'] + # Run javascript tests. - name: 'node:10' dir: 'tfjs-converter' From e0d78c626b9da95fad8117a435f4884853b0ec5d Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 11:03:27 -0400 Subject: [PATCH 18/46] add backend-cpu as devDep in data and layers --- tfjs-data/package.json | 1 + tfjs-data/src/test_node.ts | 1 + tfjs-data/yarn.lock | 4 ++++ tfjs-layers/karma.conf.js | 6 +++++- tfjs-layers/package.json | 1 + tfjs-layers/src/setup_tests.ts | 18 ++++++++++++++++++ tfjs-layers/yarn.lock | 4 ++++ 7 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 tfjs-layers/src/setup_tests.ts diff --git a/tfjs-data/package.json b/tfjs-data/package.json index 9ce9bd17dce..a0cc50c3dea 100644 --- a/tfjs-data/package.json +++ b/tfjs-data/package.json @@ -14,6 +14,7 @@ "devDependencies": { "@tensorflow/tfjs-core": "link:../tfjs-core", "@tensorflow/tfjs-layers": "link:../tfjs-layers", + "@tensorflow/tfjs-backend-cpu": "link:../tfjs-backend-cpu", "@types/jasmine": "~2.5.53", "@types/seedrandom": "^2.4.27", "@types/utf8": "~2.1.6", diff --git a/tfjs-data/src/test_node.ts b/tfjs-data/src/test_node.ts index da065a9358b..1482da4a09b 100644 --- a/tfjs-data/src/test_node.ts +++ b/tfjs-data/src/test_node.ts @@ -15,6 +15,7 @@ * ============================================================================= */ +import '@tensorflow/tfjs-backend-cpu'; // tslint:disable-next-line: no-imports-from-dist import {setTestEnvs} from '@tensorflow/tfjs-core/dist/jasmine_util'; diff --git a/tfjs-data/yarn.lock b/tfjs-data/yarn.lock index 695892c5b55..096c80407a1 100644 --- a/tfjs-data/yarn.lock +++ b/tfjs-data/yarn.lock @@ -2,6 +2,10 @@ # yarn lockfile v1 +"@tensorflow/tfjs-backend-cpu@link:../tfjs-backend-cpu": + version "0.0.0" + uid "" + "@tensorflow/tfjs-core@link:../tfjs-core": version "0.0.0" uid "" diff --git a/tfjs-layers/karma.conf.js b/tfjs-layers/karma.conf.js index c02bfe67ff5..be8e497b8e4 100644 --- a/tfjs-layers/karma.conf.js +++ b/tfjs-layers/karma.conf.js @@ -33,7 +33,11 @@ if (coverageEnabled) { module.exports = function(config) { config.set({ frameworks: ['jasmine', 'karma-typescript'], - files: [{pattern: 'src/**/*.ts'}], + files: [ + // Setup the environment for the tests. + 'src/setup_test.ts', + {pattern: 'src/**/*.ts'}, + ], preprocessors: { '**/*.ts': ['karma-typescript'], }, diff --git a/tfjs-layers/package.json b/tfjs-layers/package.json index 2e916b0d95c..79d1eeab2be 100644 --- a/tfjs-layers/package.json +++ b/tfjs-layers/package.json @@ -13,6 +13,7 @@ "miniprogram": "dist/miniprogram", "devDependencies": { "@tensorflow/tfjs-core": "link:../tfjs-core", + "@tensorflow/tfjs-backend-cpu": "link:../tfjs-backend-cpu", "@types/jasmine": "~2.5.53", "clang-format": "~1.2.2", "http-server": "~0.10.0", diff --git a/tfjs-layers/src/setup_tests.ts b/tfjs-layers/src/setup_tests.ts new file mode 100644 index 00000000000..15e5f80cb54 --- /dev/null +++ b/tfjs-layers/src/setup_tests.ts @@ -0,0 +1,18 @@ +/** + * @license + * Copyright 2020 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + +import '@tensorflow/tfjs-backend-cpu'; diff --git a/tfjs-layers/yarn.lock b/tfjs-layers/yarn.lock index ca7da050eae..44bbcba6952 100644 --- a/tfjs-layers/yarn.lock +++ b/tfjs-layers/yarn.lock @@ -2,6 +2,10 @@ # yarn lockfile v1 +"@tensorflow/tfjs-backend-cpu@link:../tfjs-backend-cpu": + version "0.0.0" + uid "" + "@tensorflow/tfjs-core@link:../tfjs-core": version "0.0.0" uid "" From 0a8f8a87b2c8b8d648b3902eb44efb89b7c87433 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 11:37:32 -0400 Subject: [PATCH 19/46] typo --- tfjs-layers/karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tfjs-layers/karma.conf.js b/tfjs-layers/karma.conf.js index be8e497b8e4..d183633560c 100644 --- a/tfjs-layers/karma.conf.js +++ b/tfjs-layers/karma.conf.js @@ -35,7 +35,7 @@ module.exports = function(config) { frameworks: ['jasmine', 'karma-typescript'], files: [ // Setup the environment for the tests. - 'src/setup_test.ts', + 'src/setup_tests.ts', {pattern: 'src/**/*.ts'}, ], preprocessors: { From 843acc6341009a356dfea8e108ad8ef5df4f2d5e Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 11:39:04 -0400 Subject: [PATCH 20/46] typo --- tfjs-converter/cloudbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tfjs-converter/cloudbuild.yml b/tfjs-converter/cloudbuild.yml index 77c8e803d39..6955ca5d64d 100644 --- a/tfjs-converter/cloudbuild.yml +++ b/tfjs-converter/cloudbuild.yml @@ -21,7 +21,7 @@ steps: entrypoint: 'yarn' id: 'test-js' args: ['test-ci'] - waitFor: ['yarn-common'] + waitFor: ['yarn'] env: ['NIGHTLY=$_NIGHTLY'] # Run python tests. From d0864c6f71d9d1887ca95e51efb769d975e20491 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 12:00:59 -0400 Subject: [PATCH 21/46] fix --- tfjs-converter/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tfjs-converter/package.json b/tfjs-converter/package.json index 91c42dd3cd7..bd99142fd41 100644 --- a/tfjs-converter/package.json +++ b/tfjs-converter/package.json @@ -61,7 +61,7 @@ "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", "build-deps": "yarn build-core && yarn build-backend-cpu", - "build-deps-ci": "yarn build-core-ci", + "build-deps-ci": "yarn build-core-ci && yarn build-backend-cpu", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", "publish-local": "yarn build-npm && yalc push", From 4631eebe5326081f36cd72cec2172fcb3b62eb56 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 12:08:21 -0400 Subject: [PATCH 22/46] fix build deps --- tfjs-data/package.json | 3 ++- tfjs-layers/package.json | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tfjs-data/package.json b/tfjs-data/package.json index a0cc50c3dea..83e7d994972 100644 --- a/tfjs-data/package.json +++ b/tfjs-data/package.json @@ -45,8 +45,9 @@ "build-core": "cd ../tfjs-core && yarn && yarn build", "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", "build-layers": "cd ../tfjs-layers && yarn && yarn build", + "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", "build-layers-ci": "cd ../tfjs-layers && yarn && yarn build-ci", - "build-deps": "yarn build-core && yarn build-layers", + "build-deps": "yarn build-core && yarn build-layers && yarn build-backend-cpu", "build-deps-ci": "yarn build-core-ci && yarn build-layers-ci", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", diff --git a/tfjs-layers/package.json b/tfjs-layers/package.json index 79d1eeab2be..6fa57a135ec 100644 --- a/tfjs-layers/package.json +++ b/tfjs-layers/package.json @@ -42,9 +42,10 @@ "build": "tsc", "build-ci": "tsc", "build-core": "cd ../tfjs-core && yarn && yarn build", + "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", - "build-deps": "yarn build-core", - "build-deps-ci": "yarn build-core-ci", + "build-deps": "yarn build-core && yarn build-backend-cpu", + "build-deps-ci": "yarn build-core-ci && yarn build-backend-cpu", "build-npm": "./scripts/build-npm.sh", "format": "./tools/clang_format_ts.sh", "link-local": "yalc link", From 102ef4b15ba4e9fc242497c950a36a80387aae20 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 12:54:00 -0400 Subject: [PATCH 23/46] save --- tfjs-core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tfjs-core/package.json b/tfjs-core/package.json index cd99973338e..dd930c456ff 100644 --- a/tfjs-core/package.json +++ b/tfjs-core/package.json @@ -21,7 +21,7 @@ "devDependencies": { "@bazel/bazel": "^0.24.0", "@bazel/typescript": "^0.27.8", - "@tensorflow/tfjs-cpu": "link:../tfjs-backend-cpu", + "@tensorflow/tfjs-backend-cpu": "link:../tfjs-backend-cpu", "@types/jasmine": "~3.0.0", "@types/node": "~9.6.0", "@types/node-fetch": "~2.1.2", From 50a1f59924b989d4ebb562af3084ec838c59144a Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 15:19:31 -0400 Subject: [PATCH 24/46] save --- tfjs-data/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tfjs-data/package.json b/tfjs-data/package.json index 83e7d994972..1b07e898568 100644 --- a/tfjs-data/package.json +++ b/tfjs-data/package.json @@ -48,7 +48,7 @@ "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", "build-layers-ci": "cd ../tfjs-layers && yarn && yarn build-ci", "build-deps": "yarn build-core && yarn build-layers && yarn build-backend-cpu", - "build-deps-ci": "yarn build-core-ci && yarn build-layers-ci", + "build-deps-ci": "yarn build-core-ci && yarn build-layers-ci && yarn build-backend-cpu", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", "publish-local": "rimraf dist/ && yarn build-npm && yalc push", From d70fd2e874494d1bd76b43dd1d29b53c2bcaf644 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 15:27:02 -0400 Subject: [PATCH 25/46] typo --- tfjs-core/scripts/test_snippets/test_snippets.ts | 2 +- tfjs-core/src/setup_test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tfjs-core/scripts/test_snippets/test_snippets.ts b/tfjs-core/scripts/test_snippets/test_snippets.ts index a4677a77e70..e8f19550699 100644 --- a/tfjs-core/scripts/test_snippets/test_snippets.ts +++ b/tfjs-core/scripts/test_snippets/test_snippets.ts @@ -16,7 +16,7 @@ * ============================================================================= */ import * as tf from '../../dist/index'; -import '@tensorflow/tfjs-cpu'; +import '@tensorflow/tfjs-backend-cpu'; import {parseAndEvaluateSnippets} from './util'; parseAndEvaluateSnippets(tf); diff --git a/tfjs-core/src/setup_test.ts b/tfjs-core/src/setup_test.ts index d2666626180..b8daa0640a1 100644 --- a/tfjs-core/src/setup_test.ts +++ b/tfjs-core/src/setup_test.ts @@ -16,7 +16,7 @@ */ // Register the CPU backend as a default backend for tests. -import '@tensorflow/tfjs-cpu'; +import '@tensorflow/tfjs-backend-cpu'; /** * This file is necessary so we register all test environments before we start From 77388f8e27f511845c0d29139503a37521dd2970 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 15:41:56 -0400 Subject: [PATCH 26/46] save --- tfjs-data/scripts/test_snippets.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tfjs-data/scripts/test_snippets.ts b/tfjs-data/scripts/test_snippets.ts index 2894deae1e0..1eccc8b59e7 100644 --- a/tfjs-data/scripts/test_snippets.ts +++ b/tfjs-data/scripts/test_snippets.ts @@ -14,7 +14,9 @@ * limitations under the License. * ============================================================================= */ +import '@tensorflow/tfjs-backend-cpu'; import * as tfc from '@tensorflow/tfjs-core'; +// tslint:disable-next-line: no-imports-from-dist import {parseAndEvaluateSnippets} from '@tensorflow/tfjs-core/dist/scripts/test_snippets/util'; import * as tfl from '@tensorflow/tfjs-layers'; From 7f541a9daf28de83ba1205e3dc026fac2f25ff96 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 15:53:36 -0400 Subject: [PATCH 27/46] save --- tfjs-converter/scripts/test_snippets.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tfjs-converter/scripts/test_snippets.ts b/tfjs-converter/scripts/test_snippets.ts index da8dc083c34..6282df71ad7 100644 --- a/tfjs-converter/scripts/test_snippets.ts +++ b/tfjs-converter/scripts/test_snippets.ts @@ -14,6 +14,7 @@ * limitations under the License. * ============================================================================= */ +import '@tensorflow/tfjs-backend-cpu'; import * as tfc from '@tensorflow/tfjs-core'; // tslint:disable-next-line: no-imports-from-dist import {parseAndEvaluateSnippets} from '@tensorflow/tfjs-core/dist/scripts/test_snippets/util'; From 3bc1bc120fa0453eb9aa9c632cdfbbcaf3c96ad8 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 16:16:15 -0400 Subject: [PATCH 28/46] make sure cpu backend is built in ci --- tfjs-core/package.json | 3 ++- tfjs-core/yarn.lock | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tfjs-core/package.json b/tfjs-core/package.json index dd930c456ff..37044f26054 100644 --- a/tfjs-core/package.json +++ b/tfjs-core/package.json @@ -53,9 +53,10 @@ "yargs": "~13.2.2" }, "scripts": { - "build-ci": "./scripts/enumerate-tests.js --ci && tsc && yarn build-test-snippets", + "build-ci": "yarn build-deps-ci && ./scripts/enumerate-tests.js --ci && tsc && yarn build-test-snippets", "build": "node ./scripts/enumerate-tests.js && tsc", "build-npm": "./scripts/build-npm.sh", + "build-deps-ci": "yarn build-cpu-backend", "build-cpu-backend": "cd ../tfjs-backend-cpu && yarn && yarn build-ci", "build:bazel": "bazel build //...", "build-test-snippets": "yarn tsc --project ./scripts/test_snippets/tsconfig.json", diff --git a/tfjs-core/yarn.lock b/tfjs-core/yarn.lock index 19099c6a63f..35a2f004625 100644 --- a/tfjs-core/yarn.lock +++ b/tfjs-core/yarn.lock @@ -105,7 +105,7 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@tensorflow/tfjs-cpu@link:../tfjs-backend-cpu": +"@tensorflow/tfjs-backend-cpu@link:../tfjs-backend-cpu": version "0.0.0" uid "" From a21d48fc83ccff961217625afa4b619e4339e33e Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 22:12:58 -0400 Subject: [PATCH 29/46] restore engine test --- tfjs-backend-cpu/src/index.ts | 2 + tfjs-core/src/engine_test.ts | 314 +++++++++++++++++----------------- 2 files changed, 159 insertions(+), 157 deletions(-) diff --git a/tfjs-backend-cpu/src/index.ts b/tfjs-backend-cpu/src/index.ts index 8d056f6d998..2d87de514fc 100644 --- a/tfjs-backend-cpu/src/index.ts +++ b/tfjs-backend-cpu/src/index.ts @@ -19,3 +19,5 @@ import {registerBackend} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from './backend_cpu'; registerBackend('cpu', () => new MathBackendCPU(), 1 /* priority */); import './register_all_kernels'; + +export {MathBackendCPU}; diff --git a/tfjs-core/src/engine_test.ts b/tfjs-core/src/engine_test.ts index 131dee7d20d..673592aae37 100644 --- a/tfjs-core/src/engine_test.ts +++ b/tfjs-core/src/engine_test.ts @@ -452,75 +452,75 @@ describeWithFlags('disposeVariables', ALL_ENVS, () => { * concrete backend to exist. This test will work for any backend, but currently * this is the simplest backend to test against. */ -// describeWithFlags( -// 'Switching cpu backends', -// {predicate: testEnv => testEnv.backendName === 'cpu'}, () => { -// beforeEach(() => { -// tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); -// tf.registerBackend('cpu2', tf.findBackendFactory('cpu')); -// }); - -// afterEach(() => { -// tf.removeBackend('cpu1'); -// tf.removeBackend('cpu2'); -// }); - -// it('Move data from cpu1 to cpu2 backend', async () => { -// tf.setBackend('cpu1'); -// // This scalar lives in cpu1. -// const a = tf.scalar(5); - -// tf.setBackend('cpu2'); -// // This scalar lives in cpu2. -// const b = tf.scalar(3); - -// expect(tf.memory().numDataBuffers).toBe(2); -// expect(tf.memory().numTensors).toBe(2); -// expect(tf.memory().numBytes).toBe(8); - -// // Make sure you can read both tensors. -// expectArraysClose(await a.data(), [5]); -// expectArraysClose(await b.data(), [3]); - -// // Switch back to cpu1. -// tf.setBackend('cpu1'); -// // Again make sure you can read both tensors. -// expectArraysClose(await a.data(), [5]); -// expectArraysClose(await b.data(), [3]); - -// tf.dispose([a, b]); - -// expect(tf.memory().numDataBuffers).toBe(0); -// expect(tf.memory().numTensors).toBe(0); -// expect(tf.memory().numBytes).toBe(0); -// }); - -// it('can execute op with data from mixed backends', async () => { -// tf.setBackend('cpu1'); -// // This scalar lives in cpu1. -// const a = tf.scalar(5); - -// tf.setBackend('cpu2'); -// // This scalar lives in cpu2. -// const b = tf.scalar(3); - -// // Verify that ops can execute with mixed backend data. -// ENGINE.startScope(); -// tf.setBackend('cpu1'); -// expectArraysClose(await tf.add(a, b).data(), [8]); - -// tf.setBackend('cpu2'); -// expectArraysClose(await tf.add(a, b).data(), [8]); -// ENGINE.endScope(); -// expect(tf.memory().numTensors).toBe(2); -// expect(tf.memory().numDataBuffers).toBe(2); - -// tf.dispose([a, b]); - -// expect(tf.memory().numTensors).toBe(0); -// expect(tf.memory().numDataBuffers).toBe(0); -// }); -// }); +describeWithFlags( + 'Switching cpu backends', + {predicate: testEnv => testEnv.backendName === 'cpu'}, () => { + beforeEach(() => { + tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); + tf.registerBackend('cpu2', tf.findBackendFactory('cpu')); + }); + + afterEach(() => { + tf.removeBackend('cpu1'); + tf.removeBackend('cpu2'); + }); + + it('Move data from cpu1 to cpu2 backend', async () => { + tf.setBackend('cpu1'); + // This scalar lives in cpu1. + const a = tf.scalar(5); + + tf.setBackend('cpu2'); + // This scalar lives in cpu2. + const b = tf.scalar(3); + + expect(tf.memory().numDataBuffers).toBe(2); + expect(tf.memory().numTensors).toBe(2); + expect(tf.memory().numBytes).toBe(8); + + // Make sure you can read both tensors. + expectArraysClose(await a.data(), [5]); + expectArraysClose(await b.data(), [3]); + + // Switch back to cpu1. + tf.setBackend('cpu1'); + // Again make sure you can read both tensors. + expectArraysClose(await a.data(), [5]); + expectArraysClose(await b.data(), [3]); + + tf.dispose([a, b]); + + expect(tf.memory().numDataBuffers).toBe(0); + expect(tf.memory().numTensors).toBe(0); + expect(tf.memory().numBytes).toBe(0); + }); + + it('can execute op with data from mixed backends', async () => { + tf.setBackend('cpu1'); + // This scalar lives in cpu1. + const a = tf.scalar(5); + + tf.setBackend('cpu2'); + // This scalar lives in cpu2. + const b = tf.scalar(3); + + // Verify that ops can execute with mixed backend data. + ENGINE.startScope(); + tf.setBackend('cpu1'); + expectArraysClose(await tf.add(a, b).data(), [8]); + + tf.setBackend('cpu2'); + expectArraysClose(await tf.add(a, b).data(), [8]); + ENGINE.endScope(); + expect(tf.memory().numTensors).toBe(2); + expect(tf.memory().numDataBuffers).toBe(2); + + tf.dispose([a, b]); + + expect(tf.memory().numTensors).toBe(0); + expect(tf.memory().numDataBuffers).toBe(0); + }); + }); /** * The following unit test is a special integration-style test that assumes @@ -531,94 +531,94 @@ describeWithFlags('disposeVariables', ALL_ENVS, () => { * have coverage for when these backends are enabled and ensure they work with * the engine. */ -// describeWithFlags( -// 'Switching WebGL + CPU backends', { -// predicate: testEnv => testEnv.backendName === 'webgl' && -// ENGINE.backendNames().indexOf('webgl') !== -1 && -// ENGINE.backendNames().indexOf('cpu') !== -1 -// }, -// () => { -// beforeEach(() => { -// tf.registerBackend('webgl1', tf.findBackendFactory('webgl')); -// tf.registerBackend('webgl2', tf.findBackendFactory('webgl')); -// tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); -// }); - -// afterEach(() => { -// tf.removeBackend('webgl1'); -// tf.removeBackend('webgl2'); -// tf.removeBackend('cpu1'); -// }); - -// it('can execute op with data from mixed backends', async () => { -// tf.setBackend('webgl1'); -// const a = tf.scalar(5); - -// tf.setBackend('webgl2'); -// const b = tf.scalar(3); - -// tf.setBackend('cpu1'); -// const c = tf.scalar(2); - -// // Verify that ops can execute with mixed backend data. -// ENGINE.startScope(); -// tf.setBackend('webgl1'); -// expectArraysClose(await tf.addN([a, b, c]).data(), [10]); - -// tf.setBackend('webgl2'); -// expectArraysClose(await tf.addN([a, b, c]).data(), [10]); - -// tf.setBackend('cpu1'); -// expectArraysClose(await tf.addN([a, b, c]).data(), [10]); -// ENGINE.endScope(); - -// expect(tf.memory().numTensors).toBe(3); -// expect(tf.memory().numDataBuffers).toBe(3); - -// tf.dispose([a, b, c]); - -// expect(tf.memory().numTensors).toBe(0); -// expect(tf.memory().numDataBuffers).toBe(0); -// }); - -// it('fromPixels with mixed backends works', async () => { -// tf.setBackend('webgl1'); -// const a = tf.browser.fromPixels( -// new ImageData(new Uint8ClampedArray([1, 2, 3, 4]), 1, 1)); - -// tf.setBackend('webgl2'); -// const b = tf.browser.fromPixels( -// new ImageData(new Uint8ClampedArray([5, 6, 7, 8]), 1, 1)); - -// expectArraysClose(await tf.add(a, b).data(), [6, 8, 10]); -// }); - -// it('single tidy multiple backends', () => { -// const kernelFunc = tf.getKernel('Square', 'webgl').kernelFunc; -// tf.registerKernel( -// {kernelName: 'Square', backendName: 'webgl1', kernelFunc}); -// tf.registerKernel( -// {kernelName: 'Square', backendName: 'webgl2', kernelFunc}); - -// expect(tf.memory().numTensors).toBe(0); - -// tf.tidy(() => { -// tf.setBackend('webgl1'); -// const a = tf.scalar(1); -// a.square(); // Uploads to GPU. - -// tf.setBackend('webgl2'); -// const b = tf.scalar(1); -// b.square(); // Uploads to GPU. - -// expect(tf.memory().numTensors).toBe(4); -// }); -// expect(tf.memory().numTensors).toBe(0); - -// tf.unregisterKernel('Square', 'webgl1'); -// tf.unregisterKernel('Square', 'webgl2'); -// }); -// }); +describeWithFlags( + 'Switching WebGL + CPU backends', { + predicate: testEnv => testEnv.backendName === 'webgl' && + ENGINE.backendNames().indexOf('webgl') !== -1 && + ENGINE.backendNames().indexOf('cpu') !== -1 + }, + () => { + beforeEach(() => { + tf.registerBackend('webgl1', tf.findBackendFactory('webgl')); + tf.registerBackend('webgl2', tf.findBackendFactory('webgl')); + tf.registerBackend('cpu1', tf.findBackendFactory('cpu')); + }); + + afterEach(() => { + tf.removeBackend('webgl1'); + tf.removeBackend('webgl2'); + tf.removeBackend('cpu1'); + }); + + it('can execute op with data from mixed backends', async () => { + tf.setBackend('webgl1'); + const a = tf.scalar(5); + + tf.setBackend('webgl2'); + const b = tf.scalar(3); + + tf.setBackend('cpu1'); + const c = tf.scalar(2); + + // Verify that ops can execute with mixed backend data. + ENGINE.startScope(); + tf.setBackend('webgl1'); + expectArraysClose(await tf.addN([a, b, c]).data(), [10]); + + tf.setBackend('webgl2'); + expectArraysClose(await tf.addN([a, b, c]).data(), [10]); + + tf.setBackend('cpu1'); + expectArraysClose(await tf.addN([a, b, c]).data(), [10]); + ENGINE.endScope(); + + expect(tf.memory().numTensors).toBe(3); + expect(tf.memory().numDataBuffers).toBe(3); + + tf.dispose([a, b, c]); + + expect(tf.memory().numTensors).toBe(0); + expect(tf.memory().numDataBuffers).toBe(0); + }); + + it('fromPixels with mixed backends works', async () => { + tf.setBackend('webgl1'); + const a = tf.browser.fromPixels( + new ImageData(new Uint8ClampedArray([1, 2, 3, 4]), 1, 1)); + + tf.setBackend('webgl2'); + const b = tf.browser.fromPixels( + new ImageData(new Uint8ClampedArray([5, 6, 7, 8]), 1, 1)); + + expectArraysClose(await tf.add(a, b).data(), [6, 8, 10]); + }); + + it('single tidy multiple backends', () => { + const kernelFunc = tf.getKernel('Square', 'webgl').kernelFunc; + tf.registerKernel( + {kernelName: 'Square', backendName: 'webgl1', kernelFunc}); + tf.registerKernel( + {kernelName: 'Square', backendName: 'webgl2', kernelFunc}); + + expect(tf.memory().numTensors).toBe(0); + + tf.tidy(() => { + tf.setBackend('webgl1'); + const a = tf.scalar(1); + a.square(); // Uploads to GPU. + + tf.setBackend('webgl2'); + const b = tf.scalar(1); + b.square(); // Uploads to GPU. + + expect(tf.memory().numTensors).toBe(4); + }); + expect(tf.memory().numTensors).toBe(0); + + tf.unregisterKernel('Square', 'webgl1'); + tf.unregisterKernel('Square', 'webgl2'); + }); + }); interface TestStorage extends KernelBackend { id: number; From 5c4224abaa7ff68c84fb8985d77b319949b1a646 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 22:42:38 -0400 Subject: [PATCH 30/46] circumvent tsc circular import issue --- tfjs-core/src/setup_test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tfjs-core/src/setup_test.ts b/tfjs-core/src/setup_test.ts index b8daa0640a1..5e6050cfce9 100644 --- a/tfjs-core/src/setup_test.ts +++ b/tfjs-core/src/setup_test.ts @@ -16,7 +16,10 @@ */ // Register the CPU backend as a default backend for tests. -import '@tensorflow/tfjs-backend-cpu'; +// This is a circular dependency which we only need to run tests. +// Using require allows tsc to still compile the library. +// tslint:disable-next-line: no-require-imports +require('@tensorflow/tfjs-backend-cpu'); /** * This file is necessary so we register all test environments before we start From b96b1b925657eb1dd42e78abcffaa7b96ceaf821 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Thu, 2 Apr 2020 23:27:51 -0400 Subject: [PATCH 31/46] make the kernel and gradient registries global --- tfjs-backend-cpu/package.json | 2 +- .../scripts/test_snippets/test_snippets.ts | 2 +- tfjs-core/src/kernel_registry.ts | 45 +++++++++++++++++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index 704f7e3c483..3f056e8b11e 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -48,7 +48,7 @@ }, "scripts": { "build-ci": "tsc", - "build": "rimraf dist/ && tsc", + "build": "tsc", "build-core": "cd ../tfjs-core && yarn && yarn build", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", diff --git a/tfjs-core/scripts/test_snippets/test_snippets.ts b/tfjs-core/scripts/test_snippets/test_snippets.ts index e8f19550699..cf1201d8eb6 100644 --- a/tfjs-core/scripts/test_snippets/test_snippets.ts +++ b/tfjs-core/scripts/test_snippets/test_snippets.ts @@ -15,7 +15,7 @@ * limitations under the License. * ============================================================================= */ -import * as tf from '../../dist/index'; +import * as tf from '../../src/index'; import '@tensorflow/tfjs-backend-cpu'; import {parseAndEvaluateSnippets} from './util'; diff --git a/tfjs-core/src/kernel_registry.ts b/tfjs-core/src/kernel_registry.ts index 3997636ca3d..d04f755fd4f 100644 --- a/tfjs-core/src/kernel_registry.ts +++ b/tfjs-core/src/kernel_registry.ts @@ -14,13 +14,46 @@ * limitations under the License. * ============================================================================= */ - import {NamedGradientMap} from './tape'; import {Tensor} from './tensor'; import {DataType, RecursiveArray} from './types'; -const kernelRegistry: Map = new Map(); -const gradRegistry: Map = new Map(); +// The alternative to this is having Engine own the kernel and gradient +// registries and continue to be the one true singleton. Or we make a +// cleaner utility for creating true global singletons. +function getGlobalNamespace(): { + _tfkernelRegistry: Map, + _tfgradRegistry: Map +} { + // tslint:disable-next-line:no-any + let ns: any; + if (typeof (window) !== 'undefined') { + ns = window; + } else if (typeof (global) !== 'undefined') { + ns = global; + } else if (typeof (process) !== 'undefined') { + ns = process; + } else if (typeof (self) !== 'undefined') { + ns = self; + } else { + throw new Error('Could not find a global object'); + } + return ns; +} + +const global = getGlobalNamespace(); +let kernelRegistry: Map; +if (global._tfkernelRegistry == null) { + global._tfkernelRegistry = new Map(); +} +kernelRegistry = global._tfkernelRegistry; + +let gradRegistry: Map; + +if (global._tfgradRegistry == null) { + global._tfgradRegistry = new Map(); +} +gradRegistry = global._tfgradRegistry; export type DataId = object; @@ -132,9 +165,13 @@ export function registerKernel(config: KernelConfig) { const {kernelName, backendName} = config; const key = makeKey(kernelName, backendName); if (kernelRegistry.has(key)) { - throw new Error( + console.warn( `The kernel '${kernelName}' for backend ` + `'${backendName}' is already registered`); + // TODO(yassogba) make this an error again once WebGL is moved from core. + // throw new Error( + // `The kernel '${kernelName}' for backend ` + + // `'${backendName}' is already registered`); } kernelRegistry.set(key, config); } From c697c9307616df04287fd9820c10505a9fac2818 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 00:07:01 -0400 Subject: [PATCH 32/46] reorder build steps --- tfjs-core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tfjs-core/package.json b/tfjs-core/package.json index 37044f26054..b6ad71a5c86 100644 --- a/tfjs-core/package.json +++ b/tfjs-core/package.json @@ -53,7 +53,7 @@ "yargs": "~13.2.2" }, "scripts": { - "build-ci": "yarn build-deps-ci && ./scripts/enumerate-tests.js --ci && tsc && yarn build-test-snippets", + "build-ci": "./scripts/enumerate-tests.js --ci && tsc && yarn build-cpu-backend && yarn build-test-snippets", "build": "node ./scripts/enumerate-tests.js && tsc", "build-npm": "./scripts/build-npm.sh", "build-deps-ci": "yarn build-cpu-backend", From bcfbb83b8bcb56159cf7f78c3645b46f22500520 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 00:25:54 -0400 Subject: [PATCH 33/46] skip test --- tfjs-core/src/kernel_registry_test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tfjs-core/src/kernel_registry_test.ts b/tfjs-core/src/kernel_registry_test.ts index b7afde14e8e..a0947efd256 100644 --- a/tfjs-core/src/kernel_registry_test.ts +++ b/tfjs-core/src/kernel_registry_test.ts @@ -54,7 +54,9 @@ describeWithFlags('kernel_registry', ALL_ENVS, () => { .toThrowError(); }); - it('errors when registering the same kernel twice', () => { + // tslint:disable-next-line: ban + xit('errors when registering the same kernel twice', () => { + // TODO(yassogba) restore this once WebGL backend is out of core. tf.registerKernel({ kernelName: 'MyKernel', backendName: tf.getBackend(), From 1fcca7ae7259bff5b565f00e24afb5aa83d0cf34 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 00:41:26 -0400 Subject: [PATCH 34/46] add backend to test_snippets --- tfjs-layers/scripts/test_snippets.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tfjs-layers/scripts/test_snippets.ts b/tfjs-layers/scripts/test_snippets.ts index 753081d50ba..9a053d17178 100644 --- a/tfjs-layers/scripts/test_snippets.ts +++ b/tfjs-layers/scripts/test_snippets.ts @@ -14,7 +14,9 @@ * limitations under the License. * ============================================================================= */ +import '@tensorflow/tfjs-backend-cpu'; import * as tfc from '@tensorflow/tfjs-core'; +// tslint:disable-next-line: no-imports-from-dist import {parseAndEvaluateSnippets} from '@tensorflow/tfjs-core/dist/scripts/test_snippets/util'; import * as tfl from '../src/index'; From 8c0d36dd1104b9887d559110cbb662fea6ce7e30 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 11:32:47 -0400 Subject: [PATCH 35/46] make test_async_backends use backend from registry --- tfjs-core/src/test_async_backends.ts | 114 ++++++++++++++------------- 1 file changed, 58 insertions(+), 56 deletions(-) diff --git a/tfjs-core/src/test_async_backends.ts b/tfjs-core/src/test_async_backends.ts index 5772777f37d..0449ed0c0d8 100644 --- a/tfjs-core/src/test_async_backends.ts +++ b/tfjs-core/src/test_async_backends.ts @@ -20,71 +20,73 @@ * so that we can run backends that have async init and async data reads against * our exported test files. */ -// import './index'; -// import {setTestEnvs} from './jasmine_util'; -// import {MathBackendCPU} from './backends/cpu/backend_cpu'; -// import {registerBackend} from './globals'; -// import {KernelBackend} from './backends/backend'; -// import {getKernelsForBackend, registerKernel} from './kernel_registry'; +// tslint:disable-next-line: no-require-imports +require('@tensorflow/tfjs-backend-cpu'); +import './index'; +import {setTestEnvs} from './jasmine_util'; +import {registerBackend, engine} from './globals'; +import {KernelBackend} from './backends/backend'; +import {getKernelsForBackend, registerKernel} from './kernel_registry'; -// // tslint:disable-next-line:no-require-imports -// const jasmine = require('jasmine'); +// tslint:disable-next-line:no-require-imports +const jasmine = require('jasmine'); -// process.on('unhandledRejection', e => { -// throw e; -// }); +process.on('unhandledRejection', e => { + throw e; +}); -// class AsyncCPUBackend extends KernelBackend {} -// const asyncBackend = new AsyncCPUBackend(); +class AsyncCPUBackend extends KernelBackend {} +const asyncBackend = new AsyncCPUBackend(); -// // backend is cast as any so that we can access methods through bracket -// // notation. -// // tslint:disable-next-line:no-any +// backend is cast as any so that we can access methods through bracket +// notation. +// tslint:disable-next-line:no-any // const backend: any = new MathBackendCPU(); -// const proxyBackend = new Proxy(asyncBackend, { -// get(target, name, receiver) { -// if (name === 'readSync') { -// throw new Error( -// `Found dataSync() in a unit test. This is disabled so unit tests ` -// + `can run in backends that only support async data. Please use ` + -// `.data() in unit tests or if you truly are testing dataSync(), ` + -// `constrain your test with SYNC_BACKEND_ENVS`); -// } -// const origSymbol = backend[name]; -// if (typeof origSymbol === 'function') { -// // tslint:disable-next-line:no-any -// return (...args: any[]) => { -// return origSymbol.apply(backend, args); -// }; -// } else { -// return origSymbol; -// } -// } -// }); +const backend: KernelBackend = engine().findBackend('cpu'); +const proxyBackend = new Proxy(asyncBackend, { + get(target, name, receiver) { + if (name === 'readSync') { + throw new Error( + `Found dataSync() in a unit test. This is disabled so unit tests ` + + `can run in backends that only support async data. Please use ` + + `.data() in unit tests or if you truly are testing dataSync(), ` + + `constrain your test with SYNC_BACKEND_ENVS`); + } + //@ts-ignore; + const origSymbol = backend[name]; + if (typeof origSymbol === 'function') { + // tslint:disable-next-line:no-any + return (...args: any[]) => { + return origSymbol.apply(backend, args); + }; + } else { + return origSymbol; + } + } +}); -// const proxyBackendName = 'test-async-cpu'; +const proxyBackendName = 'test-async-cpu'; -// // The registration is async on purpose, so we know our testing infra works -// // with backends that have async init (e.g. WASM and WebGPU). -// registerBackend(proxyBackendName, async () => proxyBackend); +// The registration is async on purpose, so we know our testing infra works +// with backends that have async init (e.g. WASM and WebGPU). +registerBackend(proxyBackendName, async () => proxyBackend); -// // All the kernels are registered under the 'cpu' name, so we need to -// register -// // them also under the proxy backend name. -// const kernels = getKernelsForBackend('cpu'); -// kernels.forEach(({kernelName, kernelFunc, setupFunc}) => { -// registerKernel( -// {kernelName, backendName: proxyBackendName, kernelFunc, setupFunc}); -// }); +// All the kernels are registered under the 'cpu' name, so we need to +// register them also under the proxy backend name. +const kernels = getKernelsForBackend('cpu'); +kernels.forEach(({kernelName, kernelFunc, setupFunc}) => { + registerKernel( + {kernelName, backendName: proxyBackendName, kernelFunc, setupFunc}); +}); -// setTestEnvs([{ -// name: proxyBackendName, -// backendName: proxyBackendName, -// isDataSync: false, -// }]); +setTestEnvs([{ + name: proxyBackendName, + backendName: proxyBackendName, + isDataSync: false, +}]); -// const runner = new jasmine(); +const runner = new jasmine(); -// runner.loadConfig({spec_files: ['dist/**/**_test.js'], random: false}); -// runner.execute(); +runner.loadConfig({spec_files: ['dist/**/**_test.js'], random: false}); +runner.execute(); From e47f0cea765cdc0eb4b4b9bbf31f8f186de2bd10 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 15:38:01 -0400 Subject: [PATCH 36/46] add rollup config for cpu backend --- tfjs-backend-cpu/rollup.config.js | 126 ++++++++++++++++++ tfjs-backend-cpu/scripts/build-npm.sh | 25 ++++ tfjs-backend-cpu/src/backend_cpu.ts | 5 +- .../src/kernels/NonMaxSuppressionV5.ts | 4 +- tfjs-core/src/backends/kernel_impls.ts | 2 +- 5 files changed, 156 insertions(+), 6 deletions(-) create mode 100644 tfjs-backend-cpu/rollup.config.js create mode 100755 tfjs-backend-cpu/scripts/build-npm.sh diff --git a/tfjs-backend-cpu/rollup.config.js b/tfjs-backend-cpu/rollup.config.js new file mode 100644 index 00000000000..788c93ff171 --- /dev/null +++ b/tfjs-backend-cpu/rollup.config.js @@ -0,0 +1,126 @@ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + +import commonjs from 'rollup-plugin-commonjs'; +import node from 'rollup-plugin-node-resolve'; +import {terser} from 'rollup-plugin-terser'; +import typescript from 'rollup-plugin-typescript2'; +import visualizer from 'rollup-plugin-visualizer'; + +const PREAMBLE = `/** + * @license + * Copyright ${(new Date).getFullYear()} Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */`; + +function config({plugins = [], output = {}, external = [], visualize = false}) { + if (visualize) { + const filename = output.file + '.html'; + plugins.push(visualizer({ + sourcemap: true, + filename, + })); + console.log(`Will output a bundle visualization in ${filename}`); + } + return { + input: 'src/index.ts', + plugins: [ + typescript({ + tsconfigOverride: {compilerOptions: {module: 'ES2015'}}, + // See https://github.com/ezolenko/rollup-plugin-typescript2/issues/105 + objectHashIgnoreUnknownHack: visualize ? true : false, + clean: visualize ? true : false, + }), + node(), + // Polyfill require() from dependencies. + commonjs({ + ignore: ['crypto'], + include: 'node_modules/**', + namedExports: { + './node_modules/seedrandom/index.js': ['alea'], + }, + }), + ...plugins + ], + output: { + banner: PREAMBLE, + sourcemap: true, + globals: {'@tensorflow/tfjs-core': 'tf'}, + ...output, + }, + external: ['crypto', '@tensorflow/tfjs-core'], + onwarn: warning => { + let {code} = warning; + if (code === 'CIRCULAR_DEPENDENCY' || code === 'CIRCULAR' || + code === 'THIS_IS_UNDEFINED') { + return; + } + console.warn('WARNING: ', warning.toString()); + } + }; +} + +module.exports = cmdOptions => { + const bundles = []; + + if (!cmdOptions.ci) { + // tf-backend-cpu.js + bundles.push(config({ + output: { + format: 'umd', + name: 'tf', + extend: true, + file: 'dist/tf-backend-cpu.js', + } + })); + } + + // tf-backend-cpu.min.js + bundles.push(config({ + plugins: [terser({output: {preamble: PREAMBLE, comments: false}})], + output: { + format: 'umd', + name: 'tf', + extend: true, + file: 'dist/tf-backend-cpu.min.js', + }, + visualize: cmdOptions.visualize + })); + + if (!cmdOptions.ci) { + // tf-backend-cpu.esm.js + bundles.push(config({ + plugins: [terser({output: {preamble: PREAMBLE, comments: false}})], + output: { + format: 'es', + file: 'dist/tf-backend-cpu.esm.js', + } + })); + } + return bundles; +}; diff --git a/tfjs-backend-cpu/scripts/build-npm.sh b/tfjs-backend-cpu/scripts/build-npm.sh new file mode 100755 index 00000000000..5891551e58a --- /dev/null +++ b/tfjs-backend-cpu/scripts/build-npm.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Copyright 2017 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================= + +set -e + +yarn rimraf dist/ +yarn + +yarn build +yarn rollup -c --visualize + +echo "Stored standalone library at dist/tf-backend-cpu(.min).js" diff --git a/tfjs-backend-cpu/src/backend_cpu.ts b/tfjs-backend-cpu/src/backend_cpu.ts index d7c3c3e7a57..12475ad83a6 100644 --- a/tfjs-backend-cpu/src/backend_cpu.ts +++ b/tfjs-backend-cpu/src/backend_cpu.ts @@ -25,8 +25,6 @@ const split = kernel_impls.split; const tile = kernel_impls.tile; const topkImpl = kernel_impls.topkImpl; const whereImpl = kernel_impls.whereImpl; -// tslint:disable-next-line: no-imports-from-dist -import {EPSILON_FLOAT32} from '@tensorflow/tfjs-core/dist/backends/backend'; import * as seedrandom from 'seedrandom'; import {assertNotComplex} from './cpu_util'; @@ -3524,9 +3522,10 @@ export class MathBackendCPU extends KernelBackend { floatPrecision(): 16|32 { return 32; } + /** Returns the smallest representable number. */ epsilon(): number { - return EPSILON_FLOAT32; + return super.epsilon(); } cropAndResize( diff --git a/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts b/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts index f28d7b47200..0f982ce55ed 100644 --- a/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts +++ b/tfjs-backend-cpu/src/kernels/NonMaxSuppressionV5.ts @@ -17,8 +17,8 @@ import {NonMaxSuppressionV5, NonMaxSuppressionV5Attrs, NonMaxSuppressionV5Inputs} from '@tensorflow/tfjs-core'; import {KernelConfig, TypedArray} from '@tensorflow/tfjs-core'; -// tslint:disable-next-line: no-imports-from-dist -import {nonMaxSuppressionV5} from '@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl'; +import {kernel_impls} from '@tensorflow/tfjs-core'; +const nonMaxSuppressionV5 = kernel_impls.nonMaxSuppressionV5; import {MathBackendCPU} from '../backend_cpu'; import {assertNotComplex} from '../cpu_util'; diff --git a/tfjs-core/src/backends/kernel_impls.ts b/tfjs-core/src/backends/kernel_impls.ts index 39d43bafdab..fda2a7d1b8f 100644 --- a/tfjs-core/src/backends/kernel_impls.ts +++ b/tfjs-core/src/backends/kernel_impls.ts @@ -15,7 +15,7 @@ * ============================================================================= */ -export {nonMaxSuppressionV3} from './non_max_suppression_impl'; +export {nonMaxSuppressionV3, nonMaxSuppressionV5} from './non_max_suppression_impl'; export {split} from './split_shared'; export {tile} from './tile_impl'; export {topkImpl} from './topk_impl'; From 5f0e45140c67097dc9dcbc585f62edb443c5cef0 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 15:38:11 -0400 Subject: [PATCH 37/46] refactor global kernel/grad registries --- tfjs-core/src/engine.ts | 24 +---------- tfjs-core/src/global_util.ts | 69 ++++++++++++++++++++++++++++++++ tfjs-core/src/kernel_registry.ts | 41 +++---------------- 3 files changed, 76 insertions(+), 58 deletions(-) create mode 100644 tfjs-core/src/global_util.ts diff --git a/tfjs-core/src/engine.ts b/tfjs-core/src/engine.ts index 3d9e09933e0..4a0054a2009 100644 --- a/tfjs-core/src/engine.ts +++ b/tfjs-core/src/engine.ts @@ -17,6 +17,7 @@ import {BackendTimingInfo, DataMover, KernelBackend} from './backends/backend'; import {Environment, setEnvironmentGlobal} from './environment'; +import {getGlobalNamespace} from './global_util'; import {getGradient, getKernel, getKernelsForBackend, GradFunc, NamedAttrMap, TensorInfo} from './kernel_registry'; import {Profiler} from './profiler'; import {backpropagateGradients, getFilteredNodesXToY, TapeNode} from './tape'; @@ -1127,29 +1128,8 @@ function ones(shape: number[]): Tensor { return ENGINE.makeTensor(values, shape, 'float32'); } -let GLOBAL: {_tfengine: Engine}; -function getGlobalNamespace(): {_tfengine: Engine} { - if (GLOBAL == null) { - // tslint:disable-next-line:no-any - let ns: any; - if (typeof (window) !== 'undefined') { - ns = window; - } else if (typeof (global) !== 'undefined') { - ns = global; - } else if (typeof (process) !== 'undefined') { - ns = process; - } else if (typeof (self) !== 'undefined') { - ns = self; - } else { - throw new Error('Could not find a global object'); - } - GLOBAL = ns; - } - return GLOBAL; -} - function getOrMakeEngine(): Engine { - const ns = getGlobalNamespace(); + const ns = getGlobalNamespace() as {} as {_tfengine: Engine}; if (ns._tfengine == null) { const environment = new Environment(ns); ns._tfengine = new Engine(environment); diff --git a/tfjs-core/src/global_util.ts b/tfjs-core/src/global_util.ts new file mode 100644 index 00000000000..baa96158d01 --- /dev/null +++ b/tfjs-core/src/global_util.ts @@ -0,0 +1,69 @@ +/** + * @license + * Copyright 2020 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + +// Note that the identifier globalNameSpace is scoped to this module, but will +// always resolve to the same global object regardless of how the module is +// resolved. +// tslint:disable-next-line:no-any +let globalNameSpace: {_tfGlobals: Map}; +// tslint:disable-next-line:no-any +export function getGlobalNamespace(): {_tfGlobals: Map} { + if (globalNameSpace == null) { + // tslint:disable-next-line:no-any + let ns: any; + if (typeof (window) !== 'undefined') { + ns = window; + } else if (typeof (global) !== 'undefined') { + ns = global; + } else if (typeof (process) !== 'undefined') { + ns = process; + } else if (typeof (self) !== 'undefined') { + ns = self; + } else { + throw new Error('Could not find a global object'); + } + globalNameSpace = ns; + } + return globalNameSpace; +} + +// tslint:disable-next-line:no-any +function getGlobalMap(): Map { + const ns = getGlobalNamespace(); + if (ns._tfGlobals == null) { + ns._tfGlobals = new Map(); + } + return ns._tfGlobals; +} + +/** + * Returns a globally accessible 'singleton' object. + * + * @param key the name of the object + * @param init a function to initialize to initialize this object + * the first time it is fetched. + */ +export function getGlobal(key: string, init: () => T): T { + const globalMap = getGlobalMap(); + if (globalMap.has(key)) { + return globalMap.get(key); + } else { + const singleton = init(); + globalMap.set(key, singleton); + return globalMap.get(key); + } +} diff --git a/tfjs-core/src/kernel_registry.ts b/tfjs-core/src/kernel_registry.ts index d04f755fd4f..67bcec714e3 100644 --- a/tfjs-core/src/kernel_registry.ts +++ b/tfjs-core/src/kernel_registry.ts @@ -14,46 +14,15 @@ * limitations under the License. * ============================================================================= */ +import {getGlobal} from './global_util'; import {NamedGradientMap} from './tape'; import {Tensor} from './tensor'; import {DataType, RecursiveArray} from './types'; -// The alternative to this is having Engine own the kernel and gradient -// registries and continue to be the one true singleton. Or we make a -// cleaner utility for creating true global singletons. -function getGlobalNamespace(): { - _tfkernelRegistry: Map, - _tfgradRegistry: Map -} { - // tslint:disable-next-line:no-any - let ns: any; - if (typeof (window) !== 'undefined') { - ns = window; - } else if (typeof (global) !== 'undefined') { - ns = global; - } else if (typeof (process) !== 'undefined') { - ns = process; - } else if (typeof (self) !== 'undefined') { - ns = self; - } else { - throw new Error('Could not find a global object'); - } - return ns; -} - -const global = getGlobalNamespace(); -let kernelRegistry: Map; -if (global._tfkernelRegistry == null) { - global._tfkernelRegistry = new Map(); -} -kernelRegistry = global._tfkernelRegistry; - -let gradRegistry: Map; - -if (global._tfgradRegistry == null) { - global._tfgradRegistry = new Map(); -} -gradRegistry = global._tfgradRegistry; +const kernelRegistry = + getGlobal('kernelRegistry', () => new Map()); +const gradRegistry = + getGlobal('gradRegistry', () => new Map()); export type DataId = object; From e19cb50dc76fa4feada94e7a74a7b5a207753a16 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 16:18:42 -0400 Subject: [PATCH 38/46] update rollup --- tfjs-backend-cpu/package.json | 12 +- tfjs-backend-cpu/rollup.config.js | 24 +- tfjs-backend-cpu/yarn.lock | 382 ++++++++++++++++++++++-------- 3 files changed, 303 insertions(+), 115 deletions(-) diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index 3f056e8b11e..9e597850548 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -18,6 +18,9 @@ }, "license": "Apache-2.0", "devDependencies": { + "@rollup/plugin-commonjs": "^11.0.2", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-typescript": "^3.0.0", "@tensorflow/tfjs-core": "link:../tfjs-core", "@types/jasmine": "~3.0.0", "browserify": "~16.2.3", @@ -32,12 +35,9 @@ "karma-typescript": "~4.1.1", "npm-run-all": "~4.1.3", "rimraf": "~2.6.2", - "rollup": "~1.9.0", - "rollup-plugin-commonjs": "~9.3.4", - "rollup-plugin-node-resolve": "~3.4.0", - "rollup-plugin-terser": "~5.1.3", - "rollup-plugin-typescript2": "~0.20.1", - "rollup-plugin-visualizer": "~1.1.1", + "rollup": "~2.3.2", + "rollup-plugin-terser": "~5.3.0", + "rollup-plugin-visualizer": "~3.3.2", "shelljs": "~0.8.3", "ts-node": "~7.0.0", "tslint": "~5.11.0", diff --git a/tfjs-backend-cpu/rollup.config.js b/tfjs-backend-cpu/rollup.config.js index 788c93ff171..69bc21ae439 100644 --- a/tfjs-backend-cpu/rollup.config.js +++ b/tfjs-backend-cpu/rollup.config.js @@ -15,10 +15,10 @@ * ============================================================================= */ -import commonjs from 'rollup-plugin-commonjs'; -import node from 'rollup-plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import resolve from '@rollup/plugin-node-resolve'; +import typescript from '@rollup/plugin-typescript'; import {terser} from 'rollup-plugin-terser'; -import typescript from 'rollup-plugin-typescript2'; import visualizer from 'rollup-plugin-visualizer'; const PREAMBLE = `/** @@ -44,6 +44,8 @@ function config({plugins = [], output = {}, external = [], visualize = false}) { plugins.push(visualizer({ sourcemap: true, filename, + template: 'sunburst', + gzipSize: true, })); console.log(`Will output a bundle visualization in ${filename}`); } @@ -51,12 +53,13 @@ function config({plugins = [], output = {}, external = [], visualize = false}) { input: 'src/index.ts', plugins: [ typescript({ - tsconfigOverride: {compilerOptions: {module: 'ES2015'}}, + include: ['src/**/*.ts'], + module: 'ES2015', // See https://github.com/ezolenko/rollup-plugin-typescript2/issues/105 - objectHashIgnoreUnknownHack: visualize ? true : false, - clean: visualize ? true : false, + // objectHashIgnoreUnknownHack: visualize ? true : false, + // clean: visualize ? true : false, }), - node(), + resolve(), // Polyfill require() from dependencies. commonjs({ ignore: ['crypto'], @@ -70,10 +73,13 @@ function config({plugins = [], output = {}, external = [], visualize = false}) { output: { banner: PREAMBLE, sourcemap: true, - globals: {'@tensorflow/tfjs-core': 'tf'}, + globals: { + '@tensorflow/tfjs-core': 'tf', + 'seedrandom': 'seedrandom', + }, ...output, }, - external: ['crypto', '@tensorflow/tfjs-core'], + external: ['crypto', '@tensorflow/tfjs-core', 'seedrandom'], onwarn: warning => { let {code} = warning; if (code === 'CIRCULAR_DEPENDENCY' || code === 'CIRCULAR' || diff --git a/tfjs-backend-cpu/yarn.lock b/tfjs-backend-cpu/yarn.lock index 7b21214f94c..84df02b258b 100644 --- a/tfjs-backend-cpu/yarn.lock +++ b/tfjs-backend-cpu/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": +"@babel/code-frame@^7.5.5": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== @@ -23,10 +23,52 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@rollup/plugin-commonjs@^11.0.2": + version "11.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582" + integrity sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g== + dependencies: + "@rollup/pluginutils" "^3.0.0" + estree-walker "^1.0.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/plugin-node-resolve@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" + integrity sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA== + dependencies: + "@rollup/pluginutils" "^3.0.6" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/plugin-typescript@^3.0.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-3.1.1.tgz#a39175a552ed82a3e424862e6bb403bf9da451ee" + integrity sha512-VPY1MbzIJT+obpav9Kns4MlipVJ1FuefwzO4s1uCVXAzVWya+bhhNauOmmqR/hy1zj7tePfh3t9iBN+HbIzyRA== + dependencies: + "@rollup/pluginutils" "^3.0.1" + resolve "^1.14.1" + +"@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.1", "@rollup/pluginutils@^3.0.6": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" + integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw== + dependencies: + estree-walker "^1.0.1" + "@tensorflow/tfjs-core@link:../tfjs-core": version "0.0.0" uid "" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -37,16 +79,23 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.0.0.tgz#9a6b6755a02fcd6baa088a767557709c79728f98" integrity sha512-yeQ81bQ46gOfj+AQLp5/x0Kylq6lz9d5a82Vo5JS63rDn1ctoItKcwrcKEM1wGsjqA4SrYkzzIHo8dbq8RhG5w== -"@types/node@^11.13.2": - version "11.15.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.7.tgz#97559c6d7f8b15dcf275365512799f405c20cd4e" - integrity sha512-3c3Kc7VIdE5UpqpmztRy7FU+turZgIurGnwpGFy/fRFOirfPc7ZnoFL83qVoqEDENJENqDhtGyQZ5fkXNQ6Qkw== +"@types/node@*": + version "13.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" + integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ== "@types/offscreencanvas@~2019.3.0": version "2019.3.0" resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + "@types/seedrandom@2.4.27": version "2.4.27" resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" @@ -107,7 +156,7 @@ acorn-walk@^7.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== -acorn@^6.0.5, acorn@^6.1.1: +acorn@^6.0.5: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== @@ -146,6 +195,11 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -158,6 +212,14 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -693,10 +755,10 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -builtin-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" - integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== builtin-status-codes@^3.0.0: version "3.0.0" @@ -751,6 +813,11 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" @@ -848,6 +915,15 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -873,11 +949,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colors@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -1102,7 +1190,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1254,6 +1342,11 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -1354,6 +1447,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -1391,11 +1489,16 @@ estraverse@^1.9.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= -estree-walker@^0.6.0, estree-walker@^0.6.1: +estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -1524,6 +1627,14 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" @@ -1555,7 +1666,7 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra@7.0.1, fs-extra@^7.0.1: +fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -1616,6 +1727,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -2031,6 +2147,11 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-function@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" @@ -2081,6 +2202,13 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-reference@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== + dependencies: + "@types/estree" "0.0.39" + is-regex@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" @@ -2177,7 +2305,7 @@ jasmine@~3.1.0: glob "^7.0.6" jasmine-core "~3.1.0" -jest-worker@^24.6.0: +jest-worker@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== @@ -2439,6 +2567,13 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" @@ -2667,6 +2802,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nanoid@^2.1.6: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -2851,10 +2991,10 @@ once@1.x, once@^1.3.0: dependencies: wrappy "1" -opn@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +open@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== dependencies: is-wsl "^1.1.0" @@ -2912,6 +3052,25 @@ outpipe@^1.1.0: dependencies: shell-quote "^1.4.2" +p-limit@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + pad@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/pad/-/pad-3.2.0.tgz#be7a1d1cb6757049b4ad5b70e71977158fea95d1" @@ -3004,6 +3163,11 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -3145,6 +3309,13 @@ punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pupa@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" + integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== + dependencies: + escape-goat "^2.0.0" + q@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -3337,6 +3508,11 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -3352,14 +3528,7 @@ resolve@1.1.7, resolve@1.1.x: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== - dependencies: - path-parse "^1.0.6" - -resolve@^1.1.4, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0: +resolve@^1.1.4, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.1, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.4.0: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -3398,79 +3567,42 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-commonjs@~9.3.4: - version "9.3.4" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz#2b3dddbbbded83d45c36ff101cdd29e924fd23bc" - integrity sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w== +rollup-plugin-terser@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz#9c0dd33d5771df9630cd027d6a2559187f65885e" + integrity sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g== dependencies: - estree-walker "^0.6.0" - magic-string "^0.25.2" - resolve "^1.10.0" - rollup-pluginutils "^2.6.0" - -rollup-plugin-node-resolve@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" - integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== - dependencies: - builtin-modules "^2.0.0" - is-module "^1.0.0" - resolve "^1.1.6" - -rollup-plugin-terser@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.3.tgz#5f4c4603b12b4f8d093f4b6f31c9aa5eba98a223" - integrity sha512-FuFuXE5QUJ7snyxHLPp/0LFXJhdomKlIx/aK7Tg88Yubsx/UU/lmInoJafXJ4jwVVNcORJ1wRUC5T9cy5yk0wA== - dependencies: - "@babel/code-frame" "^7.0.0" - jest-worker "^24.6.0" - rollup-pluginutils "^2.8.1" + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" serialize-javascript "^2.1.2" - terser "^4.1.0" - -rollup-plugin-typescript2@~0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.20.1.tgz#fb1d411975cd875d24882ea66f5f4fd11d2f2240" - integrity sha512-uxA5JQNOfmJ9rsO0yJKTObb1t4nNYUexCg9zxhEKF+NzZwljYWdfgrA06UzA24cOk8fQjGEe7Q5+Vge2vFlnnw== - dependencies: - fs-extra "7.0.1" - resolve "1.10.0" - rollup-pluginutils "2.4.1" - tslib "1.9.3" + terser "^4.6.2" -rollup-plugin-visualizer@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-1.1.1.tgz#454ae0aed23845407ebfb81cc52114af308d6d90" - integrity sha512-7xkSKp+dyJmSC7jg2LXqViaHuOnF1VvIFCnsZEKjrgT5ZVyiLLSbeszxFcQSfNJILphqgAEmWAUz0Z4xYScrRw== +rollup-plugin-visualizer@~3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-3.3.2.tgz#0778ef23785cbdf1d0f8dd8f697b5d211b8ced1e" + integrity sha512-jAJxpC97jHoWU5mQkGw5MroguV8fbZsLPxdV7MdE/fX7lAR+t1UDLpSH41rqdxyJCtqi2/UoDOBuADCyZdHaYA== dependencies: mkdirp "^0.5.1" - opn "^5.4.0" + nanoid "^2.1.6" + open "^6.0.0" + pupa "^2.0.0" source-map "^0.7.3" - typeface-oswald "0.0.54" - -rollup-pluginutils@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db" - integrity sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw== - dependencies: - estree-walker "^0.6.0" - micromatch "^3.1.10" + yargs "^15.0.0" -rollup-pluginutils@^2.6.0, rollup-pluginutils@^2.8.1: +rollup-pluginutils@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== dependencies: estree-walker "^0.6.1" -rollup@~1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.9.3.tgz#c898fd562dff3165470fc5de9b5e191d50f944b2" - integrity sha512-20iIOjee5n3H6W6CXsVdYs2xw86j4l+LQLM6yACynt+YJCwkqaYNHAjQ/dhVBIKsFpHwPqHamn/GHq+3Zp8ybQ== - dependencies: - "@types/estree" "0.0.39" - "@types/node" "^11.13.2" - acorn "^6.1.1" +rollup@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.3.2.tgz#afa68e4f3325bcef4e150d082056bef450bcac60" + integrity sha512-p66+fbfaUUOGE84sHXAOgfeaYQMslgAazoQMp//nlR519R61213EPFgrMZa48j31jNacJwexSAR1Q8V/BwGKBA== + optionalDependencies: + fsevents "~2.1.2" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" @@ -3836,6 +3968,15 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string.prototype.padend@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" @@ -3881,6 +4022,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -3940,10 +4088,10 @@ syntax-error@^1.1.1: dependencies: acorn-node "^1.2.0" -terser@^4.1.0: - version "4.6.7" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" - integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== +terser@^4.6.2: + version "4.6.10" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.10.tgz#90f5bd069ff456ddbc9503b18e52f9c493d3b7c2" + integrity sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -4069,11 +4217,6 @@ ts-node@~7.0.0: source-map-support "^0.5.6" yn "^2.0.0" -tslib@1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== - tslib@^1.8.0, tslib@^1.8.1: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" @@ -4134,11 +4277,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typeface-oswald@0.0.54: - version "0.0.54" - resolved "https://registry.yarnpkg.com/typeface-oswald/-/typeface-oswald-0.0.54.tgz#1e253011622cdd50f580c04e7d625e7f449763d7" - integrity sha512-U1WMNp4qfy4/3khIfHMVAIKnNu941MXUfs3+H9R8PFgnoz42Hh9pboSFztWr86zut0eXC8byalmVhfkiKON/8Q== - typescript@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" @@ -4336,6 +4474,11 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which@^1.1.1, which@^1.2.1, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -4366,6 +4509,15 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -4395,6 +4547,11 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= +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== + yalc@~1.0.0-pre.21: version "1.0.0-pre.35" resolved "https://registry.yarnpkg.com/yalc/-/yalc-1.0.0-pre.35.tgz#c997d6694e6bdad3e988d6e183bc05158dd102fe" @@ -4412,6 +4569,14 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yargs-parser@^18.1.1: + version "18.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" + integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" @@ -4419,6 +4584,23 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" +yargs@^15.0.0: + version "15.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.1" + yargs@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" From cf620082867abd27cc43df99ff77c25b61310312 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Fri, 3 Apr 2020 16:33:14 -0400 Subject: [PATCH 39/46] remove unused packages and scripts --- tfjs-backend-cpu/package.json | 6 - tfjs-backend-cpu/rollup.config.js | 3 - tfjs-backend-cpu/yarn.lock | 1234 +---------------------------- 3 files changed, 39 insertions(+), 1204 deletions(-) diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index 9e597850548..183103a6b31 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -23,12 +23,10 @@ "@rollup/plugin-typescript": "^3.0.0", "@tensorflow/tfjs-core": "link:../tfjs-core", "@types/jasmine": "~3.0.0", - "browserify": "~16.2.3", "clang-format": "~1.2.4", "jasmine": "~3.1.0", "jasmine-core": "~3.1.0", "karma": "~4.4.1", - "karma-browserify": "~6.0.0", "karma-browserstack-launcher": "~1.4.0", "karma-chrome-launcher": "~2.2.0", "karma-jasmine": "~1.1.0", @@ -43,7 +41,6 @@ "tslint": "~5.11.0", "tslint-no-circular-imports": "~0.5.0", "typescript": "3.5.3", - "watchify": "~3.11.1", "yalc": "~1.0.0-pre.21" }, "scripts": { @@ -57,9 +54,6 @@ "lint": "tslint -p . -t verbose", "test": "karma start", "run-browserstack": "karma start --browserstack", - "test-async-backends": "rimraf dist/ && tsc && node dist/test_async_backends.js", - "test-async-backends-ci": "node dist/test_async_backends.js", - "test-integration": "yarn && ./scripts/test-integration.js", "test-ci": "./scripts/test-ci.sh" }, "dependencies": { diff --git a/tfjs-backend-cpu/rollup.config.js b/tfjs-backend-cpu/rollup.config.js index 69bc21ae439..211cf9cfdca 100644 --- a/tfjs-backend-cpu/rollup.config.js +++ b/tfjs-backend-cpu/rollup.config.js @@ -55,9 +55,6 @@ function config({plugins = [], output = {}, external = [], visualize = false}) { typescript({ include: ['src/**/*.ts'], module: 'ES2015', - // See https://github.com/ezolenko/rollup-plugin-typescript2/issues/105 - // objectHashIgnoreUnknownHack: visualize ? true : false, - // clean: visualize ? true : false, }), resolve(), // Polyfill require() from dependencies. diff --git a/tfjs-backend-cpu/yarn.lock b/tfjs-backend-cpu/yarn.lock index 84df02b258b..5b36fab966a 100644 --- a/tfjs-backend-cpu/yarn.lock +++ b/tfjs-backend-cpu/yarn.lock @@ -111,14 +111,6 @@ resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.4.tgz#c3b0f9d6b465c66138e84e64cb3bdf8373c2c279" integrity sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw== -JSONStream@^1.0.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -137,35 +129,16 @@ accepts@~1.3.4: mime-types "~2.1.24" negotiator "0.6.2" -acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - acorn-walk@^6.1.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn-walk@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" - integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== - acorn@^6.0.5: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== - after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -225,14 +198,6 @@ ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -253,11 +218,6 @@ arr-diff@^4.0.0: resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" @@ -268,11 +228,6 @@ array-find-index@^1.0.1: resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" @@ -292,14 +247,6 @@ asn1.js@^4.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -assert@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assert@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" @@ -315,11 +262,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -342,11 +284,6 @@ async@^3.0.1: resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -381,19 +318,6 @@ base64id@1.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - 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" - better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" @@ -406,11 +330,6 @@ big-integer@^1.6.17: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" @@ -424,13 +343,6 @@ 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" - blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -475,22 +387,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - 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" - braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -503,19 +399,7 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-resolve@^1.11.0, browser-resolve@^1.11.3, browser-resolve@^1.7.0: +browser-resolve@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== @@ -574,121 +458,13 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" -browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: +browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" -browserify@^16.1.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.0.tgz#a1c2bc0431bec11fd29151941582e3f645ede881" - integrity sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw== - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp "^0.5.0" - module-deps "^6.0.0" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^3.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - -browserify@~16.2.3: - version "16.2.3" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.3.tgz#7ee6e654ba4f92bce6ab3599c3485b1cc7a0ad0b" - integrity sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ== - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp "^0.5.0" - module-deps "^6.0.0" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - browserstack@~1.5.1: version "1.5.3" resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" @@ -737,7 +513,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= -buffer@^5.0.2, buffer@^5.2.1: +buffer@^5.2.1: version "5.5.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== @@ -770,26 +546,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - 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" - -cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" - integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== - callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" @@ -845,25 +601,6 @@ chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chokidar@^2.1.1: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - chokidar@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" @@ -896,16 +633,6 @@ clang-format@~1.2.4: glob "^7.0.0" resolve "^1.1.6" -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -934,14 +661,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -971,7 +690,7 @@ colors@^1.1.0: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combine-source-map@^0.8.0, combine-source-map@~0.8.0: +combine-source-map@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= @@ -996,11 +715,6 @@ component-emitter@1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" @@ -1011,16 +725,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - connect@^3.6.0: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" @@ -1036,7 +740,7 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -constants-browserify@^1.0.0, constants-browserify@~1.0.0: +constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= @@ -1046,7 +750,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.3, convert-source-map@^1.6.0: +convert-source-map@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -1063,11 +767,6 @@ cookie@0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1115,7 +814,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypto-browserify@^3.0.0, crypto-browserify@^3.12.0: +crypto-browserify@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -1144,11 +843,6 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= -dash-ast@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" - integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== - date-format@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" @@ -1162,7 +856,7 @@ dateformat@^1.0.6: get-stdin "^4.0.1" meow "^3.3.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -1195,11 +889,6 @@ decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -1219,48 +908,11 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -deps-sort@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" - integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== - dependencies: - JSONStream "^1.0.3" - shasum-object "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -1269,15 +921,6 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -detective@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" - integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== - dependencies: - acorn-node "^1.6.1" - defined "^1.0.0" - minimist "^1.1.1" - di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" @@ -1317,7 +960,7 @@ domain-browser@^1.2.0: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2, duplexer2@~0.1.4: +duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= @@ -1509,11 +1152,6 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== -events@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" - integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== - events@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" @@ -1527,27 +1165,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - 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" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: +extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= @@ -1560,45 +1178,11 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - 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" - fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" - integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== - -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== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1647,18 +1231,6 @@ follow-redirects@^1.0.0: dependencies: debug "^3.0.0" -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fs-access@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" @@ -1689,14 +1261,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.12" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" - integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - fsevents@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" @@ -1717,11 +1281,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -get-assigned-identifiers@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" - integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -1737,19 +1296,6 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" @@ -1768,7 +1314,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.0.6, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -1780,7 +1326,7 @@ glob@^7.0.0, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -1830,38 +1376,7 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: +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== @@ -1884,11 +1399,6 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hat@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" - integrity sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo= - hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -1903,11 +1413,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= - http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -1990,11 +1495,6 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -2007,22 +1507,6 @@ inline-source-map@~0.6.0: dependencies: source-map "~0.5.3" -insert-module-globals@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" - integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw== - dependencies: - JSONStream "^1.0.3" - acorn-node "^1.5.2" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - undeclared-identifiers "^1.1.2" - xtend "^4.0.0" - interpret@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -2033,20 +1517,6 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -2057,13 +1527,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2071,58 +1534,16 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.0, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" @@ -2130,7 +1551,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -2157,14 +1578,7 @@ is-generator-function@^1.0.7: resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -2183,19 +1597,12 @@ is-nan@^1.2.1: dependencies: define-properties "^1.1.3" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -2228,26 +1635,21 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - isarray@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + isbinaryfile@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" @@ -2260,14 +1662,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= @@ -2313,11 +1708,6 @@ jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -js-string-escape@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -2341,13 +1731,6 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= - dependencies: - jsonify "~0.0.0" - json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -2360,28 +1743,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -karma-browserify@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/karma-browserify/-/karma-browserify-6.0.0.tgz#423b719fe80d064ad5ec36f8eb15c399305b9aba" - integrity sha512-G3dGjoy1/6P8I6qTp799fbcAxs4P+1JcyEKUzy9g1/xMakqf9FFPwW2T9iEtCbWoH5WIKD3z+YwGL5ysBhzrsg== - dependencies: - convert-source-map "^1.1.3" - hat "^0.0.3" - js-string-escape "^1.0.0" - lodash "^4.17.10" - minimatch "^3.0.0" - os-shim "^0.1.3" - karma-browserstack-launcher@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/karma-browserstack-launcher/-/karma-browserstack-launcher-1.4.0.tgz#22f92e969d2db6cfc00e578708bda39378d5f2ab" @@ -2494,38 +1855,6 @@ karma@~4.4.1: tmp "0.0.33" useragent "2.3.0" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -labeled-stream-splicer@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" - integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== - dependencies: - inherits "^2.0.1" - stream-splicer "^2.0.0" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -2579,7 +1908,7 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14: +lodash@^4.17.0, lodash@^4.17.11, lodash@^4.17.14: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -2623,23 +1952,11 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -2680,25 +1997,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - 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" - miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -2741,7 +2039,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -2751,42 +2049,13 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== dependencies: minimist "^1.2.5" -module-deps@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.2.tgz#d8a15c2265dfc119153c29bb47386987d0ee423b" - integrity sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w== - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.2" - concat-stream "~1.6.0" - defined "^1.0.0" - detective "^5.2.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.4.0" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2797,33 +2066,11 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - nanoid@^2.1.6: version "2.1.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - 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" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -2861,13 +2108,6 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -2919,7 +2159,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -2929,15 +2169,6 @@ object-component@0.0.3: resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" @@ -2953,13 +2184,6 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - 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" @@ -2970,13 +2194,6 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -3018,7 +2235,7 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -os-browserify@^0.3.0, os-browserify@~0.3.0: +os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= @@ -3035,23 +2252,11 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-shim@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -outpipe@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" - integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I= - dependencies: - shell-quote "^1.4.2" - p-limit@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" @@ -3083,13 +2288,6 @@ pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= - dependencies: - path-platform "~0.11.15" - parse-asn1@^5.0.0: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" @@ -3136,26 +2334,11 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== -path-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -3168,7 +2351,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -3183,11 +2366,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= - path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -3257,11 +2435,6 @@ plugin-error@^1.0.1: arr-union "^3.1.0" extend-shallow "^3.0.2" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -3272,7 +2445,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10, process@~0.11.0: +process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= @@ -3299,11 +2472,6 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -3331,7 +2499,7 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -querystring-es3@^0.2.1, querystring-es3@~0.2.0: +querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= @@ -3371,13 +2539,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= - dependencies: - readable-stream "^2.0.2" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -3413,7 +2574,7 @@ read-pkg@^3.0.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.2, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -3426,15 +2587,6 @@ readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - readdirp@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" @@ -3457,14 +2609,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - remap-istanbul@^0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.13.0.tgz#a529dfd080bb760f5274e3671c9c065f29923ed1" @@ -3476,21 +2620,6 @@ remap-istanbul@^0.13.0: source-map "0.6.1" through2 "3.0.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -3518,28 +2647,18 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.4, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.1, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.4.0: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.1, resolve@^1.14.2, resolve@^1.3.2: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - rfdc@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" @@ -3614,13 +2733,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3646,16 +2758,6 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - setimmediate@^1.0.4, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -3666,7 +2768,7 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -3674,21 +2776,6 @@ sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: inherits "^2.0.1" safe-buffer "^5.0.1" -shasum-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" - integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== - dependencies: - fast-safe-stringify "^2.0.7" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -3701,7 +2788,7 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shell-quote@^1.4.2, shell-quote@^1.6.1: +shell-quote@^1.6.1: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== @@ -3720,41 +2807,6 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - 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" - socket.io-adapter@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" @@ -3801,17 +2853,6 @@ socket.io@2.1.1: socket.io-client "2.1.1" socket.io-parser "~3.2.0" -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - 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-support@^0.5.6, source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -3820,17 +2861,12 @@ source-map-support@^0.5.6, source-map-support@~0.5.12: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.1, source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.1, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -3878,32 +2914,17 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stream-browserify@^2.0.0, stream-browserify@^2.0.2: +stream-browserify@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== @@ -3911,25 +2932,6 @@ stream-browserify@^2.0.0, stream-browserify@^2.0.2: inherits "~2.0.1" readable-stream "^2.0.2" -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-http@^2.0.0: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - stream-http@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57" @@ -3940,14 +2942,6 @@ stream-http@^3.0.0: readable-stream "^3.0.6" xtend "^4.0.0" -stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" - integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - streamroller@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" @@ -4048,13 +3042,6 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= - dependencies: - minimist "^1.1.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -4081,13 +3068,6 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== - dependencies: - acorn-node "^1.2.0" - terser@^4.6.2: version "4.6.10" resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.10.tgz#90f5bd069ff456ddbc9503b18e52f9c493d3b7c2" @@ -4105,26 +3085,6 @@ through2@3.0.0: readable-stream "2 || 3" xtend "~4.0.1" -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -"through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= - dependencies: - process "~0.11.0" - timers-browserify@^2.0.10: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -4151,26 +3111,6 @@ to-array@0.1.4: resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4178,16 +3118,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -4252,7 +3182,7 @@ tsutils@^2.27.2: dependencies: tslib "^1.8.1" -tty-browserify@0.0.1, tty-browserify@^0.0.1: +tty-browserify@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== @@ -4272,11 +3202,6 @@ type-is@~1.6.17: media-typer "0.3.0" mime-types "~2.1.24" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - typescript@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" @@ -4295,32 +3220,6 @@ ultron@~1.1.0: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== - -undeclared-identifiers@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" - integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== - dependencies: - acorn-node "^1.3.0" - dash-ast "^1.0.0" - get-assigned-identifiers "^1.2.0" - simple-concat "^1.0.0" - xtend "^4.0.1" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -4331,14 +3230,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - unzipper@^0.9.3: version "0.9.15" resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.9.15.tgz#97d99203dad17698ee39882483c14e4845c7549c" @@ -4354,17 +3245,7 @@ unzipper@^0.9.3: readable-stream "~2.3.6" setimmediate "~1.0.4" -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url@^0.11.0, url@~0.11.0: +url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -4372,11 +3253,6 @@ url@^0.11.0, url@~0.11.0: punycode "1.3.2" querystring "0.2.0" -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - user-home@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" @@ -4397,13 +3273,6 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - util@^0.12.0: version "0.12.2" resolved "https://registry.yarnpkg.com/util/-/util-0.12.2.tgz#54adb634c9e7c748707af2bf5a8c7ab640cbba2b" @@ -4414,13 +3283,6 @@ util@^0.12.0: is-generator-function "^1.0.7" safe-buffer "^5.1.2" -util@~0.10.1: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -4439,29 +3301,11 @@ vm-browserify@1.1.0: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== -vm-browserify@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= -watchify@~3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.1.tgz#8e4665871fff1ef64c0430d1a2c9d084d9721881" - integrity sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog== - dependencies: - anymatch "^2.0.0" - browserify "^16.1.0" - chokidar "^2.1.1" - defined "^1.0.0" - outpipe "^1.1.0" - through2 "^2.0.0" - xtend "^4.0.0" - wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -4537,7 +3381,7 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From ba1b18fc41541ce83dde3621c509653dec1b91ec Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Tue, 7 Apr 2020 15:32:41 -0400 Subject: [PATCH 40/46] code review fixes --- tfjs-backend-cpu/cloudbuild.yml | 2 +- tfjs-backend-cpu/karma.conf.js | 2 - tfjs-backend-cpu/package.json | 1 - tfjs-backend-cpu/scripts/test-ci.sh | 7 +- tfjs-backend-cpu/src/backend_cpu.ts | 165 +++++++++--------- tfjs-backend-cpu/src/backend_cpu_test.ts | 23 ++- tfjs-backend-cpu/src/backend_cpu_test_envs.ts | 23 --- tfjs-backend-cpu/yarn.lock | 21 --- tfjs-converter/package.json | 1 + tfjs-core/package.json | 2 +- tfjs-core/src/backends/backend_util.ts | 12 ++ .../backends/webgl/kernels/Transpose_impl.ts | 3 +- tfjs-core/src/index.ts | 29 +-- tfjs-core/src/kernel_registry_test.ts | 22 ++- tfjs-core/src/test_async_backends.ts | 4 +- tfjs-data/package.json | 3 +- tfjs-layers/package.json | 1 + 17 files changed, 135 insertions(+), 186 deletions(-) delete mode 100644 tfjs-backend-cpu/src/backend_cpu_test_envs.ts diff --git a/tfjs-backend-cpu/cloudbuild.yml b/tfjs-backend-cpu/cloudbuild.yml index cc9e62d80e5..e65dc53e7d6 100644 --- a/tfjs-backend-cpu/cloudbuild.yml +++ b/tfjs-backend-cpu/cloudbuild.yml @@ -18,7 +18,7 @@ steps: dir: 'tfjs-backend-cpu' id: 'build-core' entrypoint: 'yarn' - args: ['build-core'] + args: ['build-core-ci'] waitFor: ['yarn-common'] # Run tests. diff --git a/tfjs-backend-cpu/karma.conf.js b/tfjs-backend-cpu/karma.conf.js index 6ec1a941d8f..89e7f525099 100644 --- a/tfjs-backend-cpu/karma.conf.js +++ b/tfjs-backend-cpu/karma.conf.js @@ -31,8 +31,6 @@ const karmaTypescriptConfig = { } }; - - module.exports = function(config) { const args = []; if (config.grep) { diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index 183103a6b31..deed454b429 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -36,7 +36,6 @@ "rollup": "~2.3.2", "rollup-plugin-terser": "~5.3.0", "rollup-plugin-visualizer": "~3.3.2", - "shelljs": "~0.8.3", "ts-node": "~7.0.0", "tslint": "~5.11.0", "tslint-no-circular-imports": "~0.5.0", diff --git a/tfjs-backend-cpu/scripts/test-ci.sh b/tfjs-backend-cpu/scripts/test-ci.sh index bd4fec2c586..8a84c7e7491 100755 --- a/tfjs-backend-cpu/scripts/test-ci.sh +++ b/tfjs-backend-cpu/scripts/test-ci.sh @@ -17,7 +17,7 @@ set -e yarn lint -yarn build +yarn build-ci if [ "$NIGHTLY" = true ] then @@ -30,11 +30,6 @@ then npm-run-all -p -c --aggregate-output \ "run-browserstack --browsers=bs_android_9" \ "run-browserstack --browsers=bs_firefox_mac,bs_chrome_mac" \ - "run-browserstack --browsers=win_10_chrome" \ - - - # Safari doesn't have offscreen canvas so use it to test cpu in a webworker. - # yarn test-webworker --browsers=bs_safari_mac else yarn run-browserstack --browsers=bs_chrome_mac fi diff --git a/tfjs-backend-cpu/src/backend_cpu.ts b/tfjs-backend-cpu/src/backend_cpu.ts index 12475ad83a6..5cdf471b06e 100644 --- a/tfjs-backend-cpu/src/backend_cpu.ts +++ b/tfjs-backend-cpu/src/backend_cpu.ts @@ -17,7 +17,7 @@ import * as tf from '@tensorflow/tfjs-core'; import {engine, env} from '@tensorflow/tfjs-core'; -import {array_ops_util, axis_util, backend_util, broadcast_util, complex_util, concat_util, conv_util, erf_util, fused_util, gather_nd_util, log_util, scatter_nd_util, selu_util, slice_util, util} from '@tensorflow/tfjs-core'; +import {backend_util, slice_util, util} from '@tensorflow/tfjs-core'; import {BackendTimingInfo, DataStorage, DataType, DataValues, KernelBackend, NumericDataType, Rank, Scalar, ShapeMap, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, TensorBuffer, TypedArray, upcastType} from '@tensorflow/tfjs-core'; import {kernel_impls} from '@tensorflow/tfjs-core'; const nonMaxSuppressionV3 = kernel_impls.nonMaxSuppressionV3; @@ -31,7 +31,7 @@ import {assertNotComplex} from './cpu_util'; interface DataId {} function mapActivation( - backend: MathBackendCPU, x: Tensor, activation: fused_util.Activation, + backend: MathBackendCPU, x: Tensor, activation: backend_util.Activation, preluActivationWeights?: Tensor): Tensor { if (activation === 'linear') { return backend.linear(x); @@ -75,7 +75,7 @@ export class MathBackendCPU extends KernelBackend { if (this.firstUse) { this.firstUse = false; if (env().get('IS_NODE')) { - log_util.warn( + backend_util.warn( '\n============================\n' + 'Hi there 👋. Looks like you are running TensorFlow.js in ' + 'Node.js. To speed things up dramatically, install our node ' + @@ -113,7 +113,7 @@ export class MathBackendCPU extends KernelBackend { this.readSync(complexTensors.real.dataId) as Float32Array; const imagValues = this.readSync(complexTensors.imag.dataId) as Float32Array; - return complex_util.mergeRealAndImagArrays(realValues, imagValues); + return backend_util.mergeRealAndImagArrays(realValues, imagValues); } return this.data.get(dataId).values; } @@ -295,7 +295,7 @@ export class MathBackendCPU extends KernelBackend { return t.as2D(-1, innerSize); }); const outShape = - concat_util.computeOutShape(tensors2D.map(t => t.shape), 1 /* axis + backend_util.computeOutShape(tensors2D.map(t => t.shape), 1 /* axis */); const values = tf.buffer(outShape as [number, number], tensors[0].dtype as 'float32') @@ -322,7 +322,7 @@ export class MathBackendCPU extends KernelBackend { }); } const finalOutShape = - concat_util.computeOutShape(tensors.map(t => t.shape), axis); + backend_util.computeOutShape(tensors.map(t => t.shape), axis); return tf.tensor(values, finalOutShape, tensors[0].dtype); } @@ -364,7 +364,8 @@ export class MathBackendCPU extends KernelBackend { softmax(logits: T, dim: number): T { const axes = util.parseAxisParam([dim], logits.shape); const maxLogit = this.max(logits, axes); - const expandedShape = axis_util.expandShapeToKeepDim(maxLogit.shape, axes); + const expandedShape = + backend_util.expandShapeToKeepDim(maxLogit.shape, axes); const a = this.subtract(logits, maxLogit.reshape(expandedShape)); const b = this.exp(a); const sumExp = this.sum(b, axes).reshape(expandedShape); @@ -449,7 +450,7 @@ export class MathBackendCPU extends KernelBackend { fusedBatchMatMul( {a, b, transposeA, transposeB, bias, activation, preluActivationWeights}: - fused_util.FusedBatchMatMulConfig): Tensor3D { + backend_util.FusedBatchMatMulConfig): Tensor3D { let result = this.batchMatMul(a, b, transposeA, transposeB); if (bias) { result = this.add(result, bias) as Tensor3D; @@ -490,9 +491,9 @@ export class MathBackendCPU extends KernelBackend { sum(x: Tensor, axes: number[]): Tensor { assertNotComplex(x, 'sum'); - axis_util.assertAxesAreInnerMostDims('sum', axes, x.rank); + backend_util.assertAxesAreInnerMostDims('sum', axes, x.rank); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const resultDtype = upcastType(x.dtype, 'int32'); const result = tf.zeros(outShape, resultDtype); const reduceSize = util.sizeFromShape(reduceShape); @@ -514,7 +515,7 @@ export class MathBackendCPU extends KernelBackend { assertNotComplex(x, 'sum'); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const resultDtype = upcastType(x.dtype, 'int32'); const result = tf.zeros(outShape, resultDtype); const reduceSize = util.sizeFromShape(reduceShape); @@ -559,9 +560,9 @@ export class MathBackendCPU extends KernelBackend { assertNotComplex(x, 'argMin'); const axes = [axis]; - axis_util.assertAxesAreInnerMostDims('argMin', axes, x.rank); + backend_util.assertAxesAreInnerMostDims('argMin', axes, x.rank); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const result = tf.zeros(outShape, 'int32'); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -587,9 +588,9 @@ export class MathBackendCPU extends KernelBackend { assertNotComplex(x, 'argMax'); const axes = [axis]; - axis_util.assertAxesAreInnerMostDims('argMax', axes, x.rank); + backend_util.assertAxesAreInnerMostDims('argMax', axes, x.rank); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const result = tf.zeros(outShape, 'int32'); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -762,9 +763,9 @@ export class MathBackendCPU extends KernelBackend { min(x: Tensor, axes: number[]): Tensor { assertNotComplex(x, 'min'); - axis_util.assertAxesAreInnerMostDims('min', axes, x.rank); + backend_util.assertAxesAreInnerMostDims('min', axes, x.rank); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -807,9 +808,9 @@ export class MathBackendCPU extends KernelBackend { max(x: Tensor, axes: number[]): Tensor { assertNotComplex(x, 'max'); - axis_util.assertAxesAreInnerMostDims('max', axes, x.rank); + backend_util.assertAxesAreInnerMostDims('max', axes, x.rank); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -839,9 +840,9 @@ export class MathBackendCPU extends KernelBackend { all(x: Tensor, axes: number[]): Tensor { assertNotComplex(x, 'all'); - axis_util.assertAxesAreInnerMostDims('all', axes, x.rank); + backend_util.assertAxesAreInnerMostDims('all', axes, x.rank); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -862,9 +863,9 @@ export class MathBackendCPU extends KernelBackend { any(x: Tensor, axes: number[]): Tensor { assertNotComplex(x, 'any'); - axis_util.assertAxesAreInnerMostDims('any', axes, x.rank); + backend_util.assertAxesAreInnerMostDims('any', axes, x.rank); const [outShape, reduceShape] = - axis_util.computeOutAndReduceShapes(x.shape, axes); + backend_util.computeOutAndReduceShapes(x.shape, axes); const result = tf.zeros(outShape, x.dtype); const reduceSize = util.sizeFromShape(reduceShape); const vals = this.readSync(result.dataId) as TypedArray; @@ -1147,8 +1148,8 @@ export class MathBackendCPU extends KernelBackend { // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 - const scaleAlpha = selu_util.SELU_SCALEALPHA; - const scale = selu_util.SELU_SCALE; + const scaleAlpha = backend_util.SELU_SCALEALPHA; + const scale = backend_util.SELU_SCALE; const resultValues = new Float32Array(x.size); const values = this.readSync(x.dataId) as TypedArray; @@ -1402,12 +1403,12 @@ export class MathBackendCPU extends KernelBackend { const resultValues = new Float32Array(x.size); const values = this.readSync(x.dataId) as TypedArray; - const p = erf_util.ERF_P; - const a1 = erf_util.ERF_A1; - const a2 = erf_util.ERF_A2; - const a3 = erf_util.ERF_A3; - const a4 = erf_util.ERF_A4; - const a5 = erf_util.ERF_A5; + const p = backend_util.ERF_P; + const a1 = backend_util.ERF_A1; + const a2 = backend_util.ERF_A2; + const a3 = backend_util.ERF_A3; + const a4 = backend_util.ERF_A4; + const a5 = backend_util.ERF_A5; for (let i = 0; i < values.length; ++i) { const sign = Math.sign(values[i]); const v = Math.abs(values[i]); @@ -1438,7 +1439,7 @@ export class MathBackendCPU extends KernelBackend { fusedConv2d( {input, filter, convInfo, bias, activation, preluActivationWeights}: - fused_util.FusedConv2DConfig): Tensor4D { + backend_util.FusedConv2DConfig): Tensor4D { let result = this.conv2d(input, filter, convInfo); if (bias) { @@ -1452,7 +1453,7 @@ export class MathBackendCPU extends KernelBackend { return result; } - conv2d(x: Tensor4D, filter: Tensor4D, convInfo: conv_util.Conv2DInfo): + conv2d(x: Tensor4D, filter: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([x, filter], 'conv2d'); @@ -1519,7 +1520,7 @@ export class MathBackendCPU extends KernelBackend { return y.toTensor() as Tensor4D; } - conv3d(x: Tensor5D, filter: Tensor5D, convInfo: conv_util.Conv3DInfo): + conv3d(x: Tensor5D, filter: Tensor5D, convInfo: backend_util.Conv3DInfo): Tensor5D { const filterDepth = convInfo.filterDepth; const filterHeight = convInfo.filterHeight; @@ -1590,7 +1591,7 @@ export class MathBackendCPU extends KernelBackend { conv2dDerInput( dy: Tensor4D, filter: Tensor4D, - convInfo: conv_util.Conv2DInfo): Tensor4D { + convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([dy, filter], 'conv2dDerInput'); const dx = tf.buffer(convInfo.inShape, 'float32'); @@ -1669,7 +1670,7 @@ export class MathBackendCPU extends KernelBackend { conv3dDerInput( dy: Tensor5D, filter: Tensor5D, - convInfo: conv_util.Conv3DInfo): Tensor5D { + convInfo: backend_util.Conv3DInfo): Tensor5D { const dx = tf.buffer(convInfo.inShape, 'float32'); const dxValues = dx.values; const [dxS0, dxS1, dxS2, dxS3] = dx.strides; @@ -1753,7 +1754,7 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: conv_util.Conv2DInfo): + conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([x, dy], 'conv2dDerFilter'); @@ -1805,7 +1806,7 @@ export class MathBackendCPU extends KernelBackend { return dW.toTensor(); } - conv3dDerFilter(x: Tensor5D, dy: Tensor5D, convInfo: conv_util.Conv3DInfo): + conv3dDerFilter(x: Tensor5D, dy: Tensor5D, convInfo: backend_util.Conv3DInfo): Tensor5D { const strideDepth = convInfo.strideDepth; const strideHeight = convInfo.strideHeight; @@ -1887,7 +1888,7 @@ export class MathBackendCPU extends KernelBackend { fusedDepthwiseConv2D( {input, filter, convInfo, bias, activation, preluActivationWeights}: - fused_util.FusedConv2DConfig): Tensor4D { + backend_util.FusedConv2DConfig): Tensor4D { let result = this.depthwiseConv2D(input, filter, convInfo); if (bias) { @@ -1902,7 +1903,8 @@ export class MathBackendCPU extends KernelBackend { } depthwiseConv2D( - x: Tensor4D, filter: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { + x: Tensor4D, filter: Tensor4D, + convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([x, filter], 'depthwiseConv2D'); const filterHeight = convInfo.filterHeight; @@ -1961,7 +1963,7 @@ export class MathBackendCPU extends KernelBackend { depthwiseConv2DDerInput( dy: Tensor4D, filter: Tensor4D, - convInfo: conv_util.Conv2DInfo): Tensor4D { + convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([dy, filter], 'depthwiseConv2DDerInput'); const dx = tf.buffer(convInfo.inShape, 'float32'); @@ -2029,7 +2031,7 @@ export class MathBackendCPU extends KernelBackend { } depthwiseConv2DDerFilter( - x: Tensor4D, dy: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { + x: Tensor4D, dy: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([x, dy], 'depthwiseConv2DDerFilter'); const strideHeight = convInfo.strideHeight; @@ -2128,15 +2130,15 @@ export class MathBackendCPU extends KernelBackend { const prod = blockShape.reduce((a, b) => a * b); - const reshaped = array_ops_util.getReshaped(x.shape, blockShape, prod); + const reshaped = backend_util.getReshaped(x.shape, blockShape, prod); const permuted = - array_ops_util.getPermuted(reshaped.length, blockShape.length); + backend_util.getPermuted(reshaped.length, blockShape.length); const reshapedPermuted = - array_ops_util.getReshapedPermuted(x.shape, blockShape, prod); + backend_util.getReshapedPermuted(x.shape, blockShape, prod); const sliceBeginCoords = - array_ops_util.getSliceBeginCoords(crops, blockShape.length); + backend_util.getSliceBeginCoords(crops, blockShape.length); const sliceSize = - array_ops_util.getSliceSize(reshapedPermuted, crops, blockShape.length); + backend_util.getSliceSize(reshapedPermuted, crops, blockShape.length); return tf.transpose(x.reshape(reshaped), permuted) .reshape(reshapedPermuted) @@ -2158,10 +2160,10 @@ export class MathBackendCPU extends KernelBackend { const paddedX = x.pad(completePaddings); const reshapedPaddedShape = - array_ops_util.getReshaped(paddedX.shape, blockShape, prod, false); - const permutedReshapedPaddedPermutation = array_ops_util.getPermuted( + backend_util.getReshaped(paddedX.shape, blockShape, prod, false); + const permutedReshapedPaddedPermutation = backend_util.getPermuted( reshapedPaddedShape.length, blockShape.length, false); - const flattenShape = array_ops_util.getReshapedPermuted( + const flattenShape = backend_util.getReshapedPermuted( paddedX.shape, blockShape, prod, false); return tf.transpose( @@ -2171,7 +2173,7 @@ export class MathBackendCPU extends KernelBackend { } private pool( - x: Tensor4D, convInfo: conv_util.Conv2DInfo, + x: Tensor4D, convInfo: backend_util.Conv2DInfo, poolType: 'max'|'avg'): Tensor4D { assertNotComplex(x, 'pool'); @@ -2241,11 +2243,11 @@ export class MathBackendCPU extends KernelBackend { return output.toTensor() as Tensor4D; } - maxPool(x: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { + maxPool(x: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { return this.pool(x, convInfo, 'max'); } - private maxPoolPositions(x: Tensor4D, convInfo: conv_util.Conv2DInfo): + private maxPoolPositions(x: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { const maxPositions = tf.buffer(convInfo.outShape, 'int32'); const strideHeight = convInfo.strideHeight; @@ -2301,7 +2303,7 @@ export class MathBackendCPU extends KernelBackend { maxPoolBackprop( dy: Tensor4D, x: Tensor4D, y: Tensor4D, - convInfo: conv_util.Conv2DInfo): Tensor4D { + convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([x, y], 'maxPoolBackprop'); const maxPositions = this.maxPoolPositions(x, convInfo); @@ -2359,7 +2361,7 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - avgPoolBackprop(dy: Tensor4D, x: Tensor4D, convInfo: conv_util.Conv2DInfo): + avgPoolBackprop(dy: Tensor4D, x: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex([dy, x], 'avgPoolBackprop'); @@ -2413,7 +2415,7 @@ export class MathBackendCPU extends KernelBackend { } private pool3d( - x: Tensor5D, convInfo: conv_util.Conv3DInfo, + x: Tensor5D, convInfo: backend_util.Conv3DInfo, poolType: 'max'|'avg'): Tensor5D { assertNotComplex(x, 'pool3d'); @@ -2520,14 +2522,14 @@ export class MathBackendCPU extends KernelBackend { return output.toTensor() as Tensor5D; } - avgPool3d(x: Tensor5D, convInfo: conv_util.Conv3DInfo): Tensor5D { + avgPool3d(x: Tensor5D, convInfo: backend_util.Conv3DInfo): Tensor5D { assertNotComplex(x, 'avgPool3d'); return this.pool3d(x, convInfo, 'avg').toFloat(); } - avgPool3dBackprop(dy: Tensor5D, x: Tensor5D, convInfo: conv_util.Conv3DInfo): - Tensor5D { + avgPool3dBackprop( + dy: Tensor5D, x: Tensor5D, convInfo: backend_util.Conv3DInfo): Tensor5D { assertNotComplex([dy, x], 'avgPool3dBackprop'); const strideDepth = convInfo.strideDepth; @@ -2600,13 +2602,13 @@ export class MathBackendCPU extends KernelBackend { return dx.toTensor(); } - maxPool3d(x: Tensor5D, convInfo: conv_util.Conv3DInfo): Tensor5D { + maxPool3d(x: Tensor5D, convInfo: backend_util.Conv3DInfo): Tensor5D { assertNotComplex(x, 'maxPool3d'); return this.pool3d(x, convInfo, 'max').toFloat(); } - private maxPool3dPositions(x: Tensor5D, convInfo: conv_util.Conv3DInfo): + private maxPool3dPositions(x: Tensor5D, convInfo: backend_util.Conv3DInfo): Tensor5D { const maxPositions = tf.buffer(convInfo.outShape, 'int32'); const strideDepth = convInfo.strideDepth; @@ -2685,7 +2687,7 @@ export class MathBackendCPU extends KernelBackend { maxPool3dBackprop( dy: Tensor5D, x: Tensor5D, y: Tensor5D, - convInfo: conv_util.Conv3DInfo): Tensor5D { + convInfo: backend_util.Conv3DInfo): Tensor5D { assertNotComplex([x, y], 'maxPool3dBackprop'); const maxPositions = this.maxPool3dPositions(x, convInfo); @@ -2774,7 +2776,7 @@ export class MathBackendCPU extends KernelBackend { return backend_util.reshapeTensor(x, shape); } - avgPool(x: Tensor4D, convInfo: conv_util.Conv2DInfo): Tensor4D { + avgPool(x: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex(x, 'avgPool'); return this.pool(x, convInfo, 'avg').toFloat(); @@ -3287,7 +3289,7 @@ export class MathBackendCPU extends KernelBackend { const res = this.readSync(this.fftImpl(input, inverse).dataId) as Float32Array; for (let d = 0; d < innerDim; d++) { - const c = complex_util.getComplexWithIndex(res, d); + const c = backend_util.getComplexWithIndex(res, d); realResult.values[b * innerDim + d] = c.real; imagResult.values[b * innerDim + d] = c.imag; } @@ -3314,7 +3316,7 @@ export class MathBackendCPU extends KernelBackend { const data = this.readSync(x.dataId) as TypedArray; const rawOutput = this.fourierTransformByMatmul(data, n, inverse) as Float32Array; - const output = complex_util.splitRealAndImagArrays(rawOutput); + const output = backend_util.splitRealAndImagArrays(rawOutput); return tf.complex(output.real, output.imag).as2D(x.shape[0], x.shape[1]); } } @@ -3330,16 +3332,16 @@ export class MathBackendCPU extends KernelBackend { } const data = this.readSync(input.dataId) as TypedArray as Float32Array; const half = size / 2; - const evenComplex = complex_util.complexWithEvenIndex(data); + const evenComplex = backend_util.complexWithEvenIndex(data); let evenTensor = tf.complex(evenComplex.real, evenComplex.imag).as1D(); - const oddComplex = complex_util.complexWithOddIndex(data); + const oddComplex = backend_util.complexWithOddIndex(data); let oddTensor = tf.complex(oddComplex.real, oddComplex.imag).as1D(); // Recursive call for half part of original input. evenTensor = this.fftRadix2(evenTensor, half, inverse); oddTensor = this.fftRadix2(oddTensor, half, inverse); - const e = complex_util.exponents(size, inverse); + const e = backend_util.exponents(size, inverse); const exponent = tf.complex(e.real, e.imag).mul(oddTensor); const addPart = evenTensor.add(exponent); @@ -3360,8 +3362,8 @@ export class MathBackendCPU extends KernelBackend { let real = 0.0; let imag = 0.0; for (let c = 0; c < size; c++) { - const e = complex_util.exponent(r * c, size, inverse); - const term = complex_util.getComplexWithIndex(data as Float32Array, c); + const e = backend_util.exponent(r * c, size, inverse); + const term = backend_util.getComplexWithIndex(data as Float32Array, c); real += term.real * e.real - term.imag * e.imag; imag += term.real * e.imag + term.imag * e.real; } @@ -3369,7 +3371,7 @@ export class MathBackendCPU extends KernelBackend { real /= size; imag /= size; } - complex_util.assignToTypedArray(ret, real, imag, r); + backend_util.assignToTypedArray(ret, real, imag, r); } return ret; } @@ -3423,13 +3425,12 @@ export class MathBackendCPU extends KernelBackend { private broadcastedBinaryOp( a: Tensor, b: Tensor, dtype: DataType, op: (a: number, b: number) => number): Tensor { - const newShape = - broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape); + const newShape = backend_util.assertAndGetBroadcastShape(a.shape, b.shape); const result = tf.buffer(newShape, dtype); const aVals = this.readSync(a.dataId) as TypedArray; const bVals = this.readSync(b.dataId) as TypedArray; - const aBroadcastDims = broadcast_util.getBroadcastDims(a.shape, newShape); - const bBroadcastDims = broadcast_util.getBroadcastDims(b.shape, newShape); + const aBroadcastDims = backend_util.getBroadcastDims(a.shape, newShape); + const bBroadcastDims = backend_util.getBroadcastDims(b.shape, newShape); const resVals = result.values; if (aBroadcastDims.length + bBroadcastDims.length === 0) { @@ -3461,15 +3462,14 @@ export class MathBackendCPU extends KernelBackend { op: (aReal: number, aImag: number, bReal: number, bImag: number) => {real: number, imag: number}): Tensor { - const newShape = - broadcast_util.assertAndGetBroadcastShape(a.shape, b.shape); + const newShape = backend_util.assertAndGetBroadcastShape(a.shape, b.shape); const realResult = tf.buffer(newShape, 'float32'); const imagResult = tf.buffer(newShape, 'float32'); const aVals = this.readSync(a.dataId) as TypedArray; const bVals = this.readSync(b.dataId) as TypedArray; - const aBroadcastDims = broadcast_util.getBroadcastDims(a.shape, newShape); - const bBroadcastDims = broadcast_util.getBroadcastDims(b.shape, newShape); + const aBroadcastDims = backend_util.getBroadcastDims(a.shape, newShape); + const bBroadcastDims = backend_util.getBroadcastDims(b.shape, newShape); const realVals = realResult.values; const imagVals = imagResult.values; @@ -3669,8 +3669,7 @@ export class MathBackendCPU extends KernelBackend { sparseIndices: Tensor, sparseValues: Tensor, outputShape: ShapeMap[R], defaultValue: Scalar): Tensor { const {sliceRank, numUpdates, sliceSize, strides, outputSize} = - scatter_nd_util.calculateShapes( - sparseValues, sparseIndices, outputShape); + backend_util.calculateShapes(sparseValues, sparseIndices, outputShape); const sumDupeIndices = false; return this.scatter( sparseIndices, sparseValues, outputShape, outputSize, sliceSize, @@ -3682,7 +3681,7 @@ export class MathBackendCPU extends KernelBackend { const sliceRank = indicesShape[indicesShape.length - 1]; const [resultShape, numSlices, sliceSize, strides] = - gather_nd_util.prepareAndValidate(x, indices); + backend_util.prepareAndValidate(x, indices); if (numSlices === 0) { return tf.tensor([], resultShape, x.dtype); } @@ -3714,7 +3713,7 @@ export class MathBackendCPU extends KernelBackend { scatterND( indices: Tensor, updates: Tensor, shape: ShapeMap[R]): Tensor { const {sliceRank, numUpdates, sliceSize, strides, outputSize} = - scatter_nd_util.calculateShapes(updates, indices, shape); + backend_util.calculateShapes(updates, indices, shape); const defaultValue = tf.scalar(0); const sumDupeIndices = true; return this.scatter( diff --git a/tfjs-backend-cpu/src/backend_cpu_test.ts b/tfjs-backend-cpu/src/backend_cpu_test.ts index e1d07f15c88..768ffe578db 100644 --- a/tfjs-backend-cpu/src/backend_cpu_test.ts +++ b/tfjs-backend-cpu/src/backend_cpu_test.ts @@ -16,22 +16,19 @@ */ import * as tf from '@tensorflow/tfjs-core'; -import {engine, util} from '@tensorflow/tfjs-core'; - -// tslint:disable-next-line: no-imports-from-dist -import {describeWithFlags} from '@tensorflow/tfjs-core/dist/jasmine_util'; +import {engine, test_util, util} from '@tensorflow/tfjs-core'; +const {expectArraysClose, expectArraysEqual} = test_util; // tslint:disable-next-line: no-imports-from-dist -import {expectArraysClose, expectArraysEqual} from '@tensorflow/tfjs-core/dist/test_util'; +import {describeWithFlags, ALL_ENVS} from '@tensorflow/tfjs-core/dist/jasmine_util'; import {MathBackendCPU} from './backend_cpu'; -import {CPU_ENVS} from './backend_cpu_test_envs'; /** Private test util for decoding array of strings in utf-8. */ function decodeStrings(bytes: Uint8Array[]): string[] { return bytes.map(b => util.decodeString(b)); } -describeWithFlags('backendCPU', CPU_ENVS, () => { +describeWithFlags('backendCPU', ALL_ENVS, () => { let backend: MathBackendCPU; beforeEach(() => { backend = tf.backend() as MathBackendCPU; @@ -49,7 +46,7 @@ describeWithFlags('backendCPU', CPU_ENVS, () => { }); }); -describeWithFlags('depthToSpace', CPU_ENVS, () => { +describeWithFlags('depthToSpace', ALL_ENVS, () => { it('throws when CPU backend used with data format NCHW', () => { const t = tf.tensor4d([1, 2, 3, 4], [1, 4, 1, 1]); const blockSize = 2; @@ -62,7 +59,7 @@ describeWithFlags('depthToSpace', CPU_ENVS, () => { }); }); -describeWithFlags('gatherND CPU', CPU_ENVS, () => { +describeWithFlags('gatherND CPU', ALL_ENVS, () => { it('should throw error when index out of range', () => { const indices = tf.tensor2d([0, 2, 99], [3, 1], 'int32'); const input = tf.tensor2d( @@ -71,7 +68,7 @@ describeWithFlags('gatherND CPU', CPU_ENVS, () => { }); }); -describeWithFlags('scatterND CPU', CPU_ENVS, () => { +describeWithFlags('scatterND CPU', ALL_ENVS, () => { it('should throw error when index out of range', () => { const indices = tf.tensor2d([0, 4, 99], [3, 1], 'int32'); const updates = tf.tensor2d( @@ -89,7 +86,7 @@ describeWithFlags('scatterND CPU', CPU_ENVS, () => { }); }); -describeWithFlags('sparseToDense CPU', CPU_ENVS, () => { +describeWithFlags('sparseToDense CPU', ALL_ENVS, () => { it('should throw error when index out of range', () => { const defaultValue = 2; const indices = tf.tensor1d([0, 2, 6], 'int32'); @@ -100,7 +97,7 @@ describeWithFlags('sparseToDense CPU', CPU_ENVS, () => { }); }); -describeWithFlags('memory cpu', CPU_ENVS, () => { +describeWithFlags('memory cpu', ALL_ENVS, () => { it('unreliable is true due to auto gc', () => { tf.tensor(1); const mem = tf.memory(); @@ -136,7 +133,7 @@ describeWithFlags('memory cpu', CPU_ENVS, () => { }); }); -describeWithFlags('CPU backend has sync init', CPU_ENVS, () => { +describeWithFlags('CPU backend has sync init', ALL_ENVS, () => { it('can do matmul without waiting for ready', async () => { tf.registerBackend('my-cpu', () => { return new MathBackendCPU(); diff --git a/tfjs-backend-cpu/src/backend_cpu_test_envs.ts b/tfjs-backend-cpu/src/backend_cpu_test_envs.ts deleted file mode 100644 index adb7ae21113..00000000000 --- a/tfjs-backend-cpu/src/backend_cpu_test_envs.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @license - * Copyright 2020 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -// tslint:disable-next-line: no-imports-from-dist -import {Constraints} from '@tensorflow/tfjs-core/dist/jasmine_util'; - -export const CPU_ENVS: Constraints = { - predicate: testEnv => testEnv.backendName === 'cpu' -}; diff --git a/tfjs-backend-cpu/yarn.lock b/tfjs-backend-cpu/yarn.lock index 5b36fab966a..754e4d08dbc 100644 --- a/tfjs-backend-cpu/yarn.lock +++ b/tfjs-backend-cpu/yarn.lock @@ -1507,11 +1507,6 @@ inline-source-map@~0.6.0: dependencies: source-map "~0.5.3" -interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== - invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -2594,13 +2589,6 @@ readdirp@~3.3.0: dependencies: picomatch "^2.0.7" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -2793,15 +2781,6 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== -shelljs@~0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" - integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - signal-exit@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" diff --git a/tfjs-converter/package.json b/tfjs-converter/package.json index bd99142fd41..a6b93fd2519 100644 --- a/tfjs-converter/package.json +++ b/tfjs-converter/package.json @@ -59,6 +59,7 @@ "build-ci": "yarn gen-json --test && tsc", "build-core": "cd ../tfjs-core && yarn && yarn build", "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", + "build-backend-cpu-ci": "cd ../tfjs-backend-cpu && yarn && yarn build-ci", "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", "build-deps": "yarn build-core && yarn build-backend-cpu", "build-deps-ci": "yarn build-core-ci && yarn build-backend-cpu", diff --git a/tfjs-core/package.json b/tfjs-core/package.json index b6ad71a5c86..10d632bf5b2 100644 --- a/tfjs-core/package.json +++ b/tfjs-core/package.json @@ -53,7 +53,7 @@ "yargs": "~13.2.2" }, "scripts": { - "build-ci": "./scripts/enumerate-tests.js --ci && tsc && yarn build-cpu-backend && yarn build-test-snippets", + "build-ci": "./scripts/enumerate-tests.js --ci && tsc && yarn build-deps-ci && yarn build-test-snippets", "build": "node ./scripts/enumerate-tests.js && tsc", "build-npm": "./scripts/build-npm.sh", "build-deps-ci": "yarn build-cpu-backend", diff --git a/tfjs-core/src/backends/backend_util.ts b/tfjs-core/src/backends/backend_util.ts index f5a4839b469..0b68e0faa62 100644 --- a/tfjs-core/src/backends/backend_util.ts +++ b/tfjs-core/src/backends/backend_util.ts @@ -33,6 +33,18 @@ export {Activation, FusedConv2DConfig} from '../ops/fused_util'; export * from '../ops/reduce_util'; export {BackendValues, TypedArray, upcastType, PixelData} from '../types'; export {MemoryInfo, TimingInfo} from '../engine'; +export * from '../ops/broadcast_util'; +export * from '../ops/axis_util'; +export * from '../ops/concat_util'; +export * from '../ops/array_ops_util'; +export * from '../ops/gather_nd_util'; +export * from '../ops/scatter_nd_util'; +export * from '../ops/selu_util'; +export * from '../ops/fused_util'; +export * from '../ops/erf_util'; +export * from '../ops/conv_util'; +export * from '../log'; +export * from '../backends/complex_util'; export function castTensor( x: T, dtype: DataType, backend: KernelBackend): T { diff --git a/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts b/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts index f15d0c2e28a..9b7144e4ed1 100644 --- a/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts +++ b/tfjs-core/src/backends/webgl/kernels/Transpose_impl.ts @@ -31,7 +31,8 @@ export function transposeImpl( return backend.runWebGLProgram(program, [x], x.dtype); } -// todo(@yassogba) import this from cpu backend once that package is published. +// todo(@yassogba) import this from cpu backend once webgl and cpu backends are +// out of core. export function transposeImplCPU( xVals: TypedArray, xShape: number[], dtype: DataType, perm: number[], newShape: number[]): TypedArray { diff --git a/tfjs-core/src/index.ts b/tfjs-core/src/index.ts index 45212aedb21..39a2f9782ab 100644 --- a/tfjs-core/src/index.ts +++ b/tfjs-core/src/index.ts @@ -88,18 +88,7 @@ export {nextFrame} from './browser_util'; // Second level exports. import * as backend_util from './backends/backend_util'; -import * as complex_util from './backends/complex_util'; -import * as broadcast_util from './ops/broadcast_util'; -import * as axis_util from './ops/axis_util'; -import * as concat_util from './ops/concat_util'; -import * as array_ops_util from './ops/array_ops_util'; -import * as gather_nd_util from './ops/gather_nd_util'; -import * as scatter_nd_util from './ops/scatter_nd_util'; -import * as selu_util from './ops/selu_util'; -import * as fused_util from './ops/fused_util'; -import * as erf_util from './ops/erf_util'; -import * as conv_util from './ops/conv_util'; -import * as log_util from './log'; + export { browser, io, @@ -108,23 +97,11 @@ export { test_util, util, backend_util, - complex_util, webgl, tensor_util, slice_util, gather_util, - scatter_util, - broadcast_util, - axis_util, - concat_util, - array_ops_util, - gather_nd_util, - selu_util, - scatter_nd_util, - fused_util, - erf_util, - conv_util, - log_util, + scatter_util }; import * as kernel_impls from './backends/kernel_impls'; @@ -135,7 +112,7 @@ export {KernelBackend, BackendTimingInfo, DataMover, DataStorage} from './backen import * as ops from './ops/ops'; setOpHandler(ops); -// Export all kernel names / info +// Export all kernel names / info. export * from './kernel_names'; // Import all op chainers and add type info to Tensor. diff --git a/tfjs-core/src/kernel_registry_test.ts b/tfjs-core/src/kernel_registry_test.ts index a0947efd256..2b17b5d3504 100644 --- a/tfjs-core/src/kernel_registry_test.ts +++ b/tfjs-core/src/kernel_registry_test.ts @@ -54,25 +54,37 @@ describeWithFlags('kernel_registry', ALL_ENVS, () => { .toThrowError(); }); - // tslint:disable-next-line: ban - xit('errors when registering the same kernel twice', () => { + it('errors when registering the same kernel twice', () => { + interface TestBackend extends KernelBackend { + id: number; + } + tf.registerBackend('backend1', () => { + return { + id: 1, + dispose: () => null, + disposeData: (dataId: {}) => null, + numDataIds: () => 0 + } as TestBackend; + }); + // TODO(yassogba) restore this once WebGL backend is out of core. tf.registerKernel({ kernelName: 'MyKernel', - backendName: tf.getBackend(), + backendName: 'backend1', kernelFunc: () => { return null; } }); expect(() => tf.registerKernel({ kernelName: 'MyKernel', - backendName: tf.getBackend(), + backendName: 'backend1', kernelFunc: () => { return null; } })).toThrowError(); - tf.unregisterKernel('MyKernel', tf.getBackend()); + tf.unregisterKernel('MyKernel', 'backend1'); + tf.removeBackend('backend1'); }); it('register same kernel on two different backends', () => { diff --git a/tfjs-core/src/test_async_backends.ts b/tfjs-core/src/test_async_backends.ts index 0449ed0c0d8..5b751beb7c5 100644 --- a/tfjs-core/src/test_async_backends.ts +++ b/tfjs-core/src/test_async_backends.ts @@ -21,6 +21,8 @@ * our exported test files. */ +// Use require here to workaround this being a circular dependency. +// This should only be done in tests. // tslint:disable-next-line: no-require-imports require('@tensorflow/tfjs-backend-cpu'); import './index'; @@ -41,8 +43,6 @@ const asyncBackend = new AsyncCPUBackend(); // backend is cast as any so that we can access methods through bracket // notation. -// tslint:disable-next-line:no-any -// const backend: any = new MathBackendCPU(); const backend: KernelBackend = engine().findBackend('cpu'); const proxyBackend = new Proxy(asyncBackend, { get(target, name, receiver) { diff --git a/tfjs-data/package.json b/tfjs-data/package.json index 1b07e898568..3a058dc4cbe 100644 --- a/tfjs-data/package.json +++ b/tfjs-data/package.json @@ -46,9 +46,10 @@ "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", "build-layers": "cd ../tfjs-layers && yarn && yarn build", "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", + "build-backend-cpu-ci": "cd ../tfjs-backend-cpu && yarn && yarn build-ci", "build-layers-ci": "cd ../tfjs-layers && yarn && yarn build-ci", "build-deps": "yarn build-core && yarn build-layers && yarn build-backend-cpu", - "build-deps-ci": "yarn build-core-ci && yarn build-layers-ci && yarn build-backend-cpu", + "build-deps-ci": "yarn build-core-ci && yarn build-layers-ci && yarn build-backend-cpu-ci", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", "publish-local": "rimraf dist/ && yarn build-npm && yalc push", diff --git a/tfjs-layers/package.json b/tfjs-layers/package.json index 6fa57a135ec..4d6cee49f65 100644 --- a/tfjs-layers/package.json +++ b/tfjs-layers/package.json @@ -43,6 +43,7 @@ "build-ci": "tsc", "build-core": "cd ../tfjs-core && yarn && yarn build", "build-backend-cpu": "cd ../tfjs-backend-cpu && yarn && yarn build", + "build-backend-cpu-ci": "cd ../tfjs-backend-cpu && yarn && yarn build-ci", "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", "build-deps": "yarn build-core && yarn build-backend-cpu", "build-deps-ci": "yarn build-core-ci && yarn build-backend-cpu", From 7a81d4b0ed3a5c8dd3920ebc981d814308ae30ab Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Tue, 7 Apr 2020 15:38:08 -0400 Subject: [PATCH 41/46] save --- tfjs-backend-cpu/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index deed454b429..61f39d1f82c 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -46,6 +46,7 @@ "build-ci": "tsc", "build": "tsc", "build-core": "cd ../tfjs-core && yarn && yarn build", + "build-core-ci": "cd ../tfjs-core && yarn && yarn build-ci", "build-npm": "./scripts/build-npm.sh", "link-local": "yalc link", "publish-local": "rimraf dist/ && yarn build && rollup -c && yalc push", From d887b8ddc92e1e67fecbcbcf8ad61ffd027b8011 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Tue, 7 Apr 2020 15:54:34 -0400 Subject: [PATCH 42/46] save --- tfjs-core/src/kernel_registry_test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tfjs-core/src/kernel_registry_test.ts b/tfjs-core/src/kernel_registry_test.ts index 2b17b5d3504..43bfdef4043 100644 --- a/tfjs-core/src/kernel_registry_test.ts +++ b/tfjs-core/src/kernel_registry_test.ts @@ -54,7 +54,8 @@ describeWithFlags('kernel_registry', ALL_ENVS, () => { .toThrowError(); }); - it('errors when registering the same kernel twice', () => { + // tslint:disable-next-line: ban + xit('errors when registering the same kernel twice', () => { interface TestBackend extends KernelBackend { id: number; } From 31350eea7b5879c873d933e181dc4c3c00040e17 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Tue, 7 Apr 2020 16:45:22 -0400 Subject: [PATCH 43/46] fix imports --- tfjs-backend-cpu/src/backend_cpu.ts | 5 +++-- tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax.ts | 8 +++----- .../src/kernels/MaxPoolWithArgmax_impl.ts | 9 ++++----- tfjs-backend-cpu/src/pool_utils.ts | 15 ++++++--------- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/tfjs-backend-cpu/src/backend_cpu.ts b/tfjs-backend-cpu/src/backend_cpu.ts index dc78bcb8c6f..7f2e0ba77ea 100644 --- a/tfjs-backend-cpu/src/backend_cpu.ts +++ b/tfjs-backend-cpu/src/backend_cpu.ts @@ -17,9 +17,10 @@ import * as tf from '@tensorflow/tfjs-core'; import {engine, env} from '@tensorflow/tfjs-core'; -import {backend_util, slice_util, util} from '@tensorflow/tfjs-core'; +import {backend_util, buffer, slice_util, util} from '@tensorflow/tfjs-core'; import {BackendTimingInfo, DataStorage, DataType, DataValues, KernelBackend, NumericDataType, Rank, Scalar, ShapeMap, Tensor, Tensor1D, Tensor2D, Tensor3D, Tensor4D, Tensor5D, TensorBuffer, TypedArray, upcastType} from '@tensorflow/tfjs-core'; import {kernel_impls} from '@tensorflow/tfjs-core'; + const nonMaxSuppressionV3 = kernel_impls.nonMaxSuppressionV3; const split = kernel_impls.split; const tile = kernel_impls.tile; @@ -2173,7 +2174,7 @@ export class MathBackendCPU extends KernelBackend { .reshape(flattenShape) as T; } - maxPool(x: Tensor4D, convInfo: Conv2DInfo): Tensor4D { + maxPool(x: Tensor4D, convInfo: backend_util.Conv2DInfo): Tensor4D { assertNotComplex(x, 'maxPool'); const xValues = this.readSync(x.dataId) as TypedArray; return pool(xValues, x.shape, x.dtype, x.strides, convInfo, 'max') diff --git a/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax.ts b/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax.ts index 59e169853d5..6b6831a597a 100644 --- a/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax.ts +++ b/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax.ts @@ -15,10 +15,8 @@ * ============================================================================= */ -import {MaxPoolWithArgmax, MaxPoolWithArgmaxAttrs, MaxPoolWithArgmaxInputs} from '../../../kernel_names'; -import {KernelConfig} from '../../../kernel_registry'; -import * as conv_util from '../../../ops/conv_util'; -import {TypedArray} from '../../../types'; +import {MaxPoolWithArgmax, MaxPoolWithArgmaxAttrs, MaxPoolWithArgmaxInputs} from '@tensorflow/tfjs-core'; +import {backend_util, KernelConfig, TypedArray} from '@tensorflow/tfjs-core'; import {MathBackendCPU} from '../backend_cpu'; import {assertNotComplex} from '../cpu_util'; @@ -35,7 +33,7 @@ export const maxPoolWithArgmaxConfig: KernelConfig = { assertNotComplex(x, 'MaxPoolWithArgmax'); const values = cpuBackend.data.get(x.dataId).values as TypedArray; - const convInfo = conv_util.computePool2DInfo( + const convInfo = backend_util.computePool2DInfo( x.shape as [number, number, number, number], filterSize, strides, [1, 1], pad); const [pooled, indexes] = maxPoolWithArgmaxImpl( diff --git a/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts b/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts index 67162913044..66945ef0a86 100644 --- a/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts +++ b/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts @@ -14,14 +14,13 @@ * limitations under the License. * ============================================================================= */ -import {Conv2DInfo} from '../../../ops/conv_util'; -import {DataType, TypedArray} from '../../../types'; -import {computeStrides} from '../../../util'; +import {backend_util, DataType, TypedArray, util} from '@tensorflow/tfjs-core'; + import {maxPoolPositions, pool} from '../pool_utils'; export function maxPoolWithArgmaxImpl( xValues: TypedArray, xShape: number[], dtype: DataType, - includeBatchInIndex: boolean, convInfo: Conv2DInfo) { - const strides = computeStrides(xShape); + includeBatchInIndex: boolean, convInfo: backend_util.Conv2DInfo) { + const strides = util.computeStrides(xShape); const maxPools = pool(xValues, xShape, dtype, strides, convInfo, 'max'); const maxPositions = maxPoolPositions( xValues, xShape, dtype, convInfo, true, includeBatchInIndex); diff --git a/tfjs-backend-cpu/src/pool_utils.ts b/tfjs-backend-cpu/src/pool_utils.ts index 97b1691073d..3c36424dd05 100644 --- a/tfjs-backend-cpu/src/pool_utils.ts +++ b/tfjs-backend-cpu/src/pool_utils.ts @@ -15,15 +15,12 @@ * ============================================================================= */ -import {Conv2DInfo} from '../../ops/conv_util'; -import * as ops from '../../ops/ops'; -import {buffer} from '../../ops/ops'; -import {TensorBuffer} from '../../tensor'; -import {DataType, Rank, TypedArray} from '../../types'; +import {backend_util, buffer, DataType, Rank, TensorBuffer, TypedArray} from '@tensorflow/tfjs-core'; export function pool( xValues: TypedArray, xShape: number[], dtype: DataType, strides: number[], - convInfo: Conv2DInfo, poolType: 'max'|'avg'): TensorBuffer { + convInfo: backend_util.Conv2DInfo, + poolType: 'max'|'avg'): TensorBuffer { const strideHeight = convInfo.strideHeight; const strideWidth = convInfo.strideWidth; const dilationHeight = convInfo.dilationHeight; @@ -37,7 +34,7 @@ export function pool( (poolType === 'max' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY); - const output = ops.buffer(convInfo.outShape, dtype); + const output = buffer(convInfo.outShape, dtype); const outputVals = output.values; const outputBatchStrides = @@ -91,9 +88,9 @@ export function pool( export function maxPoolPositions( xValues: TypedArray, xShape: number[], dtype: DataType, - convInfo: Conv2DInfo, flattenPositions = false, + convInfo: backend_util.Conv2DInfo, flattenPositions = false, includeBatchInIndex = false): TensorBuffer { - const maxPositions = ops.buffer(convInfo.outShape, 'int32'); + const maxPositions = buffer(convInfo.outShape, 'int32'); const strideHeight = convInfo.strideHeight; const strideWidth = convInfo.strideWidth; const dilationHeight = convInfo.dilationHeight; From 6e6834a8411601908df9372dca99dceac7bd8347 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Tue, 7 Apr 2020 16:46:55 -0400 Subject: [PATCH 44/46] move pool utils --- tfjs-backend-cpu/src/backend_cpu.ts | 2 +- tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts | 2 +- tfjs-backend-cpu/src/{ => utils}/pool_utils.ts | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename tfjs-backend-cpu/src/{ => utils}/pool_utils.ts (100%) diff --git a/tfjs-backend-cpu/src/backend_cpu.ts b/tfjs-backend-cpu/src/backend_cpu.ts index 7f2e0ba77ea..9d69e3d2d3c 100644 --- a/tfjs-backend-cpu/src/backend_cpu.ts +++ b/tfjs-backend-cpu/src/backend_cpu.ts @@ -28,7 +28,7 @@ const topkImpl = kernel_impls.topkImpl; const whereImpl = kernel_impls.whereImpl; import * as seedrandom from 'seedrandom'; import {assertNotComplex} from './cpu_util'; -import {maxPoolPositions, pool} from './pool_utils'; +import {maxPoolPositions, pool} from './utils/pool_utils'; interface DataId {} diff --git a/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts b/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts index 66945ef0a86..5a40153c3e1 100644 --- a/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts +++ b/tfjs-backend-cpu/src/kernels/MaxPoolWithArgmax_impl.ts @@ -16,7 +16,7 @@ */ import {backend_util, DataType, TypedArray, util} from '@tensorflow/tfjs-core'; -import {maxPoolPositions, pool} from '../pool_utils'; +import {maxPoolPositions, pool} from '../utils/pool_utils'; export function maxPoolWithArgmaxImpl( xValues: TypedArray, xShape: number[], dtype: DataType, includeBatchInIndex: boolean, convInfo: backend_util.Conv2DInfo) { diff --git a/tfjs-backend-cpu/src/pool_utils.ts b/tfjs-backend-cpu/src/utils/pool_utils.ts similarity index 100% rename from tfjs-backend-cpu/src/pool_utils.ts rename to tfjs-backend-cpu/src/utils/pool_utils.ts From a4b5e41c2f243031ba1d3e6e23e3d1484783c403 Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Tue, 7 Apr 2020 17:06:38 -0400 Subject: [PATCH 45/46] update scripts --- tfjs-backend-cpu/package.json | 2 +- tfjs-core/package.json | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tfjs-backend-cpu/package.json b/tfjs-backend-cpu/package.json index 61f39d1f82c..810f56e0584 100644 --- a/tfjs-backend-cpu/package.json +++ b/tfjs-backend-cpu/package.json @@ -52,7 +52,7 @@ "publish-local": "rimraf dist/ && yarn build && rollup -c && yalc push", "publish-npm": "npm publish", "lint": "tslint -p . -t verbose", - "test": "karma start", + "test": "yarn build-core && karma start", "run-browserstack": "karma start --browserstack", "test-ci": "./scripts/test-ci.sh" }, diff --git a/tfjs-core/package.json b/tfjs-core/package.json index 62d4bdbd49a..79fa046c86d 100644 --- a/tfjs-core/package.json +++ b/tfjs-core/package.json @@ -56,8 +56,10 @@ "build-ci": "./scripts/enumerate-tests.js --ci && tsc && yarn build-deps-ci && yarn build-test-snippets", "build": "node ./scripts/enumerate-tests.js && tsc", "build-npm": "./scripts/build-npm.sh", - "build-deps-ci": "yarn build-cpu-backend", - "build-cpu-backend": "cd ../tfjs-backend-cpu && yarn && yarn build-ci", + "build-deps": "yarn build-cpu-backend", + "build-deps-ci": "yarn build-cpu-backend-ci", + "build-cpu-backend": "cd ../tfjs-backend-cpu && yarn && yarn build", + "build-cpu-backend-ci": "cd ../tfjs-backend-cpu && yarn && yarn build-ci", "build:bazel": "bazelisk build //...", "build-test-snippets": "yarn tsc --project ./scripts/test_snippets/tsconfig.json", "format-all": "clang-format -i -style=Google --glob=src/**/*.ts", @@ -66,7 +68,7 @@ "publish-npm": "npm publish", "lint": "tslint -p . -t verbose", "coverage": "KARMA_COVERAGE=1 karma start --browsers='Chrome' --singleRun", - "test": "karma start", + "test": "yarn && yarn build && yarn build-deps && karma start", "test-webworker": "karma start --worker", "run-browserstack": "karma start --browserstack", "test-bundle-size": "./scripts/test-bundle-size.js", From 0ad2ae2928094e2f303f1303f9ee180bf053362a Mon Sep 17 00:00:00 2001 From: Yannick Assogba Date: Wed, 8 Apr 2020 10:26:51 -0400 Subject: [PATCH 46/46] kick build