From 99ce58112a6b257b0c0460a2d6f4f33837e8a71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Renaudeau?= Date: Sun, 3 Mar 2019 12:06:58 +0100 Subject: [PATCH] Upgrade and fixes flow --- package.json | 4 +- src/api/Fees.js | 6 +- src/api/Manager.js | 398 +++++++++++++++++--------------- src/bridge/makeMockBridge.js | 6 +- src/countervalues/mock.js | 2 +- src/currencies/localeUtility.js | 42 ++-- src/hw/deviceAccess.js | 5 +- src/partners/react.js | 12 +- src/partners/reactNative.js | 10 +- yarn.lock | 117 ++++++++-- 10 files changed, 351 insertions(+), 251 deletions(-) diff --git a/package.json b/package.json index 2a21471d11..0c0b19464b 100644 --- a/package.json +++ b/package.json @@ -70,9 +70,9 @@ "eslint-config-prettier": "^2.9.0", "eslint-plugin-flowtype": "^2.49.3", "eslint-plugin-react": "^7.7.0", - "flow-bin": "^0.73.0", + "flow-bin": "^0.94.0", "flow-copy-source": "^1.2.1", - "flow-typed": "^2.2.3", + "flow-typed": "^2.5.1", "glob": "^7.1.2", "jest": "^23.1.0", "prettier": "^1.13.4", diff --git a/src/api/Fees.js b/src/api/Fees.js index 4745c89e7d..1fb0e7def3 100644 --- a/src/api/Fees.js +++ b/src/api/Fees.js @@ -10,8 +10,10 @@ export type Fees = { [_: string]: number }; -export const getEstimatedFees = makeLRUCache( - async (currency: CryptoCurrency): Promise => { +export const getEstimatedFees: ( + currency: CryptoCurrency +) => Promise = makeLRUCache( + async currency => { const baseURL = blockchainBaseURL(currency); invariant(baseURL, `Fees for ${currency.id} are not supported`); const { data, status } = await network({ diff --git a/src/api/Manager.js b/src/api/Manager.js index c315017cca..24cf931a45 100644 --- a/src/api/Manager.js +++ b/src/api/Manager.js @@ -13,7 +13,7 @@ import { DeviceOnDashboardExpected } from "@ledgerhq/errors"; import type Transport from "@ledgerhq/hw-transport"; -import { throwError } from "rxjs"; +import { throwError, Observable } from "rxjs"; import { catchError, filter, last, map } from "rxjs/operators"; import { version as livecommonversion } from "../../package.json"; import { createDeviceSocket } from "./socket"; @@ -67,50 +67,53 @@ const remapSocketError = (context?: string) => } }); -const API = { - applicationsByDevice: makeLRUCache( - async (params: { - provider: number, - current_se_firmware_final_version: Id, - device_version: Id - }): Promise> => { - const r = await network({ - method: "POST", - url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/get_apps`, - query: { livecommonversion } - }), - data: params - }); - return r.data.application_versions; - }, - p => - `${p.provider}_${p.current_se_firmware_final_version}_${p.device_version}` - ), - - listApps: makeLRUCache(async (): Promise> => { +const applicationsByDevice: (params: { + provider: number, + current_se_firmware_final_version: Id, + device_version: Id +}) => Promise> = makeLRUCache( + async params => { const r = await network({ - method: "GET", + method: "POST", url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/applications`, + pathname: `${getEnv("MANAGER_API_BASE")}/get_apps`, query: { livecommonversion } - }) + }), + data: params }); - return r.data; - }, () => ""), + return r.data.application_versions; + }, + p => + `${p.provider}_${p.current_se_firmware_final_version}_${p.device_version}` +); - listCategories: async (): Promise> => { +const listApps: () => Promise> = makeLRUCache( + async () => { const r = await network({ method: "GET", url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/categories`, + pathname: `${getEnv("MANAGER_API_BASE")}/applications`, query: { livecommonversion } }) }); return r.data; }, + () => "" +); - getMcus: makeLRUCache(async () => { +const listCategories = async (): Promise> => { + const r = await network({ + method: "GET", + url: URL.format({ + pathname: `${getEnv("MANAGER_API_BASE")}/categories`, + query: { livecommonversion } + }) + }); + return r.data; +}; + +const getMcus: () => Promise<*> = makeLRUCache( + async () => { const { data } = await network({ method: "GET", url: URL.format({ @@ -119,184 +122,201 @@ const API = { }) }); return data; - }, () => ""), + }, + () => "" +); - getLatestFirmware: makeLRUCache( - async ({ - current_se_firmware_final_version, - device_version, - provider +const getLatestFirmware: ({ + current_se_firmware_final_version: Id, + device_version: Id, + provider: number +}) => Promise = makeLRUCache( + async ({ current_se_firmware_final_version, device_version, provider }) => { + const { + data }: { - current_se_firmware_final_version: Id, - device_version: Id, - provider: number - }): Promise => { - const { - data - }: { - data: { - result: string, - se_firmware_osu_version: OsuFirmware - } - } = await network({ - method: "POST", - url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/get_latest_firmware`, - query: { livecommonversion } - }), - data: { - current_se_firmware_final_version, - device_version, - provider - } - }); - if (data.result === "null") { - return null; + data: { + result: string, + se_firmware_osu_version: OsuFirmware } - return data.se_firmware_osu_version; - }, - a => - `${a.current_se_firmware_final_version}_${a.device_version}_${a.provider}` - ), - - getCurrentOSU: makeLRUCache( - async (input: { - version: string, - deviceId: string | number, - provider: number - }): Promise => { - const { data } = await network({ - method: "POST", - url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/get_osu_version`, - query: { livecommonversion } - }), - data: { - device_version: input.deviceId, - version_name: `${input.version}-osu`, - provider: input.provider - } - }); - return data; - }, - a => `${a.version}_${a.deviceId}_${a.provider}` - ), - - getNextBLVersion: async ( - mcuversion: string | number - ): Promise => { - const { data }: { data: McuVersion | "default" } = await network({ - method: "GET", + } = await network({ + method: "POST", url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/mcu_versions/${mcuversion}`, + pathname: `${getEnv("MANAGER_API_BASE")}/get_latest_firmware`, query: { livecommonversion } - }) + }), + data: { + current_se_firmware_final_version, + device_version, + provider + } }); - - if (data === "default" || !data.name) { - throw new LatestMCUInstalledError( - "there is no next mcu version to install" - ); + if (data.result === "null") { + return null; } - return data; + return data.se_firmware_osu_version; }, + a => + `${a.current_se_firmware_final_version}_${a.device_version}_${a.provider}` +); - getCurrentFirmware: makeLRUCache( - async (input: { - fullVersion: string, - deviceId: string | number, - provider: number - }): Promise => { - const { data }: { data: FinalFirmware } = await network({ - method: "POST", - url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/get_firmware_version`, - query: { livecommonversion } - }), - data: { - device_version: input.deviceId, - version_name: input.fullVersion, - provider: input.provider - } - }); - return data; - }, - a => `${a.fullVersion}_${a.deviceId}_${a.provider}` - ), +const getCurrentOSU: (input: { + version: string, + deviceId: string | number, + provider: number +}) => Promise = makeLRUCache( + async input => { + const { data } = await network({ + method: "POST", + url: URL.format({ + pathname: `${getEnv("MANAGER_API_BASE")}/get_osu_version`, + query: { livecommonversion } + }), + data: { + device_version: input.deviceId, + version_name: `${input.version}-osu`, + provider: input.provider + } + }); + return data; + }, + a => `${a.version}_${a.deviceId}_${a.provider}` +); - getFinalFirmwareById: makeLRUCache( - async (id: number): Promise => { - const { data }: { data: FinalFirmware } = await network({ - method: "GET", - url: URL.format({ - pathname: `${getEnv( - "MANAGER_API_BASE" - )}/firmware_final_versions/${id}`, - query: { livecommonversion } - }) - }); - return data; - }, - id => String(id) - ), +const getNextBLVersion = async ( + mcuversion: string | number +): Promise => { + const { data }: { data: McuVersion | "default" } = await network({ + method: "GET", + url: URL.format({ + pathname: `${getEnv("MANAGER_API_BASE")}/mcu_versions/${mcuversion}`, + query: { livecommonversion } + }) + }); - getDeviceVersion: makeLRUCache( - async ( - targetId: string | number, - provider: number - ): Promise => { - const { data }: { data: DeviceVersion } = await network({ - method: "POST", - url: URL.format({ - pathname: `${getEnv("MANAGER_API_BASE")}/get_device_version`, - query: { livecommonversion } - }), - data: { - provider, - target_id: targetId - } - }); - return data; - }, - (targetId, provider) => `${targetId}_${provider}` - ), + if (data === "default" || !data.name) { + throw new LatestMCUInstalledError( + "there is no next mcu version to install" + ); + } + return data; +}; - install: (transport: Transport<*>, context: string, params: *) => - createDeviceSocket(transport, { +const getCurrentFirmware: (input: { + fullVersion: string, + deviceId: string | number, + provider: number +}) => Promise = makeLRUCache( + async input => { + const { data }: { data: FinalFirmware } = await network({ + method: "POST", url: URL.format({ - pathname: `${getEnv("BASE_SOCKET_URL")}/install`, - query: { ...params, livecommonversion } + pathname: `${getEnv("MANAGER_API_BASE")}/get_firmware_version`, + query: { livecommonversion } }), - ignoreWebsocketErrorDuringBulk: true - }).pipe(remapSocketError(context)), + data: { + device_version: input.deviceId, + version_name: input.fullVersion, + provider: input.provider + } + }); + return data; + }, + a => `${a.fullVersion}_${a.deviceId}_${a.provider}` +); - genuineCheck: ( - transport: Transport<*>, - { targetId, perso }: { targetId: *, perso: * } - ) => - createDeviceSocket(transport, { +const getFinalFirmwareById: ( + id: number +) => Promise = makeLRUCache( + async id => { + const { data }: { data: FinalFirmware } = await network({ + method: "GET", url: URL.format({ - pathname: `${getEnv("BASE_SOCKET_URL")}/genuine`, - query: { targetId, perso, livecommonversion } + pathname: `${getEnv("MANAGER_API_BASE")}/firmware_final_versions/${id}`, + query: { livecommonversion } }) - }).pipe( - last(), - filter(o => o.type === "result"), - map(o => o.payload || "") - ), + }); + return data; + }, + id => String(id) +); - installMcu: ( - transport: Transport<*>, - context: string, - { targetId, version }: { targetId: *, version: * } - ) => - createDeviceSocket(transport, { +const getDeviceVersion: ( + targetId: string | number, + provider: number +) => Promise = makeLRUCache( + async (targetId, provider) => { + const { data }: { data: DeviceVersion } = await network({ + method: "POST", url: URL.format({ - pathname: `${getEnv("BASE_SOCKET_URL")}/mcu`, - query: { targetId, version, livecommonversion } + pathname: `${getEnv("MANAGER_API_BASE")}/get_device_version`, + query: { livecommonversion } }), - ignoreWebsocketErrorDuringBulk: true - }).pipe(remapSocketError(context)) + data: { + provider, + target_id: targetId + } + }); + return data; + }, + (targetId, provider) => `${targetId}_${provider}` +); + +const install = ( + transport: Transport<*>, + context: string, + params: * +): Observable<*> => + createDeviceSocket(transport, { + url: URL.format({ + pathname: `${getEnv("BASE_SOCKET_URL")}/install`, + query: { ...params, livecommonversion } + }), + ignoreWebsocketErrorDuringBulk: true + }).pipe(remapSocketError(context)); + +const genuineCheck = ( + transport: Transport<*>, + { targetId, perso }: { targetId: *, perso: * } +): Observable<*> => + createDeviceSocket(transport, { + url: URL.format({ + pathname: `${getEnv("BASE_SOCKET_URL")}/genuine`, + query: { targetId, perso, livecommonversion } + }) + }).pipe( + last(), + filter(o => o.type === "result"), + map(o => o.payload || "") + ); + +const installMcu = ( + transport: Transport<*>, + context: string, + { targetId, version }: { targetId: *, version: * } +): Observable<*> => + createDeviceSocket(transport, { + url: URL.format({ + pathname: `${getEnv("BASE_SOCKET_URL")}/mcu`, + query: { targetId, version, livecommonversion } + }), + ignoreWebsocketErrorDuringBulk: true + }).pipe(remapSocketError(context)); + +const API = { + applicationsByDevice, + listApps, + listCategories, + getMcus, + getLatestFirmware, + getCurrentOSU, + getNextBLVersion, + getCurrentFirmware, + getFinalFirmwareById, + getDeviceVersion, + install, + genuineCheck, + installMcu }; export default API; diff --git a/src/bridge/makeMockBridge.js b/src/bridge/makeMockBridge.js index e1aa65dc4a..f3b5039d1a 100644 --- a/src/bridge/makeMockBridge.js +++ b/src/bridge/makeMockBridge.js @@ -211,10 +211,8 @@ export function makeMockCurrencyBridge(opts?: Opts): CurrencyBridge { job(); - return { - unsubscribe() { - unsubscribed = true; - } + return () => { + unsubscribed = true; }; }); diff --git a/src/countervalues/mock.js b/src/countervalues/mock.js index f4bc658013..146b7f1193 100644 --- a/src/countervalues/mock.js +++ b/src/countervalues/mock.js @@ -14,7 +14,7 @@ type Pair = { export const genDateRange = ({ dateFrom, dateTo, rate }: Pair): Histodays => { const histodays = {}; - for (let d = dateFrom; d < dateTo; d += 24 * 60 * 60 * 1000) { + for (let d = dateFrom.getTime(); d < dateTo; d += 24 * 60 * 60 * 1000) { const day = new Date(d); histodays[formatCounterValueDay(day)] = rate(new Date(d)); } diff --git a/src/currencies/localeUtility.js b/src/currencies/localeUtility.js index 9866b3ab89..262bf114e5 100644 --- a/src/currencies/localeUtility.js +++ b/src/currencies/localeUtility.js @@ -2,8 +2,8 @@ import memoize from "lodash/memoize"; -export const getFragPositions = memoize( - (locale: string): Array<*> => { +export const getFragPositions: (locale: string) => Array<*> = memoize( + locale => { const res = (-1).toLocaleString(locale, { currency: "USD", style: "currency" @@ -38,24 +38,24 @@ export const getFragPositions = memoize( ); // returns decimal and thousands separator -export const getSeparators = memoize( - ( - locale: string - ): { - decimal: ?string, - thousands: ?string // FIXME rename to group - } => { - const res = (10000.2).toLocaleString(locale); - let decimal, thousands; - for (let i = 0; i < res.length; i++) { - const c = res[i]; - if (/[0-9]/.test(c)) continue; - if (!thousands) { - thousands = c; - } else { - decimal = c; - } +// FIXME: rename thousands to group +export type GetSeparators = ( + locale: string +) => { + decimal: ?string, + thousands: ?string +}; +export const getSeparators: GetSeparators = memoize(locale => { + const res = (10000.2).toLocaleString(locale); + let decimal, thousands; + for (let i = 0; i < res.length; i++) { + const c = res[i]; + if (/[0-9]/.test(c)) continue; + if (!thousands) { + thousands = c; + } else { + decimal = c; } - return { decimal, thousands }; } -); + return { decimal, thousands }; +}); diff --git a/src/hw/deviceAccess.js b/src/hw/deviceAccess.js index 252140187a..fcfe894560 100644 --- a/src/hw/deviceAccess.js +++ b/src/hw/deviceAccess.js @@ -1,6 +1,6 @@ // @flow -import { Observable, from, throwError, defer, timer } from "rxjs"; +import { Observable, throwError, timer } from "rxjs"; import { retryWhen, mergeMap, catchError } from "rxjs/operators"; import type Transport from "@ledgerhq/hw-transport"; import { @@ -156,4 +156,5 @@ export const retryWhileErrors = (acceptError: Error => boolean) => ( export const withDevicePolling = (deviceId: string) => ( job: (Transport<*>) => Observable, acceptError: Error => boolean = genericCanRetryOnError -) => withDevice(deviceId)(job).pipe(retryWhen(retryWhileErrors(acceptError))); +): Observable => + withDevice(deviceId)(job).pipe(retryWhen(retryWhileErrors(acceptError))); diff --git a/src/partners/react.js b/src/partners/react.js index 3a2db518ac..89bca8c18f 100644 --- a/src/partners/react.js +++ b/src/partners/react.js @@ -1,8 +1,12 @@ //@flow import shuffle from "lodash/shuffle"; import icons from "./icons/react"; -import partners from "./index"; +import partners from "."; -export default shuffle( - partners.map(({ id, url }) => ({ Logo: icons[id], id, url })) -); +const out: Array<{ + Logo: React$ComponentType<*>, + id: string, + url: string +}> = shuffle(partners.map(({ id, url }) => ({ Logo: icons[id], id, url }))); + +export default out; diff --git a/src/partners/reactNative.js b/src/partners/reactNative.js index 16dfa994e9..a0dfd92832 100644 --- a/src/partners/reactNative.js +++ b/src/partners/reactNative.js @@ -3,6 +3,10 @@ import shuffle from "lodash/shuffle"; import icons from "./icons/reactNative"; import partners from "./index"; -export default shuffle( - partners.map(({ id, url }) => ({ Logo: icons[id], id, url })) -); +const out: Array<{ + Logo: React$ComponentType<*>, + id: string, + url: string +}> = shuffle(partners.map(({ id, url }) => ({ Logo: icons[id], id, url }))); + +export default out; diff --git a/yarn.lock b/yarn.lock index f682b5585d..e5afcd6f25 100644 --- a/yarn.lock +++ b/yarn.lock @@ -817,6 +817,21 @@ "@ledgerhq/errors" "^4.41.1" events "^3.0.0" +"@octokit/rest@^15.2.6": + version "15.18.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.18.1.tgz#ec7fb0f8775ef64dc095fae6635411d3fbff9b62" + integrity sha512-g2tecjp2TEtYV8bKAFvfQtu+W29HM7ektmWmw8zrMy9/XCKDEYRErR2YvvhN9+IxkLC4O3lDqYP4b6WgsL6Utw== + dependencies: + before-after-hook "^1.1.0" + btoa-lite "^1.0.0" + debug "^3.1.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.0" + lodash "^4.17.4" + node-fetch "^2.1.1" + universal-user-agent "^2.0.0" + url-template "^2.0.8" + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -907,7 +922,7 @@ acorn@^6.0.1, acorn@^6.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== -agent-base@^4.1.0: +agent-base@4, agent-base@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== @@ -2108,6 +2123,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +before-after-hook@^1.1.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.3.2.tgz#7bfbf844ad670aa7a96b5a4e4e15bd74b08ed66b" + integrity sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w== + big-integer@^1.6.17: version "1.6.30" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.30.tgz#7796f04acdd6ba56345f19049c8fffd427f09d16" @@ -2279,6 +2299,11 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + buffer-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" @@ -3605,6 +3630,19 @@ exec-sh@^0.2.0: dependencies: merge "^1.1.3" +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== + dependencies: + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -3868,10 +3906,10 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@^0.73.0: - version "0.73.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.73.0.tgz#da1b90a02b0ef9c439f068c2fc14968db83be425" - integrity sha512-fNk2zBPSQ7X3PbQC+SqG68zps7zs2V+IDoW/E8jm2nM5MfYtN0jJKsoBtN8FuQJ1yoIHxWTFNG04aEKgl7pM2A== +flow-bin@^0.94.0: + version "0.94.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.94.0.tgz#b5d58fe7559705b73a18229f97edfc3ab6ffffcb" + integrity sha512-DYF7r9CJ/AksfmmB4+q+TyLMoeQPRnqtF1Pk7KY3zgfkB/nVuA3nXyzqgsIPIvnMSiFEXQcFK4z+iPxSLckZhQ== flow-copy-source@^1.2.1: version "1.3.0" @@ -3884,15 +3922,15 @@ flow-copy-source@^1.2.1: kefir "^3.7.3" yargs "^11.0.0" -flow-typed@^2.2.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.4.0.tgz#3d2f48cf85df29df3bca6745b623726496ff4788" - integrity sha1-PS9Iz4XfKd87ymdFtiNyZJb/R4g= +flow-typed@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.5.1.tgz#0ff565cc94d2af8c557744ba364b6f14726a6b9f" + integrity sha1-D/VlzJTSr4xVd0S6NktvFHJqa58= dependencies: + "@octokit/rest" "^15.2.6" babel-polyfill "^6.26.0" colors "^1.1.2" fs-extra "^5.0.0" - github "0.2.4" glob "^7.1.2" got "^7.1.0" md5 "^2.1.0" @@ -4102,13 +4140,6 @@ github-slugger@1.2.0, github-slugger@^1.0.0, github-slugger@^1.1.1: dependencies: emoji-regex ">=6.0.0 <=6.1.1" -github@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/github/-/github-0.2.4.tgz#24fa7f0e13fa11b946af91134c51982a91ce538b" - integrity sha1-JPp/DhP6EblGr5ETTFGYKpHOU4s= - dependencies: - mime "^1.2.11" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -4537,6 +4568,14 @@ http-parser-js@>=0.4.0: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" integrity sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc= +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4546,7 +4585,7 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@2.2.1: +https-proxy-agent@2.2.1, https-proxy-agent@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== @@ -5900,6 +5939,11 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +macos-release@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.0.0.tgz#7dddf4caf79001a851eb4fba7fb6034f251276ab" + integrity sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A== + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -6100,11 +6144,6 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "~1.37.0" -mime@^1.2.11: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mime@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" @@ -6297,6 +6336,11 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-fetch@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" + integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -6578,6 +6622,14 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" +os-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.0.0.tgz#e1434dbfddb8e74b44c98b56797d951b7648a5d9" + integrity sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g== + dependencies: + macos-release "^2.0.0" + windows-release "^3.1.0" + os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8753,6 +8805,13 @@ unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: dependencies: unist-util-is "^2.1.1" +universal-user-agent@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.3.tgz#9f6f09f9cc33de867bb720d84c08069b14937c6c" + integrity sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g== + dependencies: + os-name "^3.0.0" + universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" @@ -8817,6 +8876,11 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url-template@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= + url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" @@ -9103,6 +9167,13 @@ window-size@^0.2.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= +windows-release@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.1.0.tgz#8d4a7e266cbf5a233f6c717dac19ce00af36e12e" + integrity sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA== + dependencies: + execa "^0.10.0" + wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"