fix: don't use update-notifier (#3270)

close #2752
This commit is contained in:
Zoltan Kochan
2021-03-23 10:35:36 +02:00
committed by GitHub
parent eb19323b2a
commit 90487a3a8e
20 changed files with 331 additions and 360 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/core-loggers": minor
---
New logger added: `updateCheckLogger`.

View File

@@ -0,0 +1,9 @@
---
"pnpm": minor
---
Check the registry for CLI updates once a day.
The time of the last update is saved in a new state file at `~/.pnpm-state.json`.
`update-notifier` is removed from the dependencies.

View File

@@ -0,0 +1,5 @@
---
"@pnpm/default-reporter": minor
---
Print a notification about newer version of the CLI.

View File

@@ -2,7 +2,7 @@ const path = require('path')
module.exports = {
preset: 'ts-jest',
testMatch: ["**/test/**/*.[jt]s?(x)"],
testMatch: ["**/test/**/*.[jt]s?(x)", "**/src/**/*.test.ts"],
testEnvironment: 'node',
collectCoverage: true,
coveragePathIgnorePatterns: ['node_modules'],

View File

@@ -5,15 +5,16 @@ export * from './hookLogger'
export * from './installCheckLogger'
export * from './lifecycleLogger'
export * from './linkLogger'
export * from './packageManifestLogger'
export * from './packageImportMethodLogger'
export * from './packageManifestLogger'
export * from './progressLogger'
export * from './registryLogger'
export * from './requestRetryLogger'
export * from './removalLogger'
export * from './requestRetryLogger'
export * from './rootLogger'
export * from './scopeLogger'
export * from './skippedOptionalDependencyLogger'
export * from './stageLogger'
export * from './statsLogger'
export * from './summaryLogger'
export * from './updateCheckLogger'

View File

@@ -17,6 +17,7 @@ import {
StageLog,
StatsLog,
SummaryLog,
UpdateCheckLog,
} from './all'
export * from './all'
@@ -40,3 +41,4 @@ export type Log =
| StageLog
| StatsLog
| SummaryLog
| UpdateCheckLog

View File

@@ -0,0 +1,12 @@
import baseLogger, {
LogBase,
} from '@pnpm/logger'
export const updateCheckLogger = baseLogger('update-check')
export interface UpdateCheckMessage {
currentVersion: string
latestVersion: string
}
export type UpdateCheckLog = {name: 'pnpm:update-check'} & LogBase & UpdateCheckMessage

View File

@@ -35,6 +35,7 @@
"@pnpm/error": "workspace:1.4.0",
"@pnpm/types": "workspace:6.4.0",
"ansi-diff": "^1.1.1",
"boxen": "^5.0.0",
"chalk": "^4.1.0",
"normalize-path": "^3.0.0",
"pretty-bytes": "^5.5.0",

View File

@@ -100,6 +100,7 @@ export function toOutput$ (
const skippedOptionalDependencyPushStream = new Rx.Subject<logs.SkippedOptionalDependencyLog>()
const scopePushStream = new Rx.Subject<logs.ScopeLog>()
const requestRetryPushStream = new Rx.Subject<logs.RequestRetryLog>()
const updateCheckPushStream = new Rx.Subject<logs.UpdateCheckLog>()
setTimeout(() => {
opts.streamParser['on']('data', (log: logs.Log) => {
switch (log.name) {
@@ -157,6 +158,9 @@ export function toOutput$ (
case 'pnpm:request-retry':
requestRetryPushStream.next(log)
break
case 'pnpm:update-check':
updateCheckPushStream.next(log)
break
case 'pnpm' as any: // eslint-disable-line
case 'pnpm:global' as any: // eslint-disable-line
case 'pnpm:store' as any: // eslint-disable-line
@@ -186,6 +190,7 @@ export function toOutput$ (
stage: Rx.from(stagePushStream),
stats: Rx.from(statsPushStream),
summary: Rx.from(summaryPushStream),
updateCheck: Rx.from(updateCheckPushStream),
}
const outputs: Array<Rx.Observable<Rx.Observable<{msg: string}>>> = reporterForClient(
log$,

View File

@@ -16,6 +16,7 @@ import reportScope from './reportScope'
import reportSkippedOptionalDependencies from './reportSkippedOptionalDependencies'
import reportStats from './reportStats'
import reportSummary from './reportSummary'
import reportUpdateCheck from './reportUpdateCheck'
export default function (
log$: {
@@ -38,6 +39,7 @@ export default function (
scope: Rx.Observable<logs.ScopeLog>
skippedOptionalDependency: Rx.Observable<logs.SkippedOptionalDependencyLog>
packageImportMethod: Rx.Observable<logs.PackageImportMethodLog>
updateCheck: Rx.Observable<logs.UpdateCheckLog>
},
opts: {
appendOnly?: boolean
@@ -89,6 +91,7 @@ export default function (
reportSkippedOptionalDependencies(log$.skippedOptionalDependency, { cwd }),
reportHooks(log$.hook, { cwd, isRecursive: opts.isRecursive }),
reportContext(log$, { cwd }),
reportUpdateCheck(log$.updateCheck),
]
if (!opts.appendOnly) {

View File

@@ -0,0 +1,29 @@
import { UpdateCheckLog } from '@pnpm/core-loggers'
import boxen from 'boxen'
import chalk from 'chalk'
import * as Rx from 'rxjs'
import { filter, map, take } from 'rxjs/operators'
import semver from 'semver'
export default (log$: Rx.Observable<UpdateCheckLog>) => {
return log$.pipe(
take(1),
filter((log) => semver.gt(log.latestVersion, log.currentVersion)),
map((log) => Rx.of({
msg: boxen(`\
Update available! ${chalk.red(log.currentVersion)}${chalk.green(log.latestVersion)}.
${chalk.magenta('Changelog:')} https://github.com/pnpm/pnpm/releases/tag/v${log.latestVersion}
Run ${chalk.magenta('pnpm add -g pnpm')} to update.
Follow ${chalk.magenta('@pnpmjs')} for updates: https://twitter.com/pnpmjs`,
{
padding: 1,
margin: 1,
align: 'center',
borderColor: 'yellow',
borderStyle: 'round',
}
),
}))
)
}

View File

@@ -0,0 +1,15 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`print update notification if the latest version is greater than the current 1`] = `
"
╭──────────────────────────────────────────────────────────────────╮
│ │
│ Update available! 10.0.0 → 11.0.0. │
│ Changelog: https://github.com/pnpm/pnpm/releases/tag/v11.0.0 │
│ Run pnpm add -g pnpm to update. │
│ │
│ Follow @pnpmjs for updates: https://twitter.com/pnpmjs │
│ │
╰──────────────────────────────────────────────────────────────────╯
"
`;

View File

@@ -1,12 +1,9 @@
import { Config } from '@pnpm/config'
import { scopeLogger } from '@pnpm/core-loggers'
import { toOutput$ } from '@pnpm/default-reporter'
import logger, {
createStreamParser,
} from '@pnpm/logger'
import { createStreamParser } from '@pnpm/logger'
import { take } from 'rxjs/operators'
const scopeLogger = logger<object>('scope')
test('does not print scope of non-recursive install in a workspace', (done) => {
const output$ = toOutput$({
context: {

View File

@@ -0,0 +1,58 @@
import { Config } from '@pnpm/config'
import { updateCheckLogger } from '@pnpm/core-loggers'
import { toOutput$ } from '@pnpm/default-reporter'
import { createStreamParser } from '@pnpm/logger'
import { take } from 'rxjs/operators'
import stripAnsi from 'strip-ansi'
test('does not print update if latest is less than current', (done) => {
const output$ = toOutput$({
context: {
argv: ['install'],
},
streamParser: createStreamParser(),
})
updateCheckLogger.debug({
currentVersion: '10.0.0',
latestVersion: '9.0.0',
})
const subscription = output$.subscribe({
complete: () => done(),
error: done,
next: () => {
done('should not log anything')
},
})
setTimeout(() => {
done()
subscription.unsubscribe()
}, 10)
})
test('print update notification if the latest version is greater than the current', (done) => {
const output$ = toOutput$({
context: {
argv: ['install'],
config: { recursive: true } as Config,
},
streamParser: createStreamParser(),
})
updateCheckLogger.debug({
currentVersion: '10.0.0',
latestVersion: '11.0.0',
})
expect.assertions(1)
output$.pipe(take(1)).subscribe({
complete: () => done(),
error: done,
next: output => {
expect(stripAnsi(output)).toMatchSnapshot()
},
})
})

View File

@@ -16,14 +16,13 @@
"bin"
],
"optionalDependencies": {
"graceful-fs": "4.2.4",
"node-gyp": "^7.1.2",
"update-notifier": "^5.1.0"
"node-gyp": "^7.1.2"
},
"devDependencies": {
"@pnpm/assert-project": "workspace:*",
"@pnpm/cli-meta": "workspace:1.0.2",
"@pnpm/cli-utils": "workspace:0.5.3",
"@pnpm/client": "workspace:2.0.24",
"@pnpm/command": "workspace:1.0.0",
"@pnpm/common-cli-options-help": "workspace:0.3.1",
"@pnpm/config": "workspace:11.14.1",
@@ -38,6 +37,7 @@
"@pnpm/logger": "^3.2.3",
"@pnpm/modules-yaml": "workspace:8.0.6",
"@pnpm/parse-cli-args": "workspace:3.2.2",
"@pnpm/pick-registry-for-package": "workspace:1.1.0",
"@pnpm/plugin-commands-audit": "workspace:3.0.5",
"@pnpm/plugin-commands-import": "workspace:1.0.109",
"@pnpm/plugin-commands-installation": "workspace:3.5.27",
@@ -52,6 +52,7 @@
"@pnpm/read-package-json": "workspace:4.0.0",
"@pnpm/read-project-manifest": "workspace:1.1.7",
"@pnpm/run-npm": "workspace:2.0.3",
"@pnpm/store-path": "5.0.0-0",
"@pnpm/tabtab": "^0.1.2",
"@pnpm/types": "workspace:6.4.0",
"@pnpm/write-project-manifest": "workspace:1.1.7",

View File

@@ -0,0 +1,95 @@
import getConfig from '@pnpm/config'
import { updateCheckLogger } from '@pnpm/core-loggers'
import { prepareEmpty } from '@pnpm/prepare'
import loadJsonFile from 'load-json-file'
import writeJsonFile from 'write-json-file'
import checkForUpdates from './checkForUpdates'
jest.mock('os', () => {
const os = jest.requireActual('os')
return {
...os,
homedir: () => process.cwd(),
}
})
jest.mock('@pnpm/core-loggers', () => ({
updateCheckLogger: { debug: jest.fn() },
}))
beforeEach(() => {
updateCheckLogger.debug['mockReset']()
})
test('check for updates when no pnpm state file is present', async () => {
prepareEmpty()
const { config } = await getConfig({
cliOptions: {},
packageManager: {
name: 'pnpm',
version: '1.0.0',
},
})
await checkForUpdates(config)
expect(updateCheckLogger.debug).toBeCalledWith({
currentVersion: expect.any(String),
latestVersion: expect.any(String),
})
const state = await loadJsonFile('.pnpm-state.json')
expect(state).toEqual({
lastUpdateCheck: expect.any(String),
})
})
test('do not check for updates when last update check happened recently', async () => {
prepareEmpty()
const lastUpdateCheck = new Date().toUTCString()
await writeJsonFile('.pnpm-state.json', { lastUpdateCheck })
const { config } = await getConfig({
cliOptions: {},
packageManager: {
name: 'pnpm',
version: '1.0.0',
},
})
await checkForUpdates(config)
expect(updateCheckLogger.debug).not.toBeCalled()
const state = await loadJsonFile('.pnpm-state.json')
expect(state).toStrictEqual({ lastUpdateCheck })
})
test('check for updates when last update check happened two days ago', async () => {
prepareEmpty()
const lastUpdateCheckDate = new Date()
lastUpdateCheckDate.setDate(lastUpdateCheckDate.getDate() - 2)
const initialLastUpdateCheck = lastUpdateCheckDate.toUTCString()
await writeJsonFile('.pnpm-state.json', {
lastUpdateCheck: initialLastUpdateCheck,
})
const { config } = await getConfig({
cliOptions: {},
packageManager: {
name: 'pnpm',
version: '1.0.0',
},
})
await checkForUpdates(config)
expect(updateCheckLogger.debug).toBeCalledWith({
currentVersion: expect.any(String),
latestVersion: expect.any(String),
})
const state = await loadJsonFile<{ lastUpdateCheck: string }>('.pnpm-state.json')
expect(state.lastUpdateCheck).toBeDefined()
expect(state.lastUpdateCheck).not.toEqual(initialLastUpdateCheck)
})

View File

@@ -1,25 +1,56 @@
import { homedir } from 'os'
import path from 'path'
import packageManager from '@pnpm/cli-meta'
import chalk from 'chalk'
import { Config } from '@pnpm/config'
import { createResolver } from '@pnpm/client'
import pickRegistryForPackage from '@pnpm/pick-registry-for-package'
import storePath from '@pnpm/store-path'
import { updateCheckLogger } from '@pnpm/core-loggers'
import loadJsonFile from 'load-json-file'
import writeJsonFile from 'write-json-file'
export default async function () {
let updateNotifier
try {
updateNotifier = (await import('update-notifier')).default
} catch (err) {
return
}
const notifier = updateNotifier({ pkg: packageManager })
const update = notifier.update
if (update == null) {
return
}
const message = `Update available! ${chalk.red(update.current)}${chalk.green(update.latest)}
${chalk.magenta('Changelog:')} https://github.com/pnpm/pnpm/releases/tag/v${update.latest}
Run ${chalk.magenta('pnpm i -g pnpm')} to update!
Follow ${chalk.magenta('@pnpmjs')} for updates: https://twitter.com/pnpmjs`
notifier.notify({ message })
interface State {
lastUpdateCheck?: string
}
const UPDATE_CHECK_FREQUENCY = 24 * 60 * 60 * 1000 // 1 day
export default async function (config: Config) {
const stateFile = path.join(homedir(), '.pnpm-state.json')
let state: State | undefined
try {
state = await loadJsonFile(stateFile)
} catch (err) {}
if (
state?.lastUpdateCheck &&
(Date.now() - new Date(state.lastUpdateCheck).valueOf()) < UPDATE_CHECK_FREQUENCY
) return
try {
const storeDir = await storePath(config.dir, config.storeDir)
const resolve = createResolver({
...config,
authConfig: config.rawConfig,
storeDir,
})
const resolution = await resolve({ alias: packageManager.name, pref: 'latest' }, {
lockfileDir: config.lockfileDir ?? config.dir,
preferredVersions: {},
projectDir: config.dir,
registry: pickRegistryForPackage(config.registries, packageManager.name, 'latest'),
})
if (resolution?.manifest?.version) {
updateCheckLogger.debug({
currentVersion: packageManager.version,
latestVersion: resolution?.manifest.version,
})
}
await writeJsonFile(stateFile, {
...state,
lastUpdateCheck: new Date().toUTCString(),
})
} catch (err) {
// ignore any issues
}
}

View File

@@ -115,15 +115,6 @@ export default async function run (inputArgv: string[]) {
write = (text) => process.stdout.write(stripAnsi(text))
}
const selfUpdate = config.global && (cmd === 'add' || cmd === 'update') && cliParams.includes(packageManager.name)
// Don't check for updates
// 1. on CI environments
// 2. when in the middle of an actual update
if (!isCI && !selfUpdate) {
await checkForUpdates()
}
const reporterType: ReporterType = (() => {
if (config.loglevel === 'silent') return 'silent'
if (config.reporter) return config.reporter as ReporterType
@@ -137,6 +128,8 @@ export default async function run (inputArgv: string[]) {
})
global['reporterInitialized'] = reporterType
const selfUpdate = config.global && (cmd === 'add' || cmd === 'update') && cliParams.includes(packageManager.name)
if (selfUpdate) {
await pnpmCmds.server(config as any, ['stop']) // eslint-disable-line @typescript-eslint/no-explicit-any
try {
@@ -194,6 +187,13 @@ export default async function run (inputArgv: string[]) {
// NOTE: we defer the next stage, otherwise reporter might not catch all the logs
const [output, exitCode] = await new Promise((resolve, reject) => {
setTimeout(async () => {
// Don't check for updates
// 1. on CI environments
// 2. when in the middle of an actual update
if (!isCI && !selfUpdate) {
await checkForUpdates(config)
}
if (config.force === true) {
logger.warn({
message: 'using --force I sure hope you know what you are doing',

View File

@@ -24,6 +24,9 @@
{
"path": "../cli-utils"
},
{
"path": "../client"
},
{
"path": "../command"
},
@@ -60,6 +63,9 @@
{
"path": "../parse-cli-args"
},
{
"path": "../pick-registry-for-package"
},
{
"path": "../pkgs-graph"
},

332
pnpm-lock.yaml generated
View File

@@ -314,6 +314,7 @@ importers:
'@types/ramda': ^0.27.35
'@types/semver': ^7.3.4
ansi-diff: ^1.1.1
boxen: ^5.0.0
chalk: ^4.1.0
ghooks: 2.0.4
load-json-file: ^6.2.0
@@ -334,6 +335,7 @@ importers:
'@pnpm/error': link:../error
'@pnpm/types': link:../types
ansi-diff: 1.1.1
boxen: 5.0.0
chalk: 4.1.0
normalize-path: 3.0.0
pretty-bytes: 5.6.0
@@ -2272,6 +2274,7 @@ importers:
'@pnpm/assert-project': workspace:*
'@pnpm/cli-meta': workspace:1.0.2
'@pnpm/cli-utils': workspace:0.5.3
'@pnpm/client': workspace:2.0.24
'@pnpm/command': workspace:1.0.0
'@pnpm/common-cli-options-help': workspace:0.3.1
'@pnpm/config': workspace:11.14.1
@@ -2286,6 +2289,7 @@ importers:
'@pnpm/logger': ^3.2.3
'@pnpm/modules-yaml': workspace:8.0.6
'@pnpm/parse-cli-args': workspace:3.2.2
'@pnpm/pick-registry-for-package': workspace:1.1.0
'@pnpm/plugin-commands-audit': workspace:3.0.5
'@pnpm/plugin-commands-import': workspace:1.0.109
'@pnpm/plugin-commands-installation': workspace:3.5.27
@@ -2300,6 +2304,7 @@ importers:
'@pnpm/read-package-json': workspace:4.0.0
'@pnpm/read-project-manifest': workspace:1.1.7
'@pnpm/run-npm': workspace:2.0.3
'@pnpm/store-path': 5.0.0-0
'@pnpm/tabtab': ^0.1.2
'@pnpm/types': workspace:6.4.0
'@pnpm/write-project-manifest': workspace:1.1.7
@@ -2326,7 +2331,6 @@ importers:
esbuild: ^0.9.0
execa: ^5.0.0
exists-link: 2.0.0
graceful-fs: 4.2.4
is-ci: ^3.0.0
is-windows: ^1.0.2
load-json-file: ^6.2.0
@@ -2351,19 +2355,17 @@ importers:
symlink-dir: ^4.2.0
tempy: ^1.0.0
tree-kill: ^1.2.2
update-notifier: ^5.1.0
which: ^2.0.2
write-json-file: ^4.3.0
write-pkg: 4.0.0
write-yaml-file: ^4.2.0
optionalDependencies:
graceful-fs: 4.2.4
node-gyp: 7.1.2
update-notifier: 5.1.0
devDependencies:
'@pnpm/assert-project': link:../../privatePackages/assert-project
'@pnpm/cli-meta': link:../cli-meta
'@pnpm/cli-utils': link:../cli-utils
'@pnpm/client': link:../client
'@pnpm/command': link:../command
'@pnpm/common-cli-options-help': link:../common-cli-options-help
'@pnpm/config': link:../config
@@ -2378,6 +2380,7 @@ importers:
'@pnpm/logger': 3.2.3
'@pnpm/modules-yaml': link:../modules-yaml
'@pnpm/parse-cli-args': link:../parse-cli-args
'@pnpm/pick-registry-for-package': link:../pick-registry-for-package
'@pnpm/plugin-commands-audit': link:../plugin-commands-audit
'@pnpm/plugin-commands-import': link:../plugin-commands-import
'@pnpm/plugin-commands-installation': link:../plugin-commands-installation
@@ -2392,6 +2395,7 @@ importers:
'@pnpm/read-package-json': link:../read-package-json
'@pnpm/read-project-manifest': link:../read-project-manifest
'@pnpm/run-npm': link:../run-npm
'@pnpm/store-path': 5.0.0-0
'@pnpm/tabtab': 0.1.2
'@pnpm/types': link:../types
'@pnpm/write-project-manifest': link:../write-project-manifest
@@ -4384,12 +4388,6 @@ packages:
write-yaml-file: 4.2.0
dev: true
/@sindresorhus/is/0.14.0:
resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==}
engines: {node: '>=6'}
dev: false
optional: true
/@sinonjs/commons/1.8.2:
resolution: {integrity: sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==}
dependencies:
@@ -4420,14 +4418,6 @@ packages:
resolution: {integrity: sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==}
dev: true
/@szmarczak/http-timer/1.1.2:
resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==}
engines: {node: '>=6'}
dependencies:
defer-to-connect: 1.1.3
dev: false
optional: true
/@tootallnate/once/1.1.2:
resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
engines: {node: '>= 6'}
@@ -5899,7 +5889,6 @@ packages:
widest-line: 3.1.0
wrap-ansi: 7.0.0
dev: false
optional: true
/brace-expansion/1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
@@ -6062,20 +6051,6 @@ packages:
unset-value: 1.0.0
dev: true
/cacheable-request/6.1.0:
resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==}
engines: {node: '>=8'}
dependencies:
clone-response: 1.0.2
get-stream: 5.2.0
http-cache-semantics: 4.1.0
keyv: 3.1.0
lowercase-keys: 2.0.0
normalize-url: 4.5.0
responselike: 1.0.2
dev: false
optional: true
/call-bind/1.0.2:
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
dependencies:
@@ -6200,6 +6175,7 @@ packages:
/ci-info/2.0.0:
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
dev: true
/ci-info/3.1.1:
resolution: {integrity: sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==}
@@ -6294,13 +6270,6 @@ packages:
shallow-clone: 3.0.1
dev: true
/clone-response/1.0.2:
resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=}
dependencies:
mimic-response: 1.0.1
dev: false
optional: true
/clone-stats/1.0.0:
resolution: {integrity: sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=}
dev: true
@@ -6465,19 +6434,6 @@ packages:
ini: 1.3.8
proto-list: 1.2.4
/configstore/5.0.1:
resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
engines: {node: '>=8'}
dependencies:
dot-prop: 5.3.0
graceful-fs: 4.2.4
make-dir: 3.1.0
unique-string: 2.0.0
write-file-atomic: 3.0.3
xdg-basedir: 4.0.0
dev: false
optional: true
/console-control-strings/1.1.0:
resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=}
@@ -6817,24 +6773,10 @@ packages:
pumpify: 1.5.1
dev: false
/decompress-response/3.3.0:
resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=}
engines: {node: '>=4'}
dependencies:
mimic-response: 1.0.1
dev: false
optional: true
/dedent/0.7.0:
resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=}
dev: true
/deep-extend/0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
dev: false
optional: true
/deep-is/0.1.3:
resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=}
dev: true
@@ -6868,11 +6810,6 @@ packages:
clone: 1.0.4
dev: true
/defer-to-connect/1.1.3:
resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==}
dev: false
optional: true
/deferred-leveldown/5.3.0:
resolution: {integrity: sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==}
engines: {node: '>=6'}
@@ -7056,6 +6993,7 @@ packages:
engines: {node: '>=8'}
dependencies:
is-obj: 2.0.0
dev: true
/dotenv/8.2.0:
resolution: {integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==}
@@ -7071,11 +7009,6 @@ packages:
dev: true
optional: true
/duplexer3/0.1.4:
resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=}
dev: false
optional: true
/duplexify/3.7.1:
resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
dependencies:
@@ -7230,12 +7163,6 @@ packages:
engines: {node: '>=6'}
dev: true
/escape-goat/2.1.1:
resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==}
engines: {node: '>=8'}
dev: false
optional: true
/escape-html/1.0.3:
resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
dev: true
@@ -8117,19 +8044,12 @@ packages:
engines: {node: '>=4'}
dev: true
/get-stream/4.1.0:
resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
engines: {node: '>=6'}
dependencies:
pump: 3.0.0
dev: false
optional: true
/get-stream/5.2.0:
resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
engines: {node: '>=8'}
dependencies:
pump: 3.0.0
dev: true
/get-stream/6.0.0:
resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==}
@@ -8240,14 +8160,6 @@ packages:
ini: 1.3.7
dev: true
/global-dirs/3.0.0:
resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==}
engines: {node: '>=10'}
dependencies:
ini: 2.0.0
dev: false
optional: true
/globals/11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
@@ -8292,24 +8204,6 @@ packages:
slash: 2.0.0
dev: true
/got/9.6.0:
resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==}
engines: {node: '>=8.6'}
dependencies:
'@sindresorhus/is': 0.14.0
'@szmarczak/http-timer': 1.1.2
cacheable-request: 6.1.0
decompress-response: 3.3.0
duplexer3: 0.1.4
get-stream: 4.1.0
lowercase-keys: 1.0.1
mimic-response: 1.0.1
p-cancelable: 1.1.0
to-readable-stream: 1.0.0
url-parse-lax: 3.0.0
dev: false
optional: true
/graceful-fs/4.2.4:
resolution: {integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==}
@@ -8446,12 +8340,6 @@ packages:
kind-of: 4.0.0
dev: true
/has-yarn/2.1.0:
resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==}
engines: {node: '>=8'}
dev: false
optional: true
/has/1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
@@ -8491,11 +8379,6 @@ packages:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
dev: true
/http-cache-semantics/4.1.0:
resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
dev: false
optional: true
/http-errors/1.8.0:
resolution: {integrity: sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==}
engines: {node: '>= 0.6'}
@@ -8623,12 +8506,6 @@ packages:
resolve-from: 5.0.0
dev: false
/import-lazy/2.1.0:
resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=}
engines: {node: '>=4'}
dev: false
optional: true
/import-local/3.0.2:
resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==}
engines: {node: '>=8'}
@@ -8775,6 +8652,7 @@ packages:
hasBin: true
dependencies:
ci-info: 2.0.0
dev: true
/is-ci/3.0.0:
resolution: {integrity: sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==}
@@ -8893,15 +8771,6 @@ packages:
resolve-link-target: 2.0.0
dev: false
/is-installed-globally/0.4.0:
resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
engines: {node: '>=10'}
dependencies:
global-dirs: 3.0.0
is-path-inside: 3.0.3
dev: false
optional: true
/is-negated-glob/1.0.0:
resolution: {integrity: sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=}
engines: {node: '>=0.10.0'}
@@ -8911,12 +8780,6 @@ packages:
resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==}
engines: {node: '>= 0.4'}
/is-npm/5.0.0:
resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==}
engines: {node: '>=10'}
dev: false
optional: true
/is-number-object/1.0.4:
resolution: {integrity: sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==}
engines: {node: '>= 0.4'}
@@ -8940,6 +8803,7 @@ packages:
/is-obj/2.0.0:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
engines: {node: '>=8'}
dev: true
/is-object/1.0.2:
resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==}
@@ -9046,11 +8910,6 @@ packages:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
/is-yarn-global/0.3.0:
resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==}
dev: false
optional: true
/isarray/0.0.1:
resolution: {integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=}
dev: true
@@ -9717,11 +9576,6 @@ packages:
concat-stream: 1.6.2
dev: true
/json-buffer/3.0.0:
resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=}
dev: false
optional: true
/json-parse-better-errors/1.0.2:
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
dev: true
@@ -9834,13 +9688,6 @@ packages:
tsscmp: 1.0.6
dev: true
/keyv/3.1.0:
resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==}
dependencies:
json-buffer: 3.0.0
dev: false
optional: true
/kind-of/3.2.2:
resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=}
engines: {node: '>=0.10.0'}
@@ -9880,14 +9727,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/latest-version/5.1.0:
resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==}
engines: {node: '>=8'}
dependencies:
package-json: 6.5.0
dev: false
optional: true
/lazy-cache/2.0.2:
resolution: {integrity: sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=}
engines: {node: '>=0.10.0'}
@@ -10225,18 +10064,6 @@ packages:
signal-exit: 3.0.3
dev: true
/lowercase-keys/1.0.1:
resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
engines: {node: '>=0.10.0'}
dev: false
optional: true
/lowercase-keys/2.0.0:
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
engines: {node: '>=8'}
dev: false
optional: true
/lru-cache/4.1.5:
resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
dependencies:
@@ -10481,12 +10308,6 @@ packages:
engines: {node: '>=8'}
dev: false
/mimic-response/1.0.1:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'}
dev: false
optional: true
/min-indent/1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
@@ -10816,12 +10637,6 @@ packages:
resolution: {integrity: sha512-0v6T4851b72ykk5zEtFoN4QX/Fqyk7pouIj9xZyAvAe9jlDhAwT4z6FlwsoQCHjeuK2EGUoAwy/F4y4B1uZq9A==}
dev: false
/normalize-url/4.5.0:
resolution: {integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==}
engines: {node: '>=8'}
dev: false
optional: true
/now-and-later/2.0.1:
resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==}
engines: {node: '>= 0.10'}
@@ -11045,12 +10860,6 @@ packages:
p-some: 5.0.0
dev: true
/p-cancelable/1.1.0:
resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
engines: {node: '>=6'}
dev: false
optional: true
/p-cancelable/2.1.0:
resolution: {integrity: sha512-HAZyB3ZodPo+BDpb4/Iu7Jv4P6cSazBz9ZM0ChhEXp70scx834aWCEjQRwgt41UzzejUAPdbqqONfRWTPYrPAQ==}
engines: {node: '>=8'}
@@ -11201,17 +11010,6 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
/package-json/6.5.0:
resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==}
engines: {node: '>=8'}
dependencies:
got: 9.6.0
registry-auth-token: 4.2.1
registry-url: 5.1.0
semver: 6.3.0
dev: false
optional: true
/pako/0.2.9:
resolution: {integrity: sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=}
dev: false
@@ -11484,12 +11282,6 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
/prepend-http/2.0.0:
resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=}
engines: {node: '>=4'}
dev: false
optional: true
/prettier/1.19.1:
resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==}
engines: {node: '>=4'}
@@ -11712,6 +11504,7 @@ packages:
dependencies:
end-of-stream: 1.4.4
once: 1.4.0
dev: true
/pumpify/1.5.1:
resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
@@ -11728,14 +11521,6 @@ packages:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'}
/pupa/2.1.1:
resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==}
engines: {node: '>=8'}
dependencies:
escape-goat: 2.1.1
dev: false
optional: true
/q/1.5.1:
resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=}
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
@@ -11784,17 +11569,6 @@ packages:
unpipe: 1.0.0
dev: true
/rc/1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
dependencies:
deep-extend: 0.6.0
ini: 1.3.8
minimist: 1.2.5
strip-json-comments: 2.0.1
dev: false
optional: true
/react-is/17.0.1:
resolution: {integrity: sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==}
dev: true
@@ -11998,22 +11772,6 @@ packages:
resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==}
engines: {node: '>=8'}
/registry-auth-token/4.2.1:
resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==}
engines: {node: '>=6.0.0'}
dependencies:
rc: 1.2.8
dev: false
optional: true
/registry-url/5.1.0:
resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==}
engines: {node: '>=8'}
dependencies:
rc: 1.2.8
dev: false
optional: true
/remove-bom-buffer/3.0.0:
resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
engines: {node: '>=0.10.0'}
@@ -12213,13 +11971,6 @@ packages:
is-core-module: 2.2.0
path-parse: 1.0.6
/responselike/1.0.2:
resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=}
dependencies:
lowercase-keys: 1.0.1
dev: false
optional: true
/restore-cursor/1.0.1:
resolution: {integrity: sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=}
engines: {node: '>=0.10.0'}
@@ -12357,14 +12108,6 @@ packages:
resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=}
dev: true
/semver-diff/3.1.1:
resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==}
engines: {node: '>=8'}
dependencies:
semver: 6.3.0
dev: false
optional: true
/semver-regex/3.1.2:
resolution: {integrity: sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==}
engines: {node: '>=8'}
@@ -12938,12 +12681,6 @@ packages:
min-indent: 1.0.1
dev: true
/strip-json-comments/2.0.1:
resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=}
engines: {node: '>=0.10.0'}
dev: false
optional: true
/strip-json-comments/3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -13191,12 +12928,6 @@ packages:
kind-of: 3.2.2
dev: true
/to-readable-stream/1.0.0:
resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==}
engines: {node: '>=6'}
dev: false
optional: true
/to-regex-range/2.1.1:
resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=}
engines: {node: '>=0.10.0'}
@@ -13596,27 +13327,6 @@ packages:
engines: {node: '>=8'}
dev: true
/update-notifier/5.1.0:
resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==}
engines: {node: '>=10'}
dependencies:
boxen: 5.0.0
chalk: 4.1.0
configstore: 5.0.1
has-yarn: 2.1.0
import-lazy: 2.1.0
is-ci: 2.0.0
is-installed-globally: 0.4.0
is-npm: 5.0.0
is-yarn-global: 0.3.0
latest-version: 5.1.0
pupa: 2.1.1
semver: 7.3.4
semver-diff: 3.1.1
xdg-basedir: 4.0.0
dev: false
optional: true
/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
@@ -13627,14 +13337,6 @@ packages:
deprecated: Please see https://github.com/lydell/urix#deprecated
dev: true
/url-parse-lax/3.0.0:
resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=}
engines: {node: '>=4'}
dependencies:
prepend-http: 2.0.0
dev: false
optional: true
/use/3.1.1:
resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
engines: {node: '>=0.10.0'}
@@ -14102,12 +13804,6 @@ packages:
optional: true
dev: true
/xdg-basedir/4.0.0:
resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
engines: {node: '>=8'}
dev: false
optional: true
/xml-name-validator/3.0.0:
resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==}
dev: true