refactor(ui): remove unused workers code
parent
827e174f76
commit
e62fbe6242
|
@ -87,11 +87,9 @@
|
|||
"@types/codemirror": "^0.0.56",
|
||||
"@types/d3-color": "^1.2.1",
|
||||
"@types/d3-scale": "^2.0.1",
|
||||
"@types/encoding-down": "^5.0.0",
|
||||
"@types/enzyme": "^3.1.14",
|
||||
"@types/history": "3.2.2",
|
||||
"@types/jest": "^23.3.2",
|
||||
"@types/levelup": "^3.1.0",
|
||||
"@types/lodash": "^4.14.116",
|
||||
"@types/memoize-one": "^4.0.2",
|
||||
"@types/node": "^12.6.8",
|
||||
|
@ -173,13 +171,10 @@
|
|||
"codemirror": "^5.36.0",
|
||||
"d3-format": "^1.3.2",
|
||||
"d3-scale": "^2.1.0",
|
||||
"encoding-down": "^5.0.4",
|
||||
"fast.js": "^0.1.1",
|
||||
"history": "^3.2",
|
||||
"honeybadger-js": "^1.0.2",
|
||||
"immer": "^1.9.3",
|
||||
"level-js": "^3.0.0",
|
||||
"levelup": "^3.1.1",
|
||||
"lodash": "^4.3.0",
|
||||
"memoize-one": "^4.0.2",
|
||||
"moment": "^2.13.0",
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
import levelup from 'levelup'
|
||||
import encoding from 'encoding-down'
|
||||
import level from 'level-js'
|
||||
|
||||
export default levelup(encoding(level('worker'), {valueEncoding: 'json'}))
|
|
@ -1,87 +0,0 @@
|
|||
// Libraries
|
||||
import {times} from 'lodash'
|
||||
import uuid from 'uuid'
|
||||
|
||||
// Utils
|
||||
import Deferred from 'src/utils/Deferred'
|
||||
import DB from 'src/workers/Database'
|
||||
|
||||
// Types
|
||||
import {RequestMessage, ResponseMessage} from 'src/workers/types'
|
||||
|
||||
const workerCount = navigator.hardwareConcurrency - 1 || 2
|
||||
|
||||
class JobManager {
|
||||
private currentIndex: number = 0
|
||||
private workers: Worker[] = []
|
||||
private jobs: {[key: string]: Deferred} = {}
|
||||
|
||||
constructor() {
|
||||
times(workerCount, () => {
|
||||
const worker = new Worker('./worker.ts')
|
||||
|
||||
worker.onmessage = this.handleResponse
|
||||
worker.onerror = this.handleError
|
||||
|
||||
this.workers.push(worker)
|
||||
})
|
||||
}
|
||||
|
||||
private handleResponse = async (e: {data: ResponseMessage}) => {
|
||||
const message = e.data
|
||||
const deferred = this.jobs[message.requestID]
|
||||
|
||||
if (!deferred) {
|
||||
return
|
||||
}
|
||||
|
||||
if (message.result === 'error') {
|
||||
deferred.reject(new Error(message.error))
|
||||
delete this.jobs[origin]
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const payload = await DB.get(message.id)
|
||||
await DB.del(message.id)
|
||||
deferred.resolve(payload)
|
||||
} catch (e) {
|
||||
deferred.reject(e)
|
||||
}
|
||||
|
||||
delete this.jobs[origin]
|
||||
}
|
||||
|
||||
private handleError = err => {
|
||||
console.error(err)
|
||||
}
|
||||
|
||||
private get worker(): Worker {
|
||||
return this.workers[this.currentIndex]
|
||||
}
|
||||
|
||||
private rotateWorker(): void {
|
||||
this.currentIndex += 1
|
||||
this.currentIndex %= workerCount
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
private postJobRequest = async (type: string, payload: any) => {
|
||||
const id = uuid.v1()
|
||||
const deferred = new Deferred()
|
||||
|
||||
this.jobs[id] = deferred
|
||||
|
||||
await DB.put(id, payload)
|
||||
|
||||
const requestMessage: RequestMessage = {id, type}
|
||||
|
||||
this.worker.postMessage(requestMessage)
|
||||
this.rotateWorker()
|
||||
|
||||
return deferred.promise
|
||||
}
|
||||
}
|
||||
|
||||
export const manager = new JobManager()
|
|
@ -1,13 +0,0 @@
|
|||
export interface RequestMessage {
|
||||
id: string
|
||||
type: string
|
||||
}
|
||||
|
||||
export interface ResponseMessage {
|
||||
id: string
|
||||
requestID: string
|
||||
result: 'error' | 'success'
|
||||
error?: string
|
||||
}
|
||||
|
||||
export type Job = (msg: RequestMessage) => Promise<any>
|
|
@ -1,35 +0,0 @@
|
|||
import DB from 'src/workers/Database'
|
||||
import uuid from 'uuid'
|
||||
|
||||
import {RequestMessage, ResponseMessage} from 'src/workers/types'
|
||||
|
||||
export const postSuccessResponse = async (requestID: string, payload: any) => {
|
||||
const id = uuid.v1()
|
||||
|
||||
await DB.put(id, payload)
|
||||
|
||||
const response: ResponseMessage = {
|
||||
id,
|
||||
requestID,
|
||||
result: 'success',
|
||||
}
|
||||
|
||||
postMessage(response)
|
||||
}
|
||||
|
||||
export const postErrorResponse = (requestID: string, err: Error) => {
|
||||
const id = uuid.v1()
|
||||
|
||||
const response: ResponseMessage = {
|
||||
id,
|
||||
requestID,
|
||||
result: 'error',
|
||||
error: err.toString(),
|
||||
}
|
||||
|
||||
postMessage(response)
|
||||
}
|
||||
|
||||
export const removeData = async (msg: RequestMessage): Promise<void> => {
|
||||
await DB.del(msg.id)
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
import {postSuccessResponse, postErrorResponse} from 'src/workers/utils'
|
||||
|
||||
import {RequestMessage, Job} from 'src/workers/types'
|
||||
|
||||
const jobMapping: {[key: string]: Job} = {}
|
||||
|
||||
const errorJob = async (data: RequestMessage) => {
|
||||
postErrorResponse(data.id, new Error('Unknown job type'))
|
||||
}
|
||||
|
||||
onmessage = async (workerMessage: {data: RequestMessage}) => {
|
||||
const message = workerMessage.data
|
||||
const job: Job = jobMapping[message.type] || errorJob
|
||||
|
||||
try {
|
||||
const result = await job(message)
|
||||
|
||||
postSuccessResponse(message.id, result)
|
||||
} catch (e) {
|
||||
postErrorResponse(message.id, e)
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
"target": "es2017",
|
||||
"module": "esNext",
|
||||
"moduleResolution": "node",
|
||||
"lib": ["es2017", "es2018", "dom", "webworker"],
|
||||
"lib": ["es2017", "es2018", "dom"],
|
||||
"skipLibCheck": true,
|
||||
"isolatedModules": false,
|
||||
"jsx": "react",
|
||||
|
|
118
ui/yarn.lock
118
ui/yarn.lock
|
@ -1331,11 +1331,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b"
|
||||
integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==
|
||||
|
||||
"@types/abstract-leveldown@*":
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz#3c7750d0186b954c7f2d2f6acc8c3c7ba0c3412e"
|
||||
integrity sha512-wYxU3kp5zItbxKmeRYCEplS2MW7DzyBnxPGj+GJVHZEUZiK/nn5Ei1sUFgURDh+X051+zsGe28iud3oHjrYWQQ==
|
||||
|
||||
"@types/anymatch@*":
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
|
||||
|
@ -1406,14 +1401,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-1.0.9.tgz#c2cf05a3cd51f810b8d8a9bbca0c74030d4e535e"
|
||||
integrity sha512-m+D4NbQdDlTVaO7QgXAnatR3IDxQYDMBtRhgSCi5rs9R1LPq1y7/2aqa1FJ2IWjFm1mOV63swDxonnCDlHgHMA==
|
||||
|
||||
"@types/encoding-down@^5.0.0":
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/encoding-down/-/encoding-down-5.0.0.tgz#0b5b90b93ac3aa75148f19508044e7bd36463557"
|
||||
integrity sha512-G0MlS/+/U2RIQLcSEhhAcoMrXw3hXUCFSKbhbeEljoKMra2kq+NPX6tfOveSWQLX2hJXBo+YrvKgAGe+tFL1Aw==
|
||||
dependencies:
|
||||
"@types/abstract-leveldown" "*"
|
||||
"@types/level-codec" "*"
|
||||
|
||||
"@types/enzyme@^3.1.14":
|
||||
version "3.1.14"
|
||||
resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.1.14.tgz#379c26205f6e0e272f3a51d6bbdd50071a9d03a6"
|
||||
|
@ -1466,20 +1453,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.3.tgz#246ebcc52771d2327bb8e37aa971b412d9dc4237"
|
||||
integrity sha512-G6EBrbjWDfmIpYu8UcRBOhwtDiYaLj5N5jUR5rx0YvbKxRBhXPZVLUmtfShewSUNKiQwpHavpML69a2WMbIlEQ==
|
||||
|
||||
"@types/level-codec@*":
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/level-codec/-/level-codec-9.0.0.tgz#9f1dc7f9017b6fba094a450602ec0b91cc384059"
|
||||
integrity sha512-SWYkVJylo1dqblkhrr7UtmsQh4wdZA9bV1y3QJSywMPSqGfW0p1w37N1EayZtKbg1dGReIIQEEOtxk4wZvGrWQ==
|
||||
|
||||
"@types/levelup@^3.1.0":
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-3.1.0.tgz#e04f6a8eaf707f88d7c6e043a9067dda431f4538"
|
||||
integrity sha512-Y2SC5PskYsE8+dELuWLCMG+UcUrkhhIz5wV55yX73AAVqr3kDXLYlj6k/vuchXUt1L1b/P1Frt4Dcc3WmWcbLA==
|
||||
dependencies:
|
||||
"@types/abstract-leveldown" "*"
|
||||
"@types/events" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/lodash@^4.14.116":
|
||||
version "4.14.116"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.116.tgz#5ccf215653e3e8c786a58390751033a9adca0eb9"
|
||||
|
@ -1857,13 +1830,6 @@ abbrev@1:
|
|||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||
|
||||
abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6"
|
||||
integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==
|
||||
dependencies:
|
||||
xtend "~4.0.0"
|
||||
|
||||
accepts@~1.3.4, accepts@~1.3.7:
|
||||
version "1.3.7"
|
||||
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
|
||||
|
@ -4085,14 +4051,6 @@ defaults@^1.0.3:
|
|||
dependencies:
|
||||
clone "^1.0.2"
|
||||
|
||||
deferred-leveldown@~4.0.0:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20"
|
||||
integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==
|
||||
dependencies:
|
||||
abstract-leveldown "~5.0.0"
|
||||
inherits "^2.0.3"
|
||||
|
||||
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"
|
||||
|
@ -4467,17 +4425,6 @@ encodeurl@~1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||
|
||||
encoding-down@^5.0.4:
|
||||
version "5.0.4"
|
||||
resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614"
|
||||
integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==
|
||||
dependencies:
|
||||
abstract-leveldown "^5.0.0"
|
||||
inherits "^2.0.3"
|
||||
level-codec "^9.0.0"
|
||||
level-errors "^2.0.0"
|
||||
xtend "^4.0.1"
|
||||
|
||||
encoding@^0.1.11:
|
||||
version "0.1.12"
|
||||
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
|
||||
|
@ -4560,7 +4507,7 @@ enzyme@^3.6.0:
|
|||
rst-selector-parser "^2.2.3"
|
||||
string.prototype.trim "^1.1.2"
|
||||
|
||||
errno@^0.1.3, errno@~0.1.1, errno@~0.1.7:
|
||||
errno@^0.1.3, errno@~0.1.7:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
|
||||
integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
|
||||
|
@ -6129,11 +6076,6 @@ ignore@^4.0.6:
|
|||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
||||
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
|
||||
|
||||
immediate@~3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
|
||||
integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=
|
||||
|
||||
immer@^1.9.3:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-1.9.3.tgz#e88f8cbea730d2cde0f5e7e763000a8608bccdae"
|
||||
|
@ -6622,7 +6564,7 @@ is-symbol@^1.0.2:
|
|||
dependencies:
|
||||
has-symbols "^1.0.0"
|
||||
|
||||
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
|
||||
is-typedarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||
|
@ -7363,48 +7305,6 @@ left-pad@^1.3.0:
|
|||
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
|
||||
integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
|
||||
|
||||
level-codec@^9.0.0:
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.0.tgz#2d3a0e835c4aa8339ec63de3f5a37480b74a5f87"
|
||||
integrity sha512-OIpVvjCcZNP5SdhcNupnsI1zo5Y9Vpm+k/F1gfG5kXrtctlrwanisakweJtE0uA0OpLukRfOQae+Fg0M5Debhg==
|
||||
|
||||
level-errors@^2.0.0, level-errors@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.0.tgz#2de5b566b62eef92f99e19be74397fbc512563fa"
|
||||
integrity sha512-AmY4HCp9h3OiU19uG+3YWkdELgy05OTP/r23aNHaQKWv8DO787yZgsEuGVkoph40uwN+YdUKnANlrxSsoOaaxg==
|
||||
dependencies:
|
||||
errno "~0.1.1"
|
||||
|
||||
level-iterator-stream@~3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730"
|
||||
integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.3.6"
|
||||
xtend "^4.0.0"
|
||||
|
||||
level-js@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/level-js/-/level-js-3.0.0.tgz#e6c066fb529b23eec230849c0751e4f6d548c865"
|
||||
integrity sha512-e2dVpjCWNwIcyboZUsLqx2vERM0I5OPZOE9wfD22fk8b8OeuZRoV4scr0Y+YIyDXE5cwOsO/1LyjsdJ36o+9Ag==
|
||||
dependencies:
|
||||
abstract-leveldown "~5.0.0"
|
||||
immediate "~3.2.3"
|
||||
inherits "^2.0.3"
|
||||
ltgt "^2.1.2"
|
||||
typedarray-to-buffer "~3.1.5"
|
||||
|
||||
levelup@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189"
|
||||
integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==
|
||||
dependencies:
|
||||
deferred-leveldown "~4.0.0"
|
||||
level-errors "~2.0.0"
|
||||
level-iterator-stream "~3.0.0"
|
||||
xtend "~4.0.0"
|
||||
|
||||
leven@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
|
||||
|
@ -7668,11 +7568,6 @@ lru-cache@^5.1.1:
|
|||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
ltgt@^2.1.2:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5"
|
||||
integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=
|
||||
|
||||
magic-string@^0.22.4:
|
||||
version "0.22.5"
|
||||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
|
||||
|
@ -11906,13 +11801,6 @@ typed-styles@^0.0.7:
|
|||
resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9"
|
||||
integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==
|
||||
|
||||
typedarray-to-buffer@~3.1.5:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
|
||||
integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
|
||||
dependencies:
|
||||
is-typedarray "^1.0.0"
|
||||
|
||||
typedarray@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
|
@ -12666,7 +12554,7 @@ xmlbuilder@~9.0.1:
|
|||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
|
||||
integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
|
||||
|
||||
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
|
||||
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
||||
|
|
Loading…
Reference in New Issue