mirror of
https://github.com/pockethost/pockethost.git
synced 2025-06-05 05:36:51 +00:00
auto-upgrade pocketbase
This commit is contained in:
parent
62ed7169af
commit
eaedec040c
@ -12,4 +12,5 @@ DAEMON_IDLE_TTL=5000
|
||||
DAEMON_PB_BACKUP_SLEEP=100
|
||||
DAEMON_PB_BACKUP_PAGE_COUNT=5
|
||||
SSL_KEY=`pwd`/ssl/pockethost.test.key
|
||||
SSL_CERT=`pwd`/ssl/pockethost.test.crt
|
||||
SSL_CERT=`pwd`/ssl/pockethost.test.crt
|
||||
PH_BIN_CACHE=`pwd`/.pbincache
|
@ -1,27 +1,45 @@
|
||||
export type Config = {
|
||||
debug: boolean
|
||||
pfx: string[]
|
||||
}
|
||||
|
||||
export type Logger = ReturnType<typeof createLogger>
|
||||
|
||||
export const createLogger = (config: Config) => {
|
||||
const { debug } = config
|
||||
export const createLogger = (config: Partial<Config>) => {
|
||||
const _config: Config = {
|
||||
debug: true,
|
||||
pfx: [''],
|
||||
...config,
|
||||
}
|
||||
const { debug, pfx } = _config
|
||||
const _pfx = (s: string) =>
|
||||
[s, ...pfx]
|
||||
.filter((v) => !!v)
|
||||
.map((p) => `[${p}]`)
|
||||
.join(' ')
|
||||
|
||||
const dbg = (...args: any[]) => {
|
||||
if (!debug) return
|
||||
console.log(`[DBG]`, ...args)
|
||||
console.log(_pfx('DBG'), ...args)
|
||||
}
|
||||
|
||||
const warn = (...args: any[]) => {
|
||||
console.log(`[WARN]`, ...args)
|
||||
console.log(_pfx('WARN'), ...args)
|
||||
}
|
||||
|
||||
const info = (...args: any[]) => {
|
||||
console.log(`[INFO]`, ...args)
|
||||
console.log(_pfx(`INFO`), ...args)
|
||||
}
|
||||
|
||||
const error = (...args: any[]) => {
|
||||
console.error(`[ERROR]`, ...args)
|
||||
console.error(_pfx(`ERROR`), ...args)
|
||||
}
|
||||
|
||||
return { dbg, warn, info, error }
|
||||
const create = (s: string) =>
|
||||
createLogger({
|
||||
..._config,
|
||||
pfx: [..._config.pfx, s],
|
||||
})
|
||||
|
||||
return { dbg, warn, info, error, create }
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { forEach } from '@s-libs/micro-dash'
|
||||
import { createLogger } from './Logger'
|
||||
|
||||
export type UnixTimestampMs = number
|
||||
export type TimerCanceler = () => void
|
||||
@ -8,10 +9,13 @@ export type TimeManagerConfig = {}
|
||||
export type TimeManager = ReturnType<typeof createTimerManager>
|
||||
|
||||
export const createTimerManager = (config: TimeManagerConfig) => {
|
||||
const { dbg, error } = createLogger({ debug: true })
|
||||
let i = 0
|
||||
const cleanups: any = {}
|
||||
let isShutDown = false
|
||||
|
||||
const add = (cb: () => void, ms: UnixTimestampMs) => {
|
||||
if (isShutDown) throw new Error(`Already shut down`)
|
||||
const idx = i++
|
||||
const tid = setTimeout(() => {
|
||||
cancel()
|
||||
@ -26,9 +30,11 @@ export const createTimerManager = (config: TimeManagerConfig) => {
|
||||
}
|
||||
|
||||
const shutdown = () => {
|
||||
// console.log(`Canceling all`, cleanups)
|
||||
isShutDown = true
|
||||
|
||||
dbg(`Canceling all`, cleanups)
|
||||
forEach(cleanups, (c) => c())
|
||||
// console.log(`done`, cleanups)
|
||||
// dbg(`done`, cleanups)
|
||||
}
|
||||
|
||||
const repeat = (
|
||||
@ -38,9 +44,9 @@ export const createTimerManager = (config: TimeManagerConfig) => {
|
||||
let _unsub: TimerCanceler | undefined = undefined
|
||||
const _again = async () => {
|
||||
const shouldRepeat = await cb()
|
||||
if (shouldRepeat) _unsub = add(_again, ms)
|
||||
if (shouldRepeat && !isShutDown) _unsub = add(_again, ms)
|
||||
}
|
||||
_again()
|
||||
_again().catch(error)
|
||||
return () => {
|
||||
_unsub?.()
|
||||
_unsub = undefined
|
||||
|
@ -2,6 +2,5 @@ export * from './assert'
|
||||
export * from './Logger'
|
||||
export * from './pocketbase-client-helpers'
|
||||
export * from './PromiseHelper'
|
||||
export * from './releases'
|
||||
export * from './schema'
|
||||
export * from './TimerManager'
|
||||
|
@ -1,142 +0,0 @@
|
||||
Abbey
|
||||
Ace
|
||||
Alice
|
||||
Alvin
|
||||
Amber
|
||||
Andy
|
||||
Bailey
|
||||
Bart
|
||||
Becca
|
||||
Belle
|
||||
Benny
|
||||
Biscuit
|
||||
Bonnie
|
||||
Boo
|
||||
Brooke
|
||||
Bruno
|
||||
Bunny
|
||||
Buttons
|
||||
Callie
|
||||
Carmen
|
||||
Cassidy
|
||||
Charlotte
|
||||
Chase
|
||||
Cheeks
|
||||
China
|
||||
Cindy
|
||||
Cinnamon
|
||||
Cody
|
||||
Cookie
|
||||
Crumpet
|
||||
Cupcake
|
||||
Daisy
|
||||
Dallas
|
||||
Dancer
|
||||
Dani
|
||||
Dasher
|
||||
Deckle
|
||||
Dirk
|
||||
Doily
|
||||
Dresden
|
||||
Droplet
|
||||
Elliott
|
||||
Emily
|
||||
Emma
|
||||
Fancy
|
||||
Fifi
|
||||
Fiona
|
||||
Flake
|
||||
Fluffy
|
||||
Frankie
|
||||
Frisky
|
||||
Frosty
|
||||
Frosty
|
||||
Giggles
|
||||
Ginger
|
||||
Goofball
|
||||
Gordon
|
||||
Gretel
|
||||
Gumdrop
|
||||
Gus
|
||||
Haley
|
||||
Hansel
|
||||
Harry
|
||||
Honeybunches
|
||||
Hugsgy
|
||||
Humphrey
|
||||
Hunny
|
||||
Ike
|
||||
Iris
|
||||
Jackie
|
||||
Jangles
|
||||
Jellybean
|
||||
Jenna
|
||||
Jesse
|
||||
Joey
|
||||
Josie
|
||||
Junior
|
||||
Kelly
|
||||
Kibbles
|
||||
Killer
|
||||
Kim
|
||||
Kit Kat
|
||||
Ladybug
|
||||
Laurie
|
||||
Leo
|
||||
Li’l Nibbler
|
||||
Maddie
|
||||
Maple Syrup
|
||||
Marshmallow
|
||||
Maximilian
|
||||
Maxine
|
||||
Mickey
|
||||
Mimi
|
||||
Mr. Gopher
|
||||
Muffin
|
||||
Nibbler
|
||||
Nibbly
|
||||
Nora
|
||||
Opal
|
||||
Oscar
|
||||
Pansy
|
||||
Peach
|
||||
Philbert
|
||||
Pierre
|
||||
Pixie
|
||||
Poofball
|
||||
Powderpuff
|
||||
Precious
|
||||
Puddin’
|
||||
Quinn
|
||||
Rainbow Dash
|
||||
Ralph
|
||||
Ripple
|
||||
Rockin’ Robin
|
||||
Rocky
|
||||
Rosie
|
||||
Rudolph
|
||||
Runt
|
||||
Rusty
|
||||
Sadie
|
||||
Sandy
|
||||
Sawyer
|
||||
Scout
|
||||
Simon
|
||||
Snowball
|
||||
Snuggles
|
||||
Sophie
|
||||
Spike
|
||||
Stella
|
||||
Sugarplum
|
||||
Sunny
|
||||
Sweetie Pie
|
||||
Sydney
|
||||
Tadpole
|
||||
Tammy
|
||||
Tater Tot
|
||||
Tori
|
||||
Twinkle
|
||||
Wally
|
||||
Whiskers
|
||||
Willow
|
||||
Zelda
|
@ -1,73 +0,0 @@
|
||||
import { find, last } from '@s-libs/micro-dash'
|
||||
import { assertExists } from './assert'
|
||||
|
||||
export const GO_VERSION = `1.19.3`
|
||||
|
||||
export const RELEASES = {
|
||||
ermine: {
|
||||
weight: 1,
|
||||
versions: ['0.7.7', '0.7.8', '0.7.9', '0.7.10'],
|
||||
},
|
||||
lollipop: {
|
||||
weight: 2,
|
||||
versions: [
|
||||
'0.8.0-rc1',
|
||||
'0.8.0-rc2',
|
||||
'0.8.0-rc3',
|
||||
'0.8.0-rc4',
|
||||
'0.8.0',
|
||||
'0.9.0',
|
||||
'0.9.1',
|
||||
'0.9.2',
|
||||
'0.10.0',
|
||||
'0.10.1',
|
||||
'0.10.2',
|
||||
'0.10.3',
|
||||
'0.10.4',
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
export type PlatformId = keyof typeof RELEASES
|
||||
export type VersionId = string
|
||||
|
||||
export const LATEST_PLATFORM: keyof typeof RELEASES = 'lollipop'
|
||||
|
||||
export const USE_LATEST_VERSION = 'latest'
|
||||
|
||||
function assertPlatform(platformId: string): asserts platformId is PlatformId {
|
||||
const hasPlatform = platformId in RELEASES
|
||||
if (!hasPlatform) {
|
||||
throw new Error(`Expected ${platformId} to exist here`)
|
||||
}
|
||||
}
|
||||
|
||||
export { assertPlatform }
|
||||
|
||||
export const versionFor = (platformId: PlatformId, version: VersionId) => {
|
||||
const platform = RELEASES[platformId]
|
||||
if (version === USE_LATEST_VERSION) {
|
||||
const _v = last(platform.versions)
|
||||
assertExists(_v, `Expected ${platformId} to have versions (latest)`)
|
||||
return _v
|
||||
}
|
||||
const _v = find(platform.versions, (v) => v === version)
|
||||
assertExists(_v, `Expected ${platformId} to have version (${version})`)
|
||||
return _v
|
||||
}
|
||||
|
||||
export const binFor = (
|
||||
platformId: PlatformId,
|
||||
version: VersionId = 'latest'
|
||||
) => {
|
||||
const _version = versionFor(platformId, version)
|
||||
return `pocketbase-go${GO_VERSION}-${platformId}-${_version}`
|
||||
}
|
||||
|
||||
export const humanVersion = (platformId: PlatformId, version: VersionId) => {
|
||||
const platform = RELEASES[platformId]
|
||||
const _version = versionFor(platformId, version)
|
||||
const humanVersion =
|
||||
version === USE_LATEST_VERSION ? `${_version} (latest)` : _version
|
||||
return humanVersion
|
||||
}
|
@ -14,7 +14,9 @@
|
||||
"@s-libs/micro-dash": "^14.1.0",
|
||||
"@types/http-proxy": "^1.17.9",
|
||||
"@types/node": "^18.11.9",
|
||||
"@types/semver": "^7.3.13",
|
||||
"@types/tmp": "^0.2.1",
|
||||
"@types/unzipper": "^0.10.5",
|
||||
"ajv": "^8.11.2",
|
||||
"boolean": "^3.2.0",
|
||||
"bottleneck": "^2.19.5",
|
||||
@ -24,11 +26,15 @@
|
||||
"get-port": "^6.1.2",
|
||||
"http-proxy": "^1.18.1",
|
||||
"knex": "^2.3.0",
|
||||
"node-fetch": "^3.2.10",
|
||||
"node-fetch": "^3.3.0",
|
||||
"pocketbase": "^0.8.0",
|
||||
"semver": "^7.3.8",
|
||||
"sqlite3": "^5.1.2",
|
||||
"tmp": "^0.2.1",
|
||||
"type-fest": "^3.3.0",
|
||||
"unzipper": "^0.10.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tsx": "^3.11.0"
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
import { existsSync } from 'fs'
|
||||
import { join } from 'path'
|
||||
import { env, envb, envi } from './util/env'
|
||||
export const PUBLIC_APP_PROTOCOL = env('PUBLIC_APP_PROTOCOL', 'https')
|
||||
export const PUBLIC_PB_PROTOCOL = env('PUBLIC_PB_PROTOCOL', `https`)
|
||||
@ -24,18 +25,6 @@ export const DAEMON_PB_PASSWORD = (() => {
|
||||
})()
|
||||
export const DAEMON_PB_PORT_BASE = envi('DAEMON_PB_PORT_BASE', 8090)
|
||||
export const DAEMON_PB_IDLE_TTL = envi('DAEMON_PB_IDLE_TTL', 5000)
|
||||
export const DAEMON_PB_BIN_DIR = (() => {
|
||||
const v = env('DAEMON_PB_BIN_DIR')
|
||||
if (!v) {
|
||||
throw new Error(
|
||||
`DAEMON_PB_BIN_DIR (${v}) environment variable must be specified`
|
||||
)
|
||||
}
|
||||
if (!existsSync(v)) {
|
||||
throw new Error(`DAEMON_PB_BIN_DIR (${v}) path must exist`)
|
||||
}
|
||||
return v
|
||||
})()
|
||||
export const DAEMON_PB_DATA_DIR = (() => {
|
||||
const v = env('DAEMON_PB_DATA_DIR')
|
||||
if (!v) {
|
||||
@ -56,3 +45,8 @@ export const DAEMON_PB_BACKUP_PAGE_COUNT = envi(
|
||||
`DAEMON_PB_BACKUP_PAGE_COUNT`,
|
||||
5
|
||||
)
|
||||
|
||||
export const PH_BIN_CACHE = env(
|
||||
`PH_BIN_CACHE`,
|
||||
join(__dirname, `../../../.pbincache`)
|
||||
)
|
||||
|
@ -1,48 +1,48 @@
|
||||
import { binFor, InstanceStatus } from '@pockethost/common'
|
||||
import { renameSync } from 'fs'
|
||||
import { resolve } from 'path'
|
||||
import {
|
||||
DAEMON_PB_BIN_DIR,
|
||||
DAEMON_PB_DATA_DIR,
|
||||
PUBLIC_PB_SUBDOMAIN,
|
||||
} from '../constants'
|
||||
import { backupInstance } from '../util/backupInstance'
|
||||
import { dbg, error, info } from '../util/logger'
|
||||
import { InstanceStatus } from '@pockethost/common'
|
||||
import { PH_BIN_CACHE, PUBLIC_PB_SUBDOMAIN } from '../constants'
|
||||
import { pocketbase } from '../services/PocketBaseService'
|
||||
import { info } from '../util/logger'
|
||||
import { safeCatch } from '../util/promiseHelper'
|
||||
import { pexec } from './pexec'
|
||||
import { schema } from './schema'
|
||||
import { withInstance } from './withInstance'
|
||||
|
||||
const PB_BIN = resolve(DAEMON_PB_BIN_DIR, binFor('lollipop'))
|
||||
|
||||
safeCatch(`root`, async () => {
|
||||
await backupInstance(
|
||||
PUBLIC_PB_SUBDOMAIN,
|
||||
`${+new Date()}`,
|
||||
async (progress) => {
|
||||
dbg(progress)
|
||||
}
|
||||
)
|
||||
|
||||
info(`Upgrading`)
|
||||
await pexec(`${PB_BIN} upgrade --dir=pb_data`)
|
||||
|
||||
await withInstance(async (client) => {
|
||||
await client.applySchema(schema)
|
||||
|
||||
await client.updateInstances((instance) => {
|
||||
const src = resolve(DAEMON_PB_DATA_DIR, instance.subdomain)
|
||||
const dst = resolve(DAEMON_PB_DATA_DIR, instance.id)
|
||||
try {
|
||||
renameSync(src, dst)
|
||||
} catch (e) {
|
||||
error(`${e}`)
|
||||
}
|
||||
return {
|
||||
status: InstanceStatus.Idle,
|
||||
platform: instance.platform || 'ermine',
|
||||
version: instance.version || 'latest',
|
||||
}
|
||||
})
|
||||
;(async () => {
|
||||
const pbService = await pocketbase({
|
||||
cachePath: PH_BIN_CACHE,
|
||||
checkIntervalMs: 5 * 60 * 1000,
|
||||
})
|
||||
|
||||
safeCatch(`root`, async () => {
|
||||
// await backupInstance(
|
||||
// PUBLIC_PB_SUBDOMAIN,
|
||||
// `${+new Date()}`,
|
||||
// async (progress) => {
|
||||
// dbg(progress)
|
||||
// }
|
||||
// )
|
||||
|
||||
info(`Upgrading`)
|
||||
const upgradeProcess = await pbService.spawn({
|
||||
command: 'upgrade',
|
||||
slug: PUBLIC_PB_SUBDOMAIN,
|
||||
})
|
||||
await upgradeProcess.exited
|
||||
|
||||
await withInstance(async (client) => {
|
||||
await client.applySchema(schema)
|
||||
|
||||
await client.updateInstances((instance) => {
|
||||
const version = (() => {
|
||||
if (instance.platform === 'ermine') return '^0.7.0'
|
||||
if (instance.platform === 'lollipop') return '^0.10.0'
|
||||
})()
|
||||
console.log(`Updating instance ${instance.id} to ${version}`)
|
||||
return {
|
||||
status: InstanceStatus.Idle,
|
||||
version,
|
||||
}
|
||||
})
|
||||
})
|
||||
console.log(`All instances updated`)
|
||||
})()
|
||||
pbService.shutdown()
|
||||
})()
|
||||
|
@ -1,34 +1,30 @@
|
||||
import { binFor } from '@pockethost/common'
|
||||
import {
|
||||
DAEMON_PB_PASSWORD,
|
||||
DAEMON_PB_PORT_BASE,
|
||||
DAEMON_PB_USERNAME,
|
||||
PUBLIC_PB_DOMAIN,
|
||||
PUBLIC_PB_PROTOCOL,
|
||||
PUBLIC_PB_SUBDOMAIN,
|
||||
} from '../constants'
|
||||
import { createPbClient, PocketbaseClientApi } from '../db/PbClient'
|
||||
import { mkInternalUrl } from '../util/internal'
|
||||
import { pocketbase } from '../services/PocketBaseService'
|
||||
import { error, info } from '../util/logger'
|
||||
import { safeCatch } from '../util/promiseHelper'
|
||||
import { spawnInstance } from '../util/spawnInstance'
|
||||
import { tryFetch } from '../util/tryFetch'
|
||||
|
||||
export const withInstance = safeCatch(
|
||||
`withInstance`,
|
||||
async (cb: (client: PocketbaseClientApi) => Promise<void>) => {
|
||||
// Add `platform` and `bin` required columns (migrate db json)
|
||||
try {
|
||||
const mainProcess = await spawnInstance({
|
||||
subdomain: PUBLIC_PB_SUBDOMAIN,
|
||||
const mainProcess = await (
|
||||
await pocketbase()
|
||||
).spawn({
|
||||
command: 'serve',
|
||||
slug: PUBLIC_PB_SUBDOMAIN,
|
||||
port: DAEMON_PB_PORT_BASE,
|
||||
bin: binFor('lollipop'),
|
||||
})
|
||||
|
||||
try {
|
||||
const coreInternalUrl = mkInternalUrl(DAEMON_PB_PORT_BASE)
|
||||
const client = createPbClient(coreInternalUrl)
|
||||
await tryFetch(coreInternalUrl)
|
||||
const { url } = mainProcess
|
||||
const client = createPbClient(url)
|
||||
await client.adminAuthViaEmail(DAEMON_PB_USERNAME, DAEMON_PB_PASSWORD)
|
||||
await cb(client)
|
||||
} catch (e) {
|
||||
@ -39,6 +35,7 @@ export const withInstance = safeCatch(
|
||||
} finally {
|
||||
info(`Exiting process`)
|
||||
mainProcess.kill()
|
||||
await mainProcess.exited
|
||||
}
|
||||
} catch (e) {
|
||||
error(`${e}`)
|
||||
|
@ -1,9 +1,7 @@
|
||||
import { binFor } from '@pockethost/common'
|
||||
import getPort from 'get-port'
|
||||
import {
|
||||
DAEMON_PB_PASSWORD,
|
||||
DAEMON_PB_PORT_BASE,
|
||||
DAEMON_PB_USERNAME,
|
||||
PH_BIN_CACHE,
|
||||
PUBLIC_PB_DOMAIN,
|
||||
PUBLIC_PB_PROTOCOL,
|
||||
PUBLIC_PB_SUBDOMAIN,
|
||||
@ -11,31 +9,31 @@ import {
|
||||
import { createPbClient } from './db/PbClient'
|
||||
import { createBackupService } from './services/BackupService'
|
||||
import { createInstanceService } from './services/InstanceService'
|
||||
import { pocketbase } from './services/PocketBaseService'
|
||||
import { createProxyService } from './services/ProxyService'
|
||||
import { createRpcService } from './services/RpcService'
|
||||
import { mkInternalUrl } from './util/internal'
|
||||
import { dbg, error, info } from './util/logger'
|
||||
import { spawnInstance } from './util/spawnInstance'
|
||||
// npm install eventsource --save
|
||||
global.EventSource = require('eventsource')
|
||||
;(async () => {
|
||||
const port = await getPort({ port: DAEMON_PB_PORT_BASE })
|
||||
const coreInternalUrl = mkInternalUrl(port)
|
||||
const pbService = await pocketbase({
|
||||
cachePath: PH_BIN_CACHE,
|
||||
checkIntervalMs: 1000 * 5 * 60,
|
||||
})
|
||||
|
||||
/**
|
||||
* Launch central database
|
||||
*/
|
||||
const mainProcess = await spawnInstance({
|
||||
subdomain: PUBLIC_PB_SUBDOMAIN,
|
||||
|
||||
const { url } = await pbService.spawn({
|
||||
command: 'serve',
|
||||
slug: PUBLIC_PB_SUBDOMAIN,
|
||||
port,
|
||||
bin: binFor('lollipop'),
|
||||
})
|
||||
|
||||
/**
|
||||
* Launch services
|
||||
*/
|
||||
const client = createPbClient(coreInternalUrl)
|
||||
const client = createPbClient(url)
|
||||
try {
|
||||
await client.adminAuthViaEmail(DAEMON_PB_USERNAME, DAEMON_PB_PASSWORD)
|
||||
dbg(`Logged in`)
|
||||
@ -50,7 +48,7 @@ global.EventSource = require('eventsource')
|
||||
const instanceService = await createInstanceService({ client, rpcService })
|
||||
const proxyService = await createProxyService({
|
||||
instanceManager: instanceService,
|
||||
coreInternalUrl,
|
||||
coreInternalUrl: url,
|
||||
})
|
||||
const backupService = await createBackupService(client, rpcService)
|
||||
|
||||
@ -60,5 +58,6 @@ global.EventSource = require('eventsource')
|
||||
instanceService.shutdown()
|
||||
rpcService.shutdown()
|
||||
backupService.shutdown()
|
||||
pbService.shutdown()
|
||||
})
|
||||
})()
|
||||
|
@ -1,15 +1,12 @@
|
||||
import {
|
||||
assertTruthy,
|
||||
binFor,
|
||||
CreateInstancePayload,
|
||||
CreateInstancePayloadSchema,
|
||||
CreateInstanceResult,
|
||||
createTimerManager,
|
||||
InstanceId,
|
||||
InstanceStatus,
|
||||
LATEST_PLATFORM,
|
||||
RpcCommands,
|
||||
USE_LATEST_VERSION,
|
||||
} from '@pockethost/common'
|
||||
import { forEachRight, map } from '@s-libs/micro-dash'
|
||||
import Bottleneck from 'bottleneck'
|
||||
@ -26,7 +23,7 @@ import { mkInternalUrl } from '../util/internal'
|
||||
import { dbg, error, warn } from '../util/logger'
|
||||
import { now } from '../util/now'
|
||||
import { safeCatch } from '../util/promiseHelper'
|
||||
import { PocketbaseProcess, spawnInstance } from '../util/spawnInstance'
|
||||
import { pocketbase, PocketbaseProcess } from './PocketBaseService'
|
||||
import { RpcServiceApi } from './RpcService'
|
||||
|
||||
type InstanceApi = {
|
||||
@ -46,6 +43,7 @@ export type InstanceServiceApi = AsyncReturnType<typeof createInstanceService>
|
||||
export const createInstanceService = async (config: InstanceServiceConfig) => {
|
||||
const { client, rpcService } = config
|
||||
const { registerCommand } = rpcService
|
||||
const pbService = await pocketbase()
|
||||
|
||||
registerCommand<CreateInstancePayload, CreateInstanceResult>(
|
||||
RpcCommands.CreateInstance,
|
||||
@ -56,9 +54,9 @@ export const createInstanceService = async (config: InstanceServiceConfig) => {
|
||||
const instance = await client.createInstance({
|
||||
subdomain,
|
||||
uid: rpc.userId,
|
||||
version: USE_LATEST_VERSION,
|
||||
version: (await pocketbase()).getLatestVersion,
|
||||
status: InstanceStatus.Idle,
|
||||
platform: LATEST_PLATFORM,
|
||||
platform: 'unused',
|
||||
secondsThisMonth: 0,
|
||||
isBackupAllowed: false,
|
||||
})
|
||||
@ -109,11 +107,11 @@ export const createInstanceService = async (config: InstanceServiceConfig) => {
|
||||
|
||||
await client.updateInstanceStatus(instance.id, InstanceStatus.Starting)
|
||||
|
||||
const childProcess = await spawnInstance({
|
||||
subdomain,
|
||||
const childProcess = await pbService.spawn({
|
||||
command: 'serve',
|
||||
slug: instance.id,
|
||||
port: newPort,
|
||||
bin: binFor(instance.platform, instance.version),
|
||||
version: instance.version,
|
||||
onUnexpectedStop: (code) => {
|
||||
warn(`${subdomain} exited unexpectedly with ${code}`)
|
||||
api.shutdown()
|
||||
|
214
packages/daemon/src/services/PocketBaseService.ts
Normal file
214
packages/daemon/src/services/PocketBaseService.ts
Normal file
@ -0,0 +1,214 @@
|
||||
import { createTimerManager } from '@pockethost/common'
|
||||
import { keys } from '@s-libs/micro-dash'
|
||||
import { spawn } from 'child_process'
|
||||
import { chmodSync, existsSync } from 'fs'
|
||||
import getPort from 'get-port'
|
||||
import fetch from 'node-fetch'
|
||||
import { type } from 'os'
|
||||
import { dirname, join } from 'path'
|
||||
import { maxSatisfying, rsort } from 'semver'
|
||||
import { AsyncReturnType } from 'type-fest'
|
||||
import { Extract } from 'unzipper'
|
||||
import { DAEMON_PB_DATA_DIR } from '../constants'
|
||||
import { mkInternalAddress, mkInternalUrl } from '../util/internal'
|
||||
import { dbg, error } from '../util/logger'
|
||||
import { safeCatch } from '../util/promiseHelper'
|
||||
import { tryFetch } from '../util/tryFetch'
|
||||
import { mkSingleton } from './mkSingleton'
|
||||
|
||||
export type PocketbaseCommand = 'serve' | 'upgrade'
|
||||
export type SpawnConfig = {
|
||||
command: PocketbaseCommand
|
||||
slug: string
|
||||
version?: string
|
||||
port?: number
|
||||
onUnexpectedStop?: (code: number | null) => void
|
||||
}
|
||||
export type PocketbaseServiceApi = AsyncReturnType<
|
||||
typeof createPocketbaseService
|
||||
>
|
||||
|
||||
export type PocketbaseServiceConfig = {
|
||||
cachePath: string
|
||||
checkIntervalMs: number
|
||||
}
|
||||
|
||||
export type PocketbaseProcess = {
|
||||
url: string
|
||||
pid: number | undefined
|
||||
kill: () => void
|
||||
exited: Promise<number | null>
|
||||
}
|
||||
|
||||
export type Release = {
|
||||
tag_name: string
|
||||
prerelease: string
|
||||
assets: {
|
||||
name: string
|
||||
browser_download_url: string
|
||||
}[]
|
||||
}
|
||||
export type Releases = Release[]
|
||||
|
||||
export const downloadAndExtract = async (url: string, binPath: string) => {
|
||||
await new Promise<void>(async (resolve, reject) => {
|
||||
console.log(`Fetching ${url}`)
|
||||
const res = await fetch(url)
|
||||
if (!res.body) {
|
||||
throw new Error(`Body expected for ${url}`)
|
||||
}
|
||||
console.log(`Extracting ${url}`)
|
||||
const stream = res.body.pipe(Extract({ path: dirname(binPath) }))
|
||||
stream.on('close', () => {
|
||||
console.log(`Close ${url}`)
|
||||
resolve()
|
||||
})
|
||||
stream.on('error', (e) => {
|
||||
console.error(`Error ${url} ${e}`)
|
||||
reject()
|
||||
})
|
||||
stream.on('end', () => {
|
||||
console.log(`End ${url}`)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
chmodSync(binPath, 0o775)
|
||||
}
|
||||
|
||||
export const createPocketbaseService = async (
|
||||
config: PocketbaseServiceConfig
|
||||
) => {
|
||||
const { cachePath, checkIntervalMs } = config
|
||||
|
||||
const tm = createTimerManager({})
|
||||
|
||||
const osName = type().toLowerCase()
|
||||
const cpuArchitecture = process.arch
|
||||
|
||||
console.log({ osName, cpuArchitecture })
|
||||
const versions: { [_: string]: Promise<string> } = {}
|
||||
let maxVersion = ''
|
||||
|
||||
const check = async () => {
|
||||
const res = await fetch(
|
||||
`https://api.github.com/repos/pocketbase/pocketbase/releases`
|
||||
)
|
||||
const releases = (await res.json()) as Releases
|
||||
|
||||
const promises = releases.map(async (release) => {
|
||||
const { tag_name, prerelease, assets } = release
|
||||
const sanitizedTagName = tag_name.slice(1)
|
||||
if (prerelease) return
|
||||
const path = join(cachePath, tag_name)
|
||||
const url = assets.find(
|
||||
(v) => v.name.includes(osName) && v.name.includes(cpuArchitecture)
|
||||
)?.browser_download_url
|
||||
if (!url) return
|
||||
|
||||
const p = new Promise<string>(async (resolve) => {
|
||||
const binPath = join(path, `pocketbase`)
|
||||
if (existsSync(binPath)) {
|
||||
resolve(binPath)
|
||||
versions[sanitizedTagName] = Promise.resolve('')
|
||||
return
|
||||
}
|
||||
await downloadAndExtract(url, binPath)
|
||||
|
||||
resolve(binPath)
|
||||
})
|
||||
versions[sanitizedTagName] = p
|
||||
})
|
||||
await Promise.all(promises).catch((e) => {
|
||||
console.error(e)
|
||||
})
|
||||
maxVersion = `^${rsort(keys(versions))[0]}`
|
||||
return true
|
||||
}
|
||||
await check()
|
||||
tm.repeat(check, checkIntervalMs)
|
||||
|
||||
const getLatestVersion = () => maxVersion
|
||||
|
||||
const getVersion = async (semVer = maxVersion) => {
|
||||
const version = maxSatisfying(keys(versions), semVer)
|
||||
if (!version) throw new Error(`No version satisfies ${semVer}`)
|
||||
const binPath = await versions[version]
|
||||
if (!binPath) throw new Error(`binPath for ${version} not found`)
|
||||
return {
|
||||
version,
|
||||
binPath,
|
||||
}
|
||||
}
|
||||
|
||||
const _spawn = safeCatch(`spawnInstance`, async (cfg: SpawnConfig) => {
|
||||
const { version, command, slug, port, onUnexpectedStop }: SpawnConfig = {
|
||||
version: '^0.10.0',
|
||||
port: await getPort(),
|
||||
...cfg,
|
||||
}
|
||||
const bin = (await getVersion(version)).binPath
|
||||
if (!existsSync(bin)) {
|
||||
throw new Error(
|
||||
`PocketBase binary (${bin}) not found. Contact pockethost.io.`
|
||||
)
|
||||
}
|
||||
|
||||
const args = [command, `--dir`, `${DAEMON_PB_DATA_DIR}/${slug}/pb_data`]
|
||||
if (command === 'serve') {
|
||||
args.push(`--http`)
|
||||
args.push(mkInternalAddress(port))
|
||||
}
|
||||
dbg(`Spawning ${slug}`, { bin, args })
|
||||
const ls = spawn(bin, args)
|
||||
|
||||
ls.stdout.on('data', (data) => {
|
||||
dbg(`${slug} stdout: ${data}`)
|
||||
})
|
||||
|
||||
ls.stderr.on('data', (data) => {
|
||||
error(`${slug} stderr: ${data}`)
|
||||
})
|
||||
|
||||
ls.on('close', (code) => {
|
||||
dbg(`${slug} closed with code ${code}`)
|
||||
})
|
||||
|
||||
const exited = new Promise<number | null>((resolve) => {
|
||||
ls.on('exit', (code) => {
|
||||
dbg(`${slug} exited with code ${code}`)
|
||||
onUnexpectedStop?.(code)
|
||||
resolve(code)
|
||||
})
|
||||
})
|
||||
|
||||
ls.on('error', (err) => {
|
||||
dbg(`${slug} had error ${err}`)
|
||||
})
|
||||
|
||||
const url = mkInternalUrl(port)
|
||||
if (command === 'serve') {
|
||||
await tryFetch(url)
|
||||
}
|
||||
const api: PocketbaseProcess = {
|
||||
url,
|
||||
exited,
|
||||
pid: ls.pid,
|
||||
kill: () => ls.kill(),
|
||||
}
|
||||
return api
|
||||
})
|
||||
|
||||
const shutdown = () => {
|
||||
dbg(`Shutting down pocketbaseService`)
|
||||
tm.shutdown()
|
||||
}
|
||||
|
||||
return {
|
||||
spawn: _spawn,
|
||||
getVersion,
|
||||
getLatestVersion,
|
||||
shutdown,
|
||||
}
|
||||
}
|
||||
|
||||
export const pocketbase = mkSingleton(createPocketbaseService)
|
18
packages/daemon/src/services/mkSingleton.ts
Normal file
18
packages/daemon/src/services/mkSingleton.ts
Normal file
@ -0,0 +1,18 @@
|
||||
export const mkSingleton = <TConfig, TApi>(
|
||||
factory: (config: TConfig) => Promise<TApi>
|
||||
) => {
|
||||
let _service: TApi | undefined = undefined
|
||||
return async (config?: TConfig) => {
|
||||
return new Promise<TApi>(async (resolve) => {
|
||||
if (_service) {
|
||||
resolve(_service)
|
||||
return
|
||||
}
|
||||
if (!config) {
|
||||
throw new Error(`Attempt to get service before initialization.`)
|
||||
}
|
||||
_service = await factory(config)
|
||||
resolve(_service)
|
||||
})
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
import { spawn } from 'child_process'
|
||||
import { existsSync } from 'fs'
|
||||
import { AsyncReturnType } from 'type-fest'
|
||||
import { DAEMON_PB_BIN_DIR, DAEMON_PB_DATA_DIR } from '../constants'
|
||||
import { mkInternalAddress, mkInternalUrl } from './internal'
|
||||
import { dbg, error } from './logger'
|
||||
import { safeCatch } from './promiseHelper'
|
||||
import { tryFetch } from './tryFetch'
|
||||
export type PocketbaseProcess = AsyncReturnType<typeof spawnInstance>
|
||||
|
||||
export type Config = {
|
||||
subdomain: string
|
||||
slug: string
|
||||
port: number
|
||||
bin: string
|
||||
onUnexpectedStop?: (code: number | null) => void
|
||||
}
|
||||
|
||||
export const spawnInstance = safeCatch(`spawnInstance`, async (cfg: Config) => {
|
||||
const { subdomain, port, bin, onUnexpectedStop, slug } = cfg
|
||||
const cmd = `${DAEMON_PB_BIN_DIR}/${bin}`
|
||||
if (!existsSync(cmd)) {
|
||||
throw new Error(
|
||||
`PocketBase binary (${bin}) not found. Contact pockethost.io.`
|
||||
)
|
||||
}
|
||||
|
||||
const args = [
|
||||
`serve`,
|
||||
`--dir`,
|
||||
`${DAEMON_PB_DATA_DIR}/${slug}/pb_data`,
|
||||
`--http`,
|
||||
mkInternalAddress(port),
|
||||
]
|
||||
dbg(`Spawning ${subdomain}`, { cmd, args })
|
||||
const ls = spawn(cmd, args)
|
||||
|
||||
ls.stdout.on('data', (data) => {
|
||||
dbg(`${subdomain} stdout: ${data}`)
|
||||
})
|
||||
|
||||
ls.stderr.on('data', (data) => {
|
||||
error(`${subdomain} stderr: ${data}`)
|
||||
})
|
||||
|
||||
ls.on('close', (code) => {
|
||||
dbg(`${subdomain} closed with code ${code}`)
|
||||
})
|
||||
ls.on('exit', (code) => {
|
||||
if (code) {
|
||||
;(
|
||||
onUnexpectedStop ||
|
||||
((code) => {
|
||||
dbg(`Exited with ${code}`)
|
||||
})
|
||||
)(code)
|
||||
}
|
||||
})
|
||||
ls.on('error', (err) => {
|
||||
dbg(`${subdomain} had error ${err}`)
|
||||
})
|
||||
|
||||
await tryFetch(mkInternalUrl(port))
|
||||
return {
|
||||
pid: ls.pid,
|
||||
kill: () => ls.kill(),
|
||||
}
|
||||
})
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"lib": [],
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"esModuleInterop": true,
|
||||
|
2
packages/pocketbase/.gitignore
vendored
2
packages/pocketbase/.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
dist
|
||||
build
|
@ -1,21 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
CGO_ENABLED=0
|
||||
|
||||
SRC=src
|
||||
TARGET=build/$PLATFORM/$VERSION
|
||||
DIST="${DIST:-./dist}"
|
||||
rm -rf $TARGET
|
||||
mkdir -p $TARGET
|
||||
mkdir -p $DIST
|
||||
cp -r $SRC/* $TARGET
|
||||
echo `pwd`
|
||||
cd $TARGET
|
||||
echo "Building ${BIN}"
|
||||
echo "Fetching pocketbase version $VERSION"
|
||||
go get github.com/pocketbase/pocketbase@v$VERSION
|
||||
echo "Tidying modules"
|
||||
go mod tidy
|
||||
echo "Building ${BIN}"
|
||||
go build -o ../../../$DIST/$BIN
|
||||
echo "Build ${BIN} complete" `date`
|
@ -1,46 +0,0 @@
|
||||
import { binFor, RELEASES } from '@pockethost/common'
|
||||
import { forEach } from '@s-libs/micro-dash'
|
||||
import Bottleneck from 'bottleneck'
|
||||
import { exec } from 'child_process'
|
||||
import { existsSync } from 'fs'
|
||||
import Listr from 'listr'
|
||||
|
||||
const DIST = process.env.DIST || `./dist`
|
||||
const MAX_CONCURRENT = parseInt(process.env.MAX_CONCURRENT || `1`, 10)
|
||||
|
||||
const limiter = new Bottleneck({ maxConcurrent: MAX_CONCURRENT })
|
||||
|
||||
const pexec = (cmd: string, cwd = __dirname) => {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
console.log(cmd)
|
||||
exec(cmd, { cwd }, (err, stdout, stderr) => {
|
||||
console.log(stdout)
|
||||
console.error(stderr)
|
||||
if (err) {
|
||||
reject(err)
|
||||
return
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const tasks = new Listr([], { concurrent: true })
|
||||
forEach(RELEASES, (info, platform) => {
|
||||
forEach(info.versions, (version) => {
|
||||
const bin = binFor(platform, version)
|
||||
const cmd = `VERSION=${version} PLATFORM=${platform} BIN=${bin} DIST=${DIST} ./build.sh`
|
||||
tasks.add({
|
||||
title: `${platform}: ${version} ${cmd}`,
|
||||
task: () =>
|
||||
limiter.schedule(async () => {
|
||||
const path = `./${DIST}/${bin}`
|
||||
if (existsSync(path)) return
|
||||
await pexec(cmd)
|
||||
}),
|
||||
})
|
||||
})
|
||||
})
|
||||
tasks.run().catch((err) => {
|
||||
console.error(err)
|
||||
})
|
@ -1,20 +0,0 @@
|
||||
{
|
||||
"name": "@pockethost/pocketbase",
|
||||
"version": "0.0.1",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"build": "tsx build.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"chokidar-cli": "^3.0.0",
|
||||
"tsx": "^3.11.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@pockethost/common": "0.0.1",
|
||||
"@s-libs/micro-dash": "^14.1.0",
|
||||
"@types/listr": "^0.14.4",
|
||||
"@types/node": "^18.11.9",
|
||||
"bottleneck": "^2.19.5",
|
||||
"listr": "^0.14.3"
|
||||
}
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
module pocketbase
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/pocketbase/pocketbase v0.8.0-rc1
|
||||
|
||||
require (
|
||||
github.com/AlecAivazis/survey/v2 v2.3.6 // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect
|
||||
github.com/aws/aws-sdk-go v1.44.126 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.17.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.9 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.17.10 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.12.23 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.19 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.37 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.26 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.16 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.10 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.20 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.19 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.29.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.11.25 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.8 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.17.1 // indirect
|
||||
github.com/aws/smithy-go v1.13.4 // indirect
|
||||
github.com/disintegration/imaging v1.6.2 // indirect
|
||||
github.com/domodwyer/mailyak/v3 v3.3.4 // indirect
|
||||
github.com/fatih/color v1.13.0 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.1 // indirect
|
||||
github.com/ganigeorgiev/fexpr v0.1.1 // indirect
|
||||
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.4.2 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/google/uuid v1.3.0 // indirect
|
||||
github.com/google/wire v0.5.0 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.6.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.0.1 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||
github.com/labstack/echo/v5 v5.0.0-20220201181537-ed2888cfa198 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.16 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.16 // indirect
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
||||
github.com/pocketbase/dbx v1.7.0 // indirect
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa // indirect
|
||||
github.com/spf13/cast v1.5.0 // indirect
|
||||
github.com/spf13/cobra v1.6.1 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||
github.com/valyala/fasttemplate v1.2.2 // indirect
|
||||
go.opencensus.io v0.23.0 // indirect
|
||||
gocloud.dev v0.27.0 // indirect
|
||||
golang.org/x/crypto v0.1.0 // indirect
|
||||
golang.org/x/image v0.1.0 // indirect
|
||||
golang.org/x/mod v0.6.0 // indirect
|
||||
golang.org/x/net v0.1.0 // indirect
|
||||
golang.org/x/oauth2 v0.1.0 // indirect
|
||||
golang.org/x/sys v0.1.0 // indirect
|
||||
golang.org/x/term v0.1.0 // indirect
|
||||
golang.org/x/text v0.4.0 // indirect
|
||||
golang.org/x/time v0.1.0 // indirect
|
||||
golang.org/x/tools v0.2.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||
google.golang.org/api v0.101.0 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect
|
||||
google.golang.org/grpc v1.50.1 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
lukechampine.com/uint128 v1.2.0 // indirect
|
||||
modernc.org/cc/v3 v3.40.0 // indirect
|
||||
modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8 // indirect
|
||||
modernc.org/libc v1.21.4 // indirect
|
||||
modernc.org/mathutil v1.5.0 // indirect
|
||||
modernc.org/memory v1.4.0 // indirect
|
||||
modernc.org/opt v0.1.3 // indirect
|
||||
modernc.org/sqlite v1.19.3 // indirect
|
||||
modernc.org/strutil v1.1.3 // indirect
|
||||
modernc.org/token v1.0.1 // indirect
|
||||
)
|
File diff suppressed because it is too large
Load Diff
@ -1,15 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/pocketbase/pocketbase"
|
||||
)
|
||||
|
||||
func main() {
|
||||
app := pocketbase.New()
|
||||
|
||||
if err := app.Start(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
@ -1,103 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||
|
||||
/* Modules */
|
||||
"module": "commonjs" /* Specify what module code is generated. */,
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
// "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||
"resolveJsonModule": true /* Enable importing .json files. */,
|
||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true /* Enable all strict type-checking options. */,
|
||||
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
import { instance } from './store'
|
||||
|
||||
assertExists($instance, `Expected instance here`)
|
||||
const { subdomain, status, platform, version } = $instance
|
||||
const { subdomain } = $instance
|
||||
const url = `${PUBLIC_PB_PROTOCOL}://${subdomain}.${PUBLIC_PB_DOMAIN}`
|
||||
const code = `const url = '${url}'\nconst client = new PocketBase(url)`
|
||||
</script>
|
||||
|
@ -66,22 +66,22 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{#each $backups as { id, bytes, updated, platform, version, status, message, progress }}
|
||||
{#each $backups as { id, bytes, updated, version, status, message, progress }}
|
||||
<div>
|
||||
{#if status === BackupStatus.FinishedSuccess}
|
||||
<div class="text-success">
|
||||
{platform}:{version} ({prettyBytes(bytes)}) - Finished {new Date(updated)}
|
||||
{version} ({prettyBytes(bytes)}) - Finished {new Date(updated)}
|
||||
</div>
|
||||
{/if}
|
||||
{#if status === BackupStatus.FinishedError}
|
||||
<div class="text-danger">
|
||||
{platform}:{version} - Finished {new Date(updated)}
|
||||
{version} - Finished {new Date(updated)}
|
||||
<AlertBar icon="bi bi-exclamation-triangle-fill" text={message} />
|
||||
</div>
|
||||
{/if}
|
||||
{#if status !== BackupStatus.FinishedError && status !== BackupStatus.FinishedSuccess}
|
||||
<div class="text-warning">
|
||||
{platform}:{version}
|
||||
{version}
|
||||
{status}
|
||||
{#each Object.entries(progress || {}) as [src, pct]}
|
||||
<div class="badge bg-secondary" style="margin-right: 3px">
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
export let instance: InstanceFields
|
||||
|
||||
const { subdomain, status, platform, version } = instance
|
||||
const { subdomain } = instance
|
||||
const url = `${PUBLIC_PB_PROTOCOL}://${subdomain}.${PUBLIC_PB_DOMAIN}`
|
||||
const code = `const url = '${url}'\nconst client = new PocketBase(url)`
|
||||
</script>
|
||||
|
@ -3,11 +3,10 @@
|
||||
import { PUBLIC_PB_PROTOCOL } from '$env/static/public'
|
||||
import { PUBLIC_PB_DOMAIN } from '$src/env'
|
||||
import type { InstanceFields } from '@pockethost/common'
|
||||
import { humanVersion } from '@pockethost/common'
|
||||
|
||||
export let instance: InstanceFields
|
||||
|
||||
const { subdomain, status, platform, version } = instance
|
||||
const { subdomain, status, version } = instance
|
||||
const url = `${PUBLIC_PB_PROTOCOL}://${subdomain}.${PUBLIC_PB_DOMAIN}`
|
||||
</script>
|
||||
|
||||
@ -15,8 +14,7 @@
|
||||
<h2>Overview</h2>
|
||||
<ProvisioningStatus {status} />
|
||||
<div>
|
||||
Running {platform}
|
||||
{humanVersion(platform, version)}
|
||||
Running {version}
|
||||
</div>
|
||||
<div>
|
||||
Admin URL: <a href={`${url}/_`} target="_blank">{`${url}/_`}</a>
|
||||
|
@ -7,7 +7,7 @@
|
||||
import { client } from '$src/pocketbase'
|
||||
import { createCleanupManagerSync } from '$util/CleanupManager'
|
||||
import { error } from '$util/logger'
|
||||
import { humanVersion, type InstanceFields, type InstanceRecordsById } from '@pockethost/common'
|
||||
import type { InstanceFields, InstanceRecordsById } from '@pockethost/common'
|
||||
import { forEach, values } from '@s-libs/micro-dash'
|
||||
import { onDestroy, onMount } from 'svelte'
|
||||
import { fade } from 'svelte/transition'
|
||||
@ -25,6 +25,7 @@
|
||||
if (browser) {
|
||||
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
|
||||
const tooltipList = [...tooltipTriggerList].map(
|
||||
//@ts-ignore
|
||||
(tooltipTriggerEl) => new bootstrap.Tooltip(tooltipTriggerEl)
|
||||
)
|
||||
}
|
||||
@ -83,10 +84,7 @@
|
||||
<i
|
||||
class="bi bi-info-circle"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title={`Running ${app.platform} ${humanVersion(
|
||||
app.platform,
|
||||
app.version
|
||||
)}`}
|
||||
data-bs-title={`Running ${app.version}`}
|
||||
/>
|
||||
<ProvisioningStatus status={app.status} />
|
||||
</div>
|
||||
|
7
scripts/migrate.sh
Executable file
7
scripts/migrate.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -a
|
||||
source .env
|
||||
set +a
|
||||
|
||||
yarn migrate
|
435
yarn.lock
435
yarn.lock
@ -853,13 +853,6 @@
|
||||
tslib "^2.3.0"
|
||||
utility-types "^3.10.0"
|
||||
|
||||
"@samverschueren/stream-to-observable@^0.3.0":
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301"
|
||||
integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==
|
||||
dependencies:
|
||||
any-observable "^0.3.0"
|
||||
|
||||
"@sveltejs/adapter-node@^1.0.0-next.99":
|
||||
version "1.0.0-next.100"
|
||||
resolved "https://registry.yarnpkg.com/@sveltejs/adapter-node/-/adapter-node-1.0.0-next.100.tgz#12fbf0e440e0871869388e4d9d8a007e97d64dd6"
|
||||
@ -950,14 +943,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-3.0.2.tgz#451eaeece64c6bdac8b2dde0caab23b085899e0d"
|
||||
integrity sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==
|
||||
|
||||
"@types/listr@^0.14.4":
|
||||
version "0.14.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/listr/-/listr-0.14.4.tgz#6ba2a4206615cf80d79d10f9ba9701c303cd57b6"
|
||||
integrity sha512-+MWvidNujBUgJsi4yMVwEQQwaHe6oHedPSy+dwk3akGEeuIbvhWkK+TGsXSwbFup7Y0cCBb+wzzdD+yGKp7sOg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
rxjs "^6.5.1"
|
||||
|
||||
"@types/node@*", "@types/node@^18.11.17", "@types/node@^18.11.9", "@types/node@^18.8.2":
|
||||
version "18.11.17"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.17.tgz#5c009e1d9c38f4a2a9d45c0b0c493fe6cdb4bcb5"
|
||||
@ -992,11 +977,23 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/semver@^7.3.13":
|
||||
version "7.3.13"
|
||||
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
|
||||
integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
|
||||
|
||||
"@types/tmp@^0.2.1", "@types/tmp@^0.2.3":
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.3.tgz#908bfb113419fd6a42273674c00994d40902c165"
|
||||
integrity sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==
|
||||
|
||||
"@types/unzipper@^0.10.5":
|
||||
version "0.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/unzipper/-/unzipper-0.10.5.tgz#36a963cf025162b4ac31642590cb4192971d633b"
|
||||
integrity sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@yarnpkg/lockfile@^1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
|
||||
@ -1051,21 +1048,6 @@ ajv@^8.11.2:
|
||||
require-from-string "^2.0.2"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
ansi-escapes@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
|
||||
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
|
||||
|
||||
ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
|
||||
|
||||
ansi-regex@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1"
|
||||
integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
|
||||
@ -1076,11 +1058,6 @@ ansi-regex@^5.0.1:
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
||||
ansi-styles@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||
integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==
|
||||
|
||||
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
@ -1095,11 +1072,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
dependencies:
|
||||
color-convert "^2.0.1"
|
||||
|
||||
any-observable@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
|
||||
integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
|
||||
|
||||
anymatch@~3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
|
||||
@ -1141,11 +1113,29 @@ base-x@^3.0.8:
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
big-integer@^1.6.17:
|
||||
version "1.6.51"
|
||||
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
|
||||
integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||
|
||||
binary@~0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79"
|
||||
integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==
|
||||
dependencies:
|
||||
buffers "~0.1.1"
|
||||
chainsaw "~0.1.0"
|
||||
|
||||
bluebird@~3.4.1:
|
||||
version "3.4.7"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
|
||||
integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==
|
||||
|
||||
boolbase@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
|
||||
@ -1203,6 +1193,16 @@ buffer-from@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
|
||||
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
|
||||
|
||||
buffer-indexof-polyfill@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c"
|
||||
integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==
|
||||
|
||||
buffers@~0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"
|
||||
integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==
|
||||
|
||||
builtin-modules@^3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
|
||||
@ -1254,18 +1254,14 @@ caniuse-lite@^1.0.30001400:
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795"
|
||||
integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==
|
||||
|
||||
chalk@^1.0.0, chalk@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||
integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==
|
||||
chainsaw@~0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98"
|
||||
integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==
|
||||
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"
|
||||
traverse ">=0.3.0 <0.4"
|
||||
|
||||
chalk@^2.0.0, chalk@^2.4.1:
|
||||
chalk@^2.0.0:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||
@ -1327,21 +1323,6 @@ clean-stack@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
|
||||
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
|
||||
|
||||
cli-cursor@^2.0.0, cli-cursor@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
||||
integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==
|
||||
dependencies:
|
||||
restore-cursor "^2.0.0"
|
||||
|
||||
cli-truncate@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
|
||||
integrity sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==
|
||||
dependencies:
|
||||
slice-ansi "0.0.4"
|
||||
string-width "^1.0.1"
|
||||
|
||||
cliui@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
|
||||
@ -1365,11 +1346,6 @@ clone@^2.1.1:
|
||||
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
|
||||
integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
|
||||
|
||||
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 sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==
|
||||
|
||||
color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
@ -1454,6 +1430,11 @@ cookie@^0.5.0:
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
|
||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||
|
||||
core-util-is@~1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
|
||||
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
|
||||
|
||||
cosmiconfig@^7.0.1:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
|
||||
@ -1519,11 +1500,6 @@ data-uri-to-buffer@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b"
|
||||
integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==
|
||||
|
||||
date-fns@^1.27.2:
|
||||
version "1.30.1"
|
||||
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
|
||||
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
|
||||
|
||||
date-fns@^2.29.1, date-fns@^2.29.3:
|
||||
version "2.29.3"
|
||||
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8"
|
||||
@ -1616,16 +1592,18 @@ dotenv@^7.0.0:
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c"
|
||||
integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==
|
||||
|
||||
duplexer2@~0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
|
||||
integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==
|
||||
dependencies:
|
||||
readable-stream "^2.0.2"
|
||||
|
||||
electron-to-chromium@^1.4.251:
|
||||
version "1.4.284"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
|
||||
integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
|
||||
|
||||
elegant-spinner@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
|
||||
integrity sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==
|
||||
|
||||
emoji-regex@^7.0.1:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
|
||||
@ -1808,7 +1786,7 @@ escalade@^3.1.1:
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
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 sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
|
||||
@ -1869,21 +1847,6 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4:
|
||||
node-domexception "^1.0.0"
|
||||
web-streams-polyfill "^3.0.3"
|
||||
|
||||
figures@^1.7.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
|
||||
integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
figures@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
|
||||
integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||
@ -1951,6 +1914,16 @@ fsevents@~2.3.2:
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||
|
||||
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"
|
||||
@ -2062,18 +2035,11 @@ globrex@^0.1.2:
|
||||
resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
|
||||
integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
|
||||
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.6:
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.6:
|
||||
version "4.2.10"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
|
||||
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
|
||||
|
||||
has-ansi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||
integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
@ -2183,11 +2149,6 @@ imurmurhash@^0.1.4:
|
||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
|
||||
|
||||
indent-string@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
|
||||
integrity sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==
|
||||
|
||||
indent-string@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||
@ -2206,7 +2167,7 @@ inflight@^1.0.4:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@^2.0.3:
|
||||
inherits@2, inherits@^2.0.3, inherits@~2.0.0, 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==
|
||||
@ -2264,13 +2225,6 @@ is-extglob@^2.1.1:
|
||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
|
||||
|
||||
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 sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==
|
||||
dependencies:
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
is-fullwidth-code-point@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||
@ -2308,18 +2262,6 @@ is-number@^7.0.0:
|
||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||
|
||||
is-observable@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
|
||||
integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
|
||||
dependencies:
|
||||
symbol-observable "^1.1.0"
|
||||
|
||||
is-promise@^2.1.0:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
|
||||
integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
|
||||
|
||||
is-reference@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
|
||||
@ -2327,11 +2269,6 @@ is-reference@1.2.1:
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
|
||||
is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
|
||||
|
||||
is-wsl@^2.1.1:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
|
||||
@ -2339,6 +2276,11 @@ is-wsl@^2.1.1:
|
||||
dependencies:
|
||||
is-docker "^2.0.0"
|
||||
|
||||
isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
@ -2474,49 +2416,10 @@ lines-and-columns@^1.1.6:
|
||||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
|
||||
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
|
||||
|
||||
listr-silent-renderer@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
|
||||
integrity sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==
|
||||
|
||||
listr-update-renderer@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
|
||||
integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
|
||||
dependencies:
|
||||
chalk "^1.1.3"
|
||||
cli-truncate "^0.2.1"
|
||||
elegant-spinner "^1.0.1"
|
||||
figures "^1.7.0"
|
||||
indent-string "^3.0.0"
|
||||
log-symbols "^1.0.2"
|
||||
log-update "^2.3.0"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
listr-verbose-renderer@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
|
||||
integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
|
||||
dependencies:
|
||||
chalk "^2.4.1"
|
||||
cli-cursor "^2.1.0"
|
||||
date-fns "^1.27.2"
|
||||
figures "^2.0.0"
|
||||
|
||||
listr@^0.14.3:
|
||||
version "0.14.3"
|
||||
resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
|
||||
integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
|
||||
dependencies:
|
||||
"@samverschueren/stream-to-observable" "^0.3.0"
|
||||
is-observable "^1.1.0"
|
||||
is-promise "^2.1.0"
|
||||
is-stream "^1.1.0"
|
||||
listr-silent-renderer "^1.1.1"
|
||||
listr-update-renderer "^0.5.0"
|
||||
listr-verbose-renderer "^0.5.0"
|
||||
p-map "^2.0.0"
|
||||
rxjs "^6.3.3"
|
||||
listenercount@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937"
|
||||
integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==
|
||||
|
||||
lmdb@2.5.2:
|
||||
version "2.5.2"
|
||||
@ -2566,22 +2469,6 @@ lodash@^4.17.21:
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
log-symbols@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
|
||||
integrity sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==
|
||||
dependencies:
|
||||
chalk "^1.0.0"
|
||||
|
||||
log-update@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
|
||||
integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==
|
||||
dependencies:
|
||||
ansi-escapes "^3.0.0"
|
||||
cli-cursor "^2.0.0"
|
||||
wrap-ansi "^3.0.1"
|
||||
|
||||
lru-cache@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||
@ -2655,11 +2542,6 @@ mime@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
|
||||
integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
|
||||
|
||||
mimic-fn@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
|
||||
|
||||
min-indent@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
|
||||
@ -2738,7 +2620,7 @@ minizlib@^2.0.0, minizlib@^2.1.1:
|
||||
minipass "^3.0.0"
|
||||
yallist "^4.0.0"
|
||||
|
||||
mkdirp@^0.5.1:
|
||||
"mkdirp@>=0.5 0", mkdirp@^0.5.1:
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
||||
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
|
||||
@ -2833,7 +2715,7 @@ node-fetch@2.6.7, node-fetch@^2.6.7:
|
||||
dependencies:
|
||||
whatwg-url "^5.0.0"
|
||||
|
||||
node-fetch@^3.2.10:
|
||||
node-fetch@^3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.0.tgz#37e71db4ecc257057af828d523a7243d651d91e4"
|
||||
integrity sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==
|
||||
@ -2917,12 +2799,7 @@ nullthrows@^1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
|
||||
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
|
||||
|
||||
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 sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==
|
||||
|
||||
object-assign@^4.1.0, object-assign@^4.1.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 sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
@ -2934,13 +2811,6 @@ once@^1.3.0:
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
onetime@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
||||
integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==
|
||||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
open@^7.4.2:
|
||||
version "7.4.2"
|
||||
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
|
||||
@ -2987,11 +2857,6 @@ p-locate@^6.0.0:
|
||||
dependencies:
|
||||
p-limit "^4.0.0"
|
||||
|
||||
p-map@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
|
||||
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
|
||||
|
||||
p-map@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
|
||||
@ -3179,6 +3044,11 @@ pretty-bytes@^6.0.0:
|
||||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.0.0.tgz#928be2ad1f51a2e336add8ba764739f9776a8140"
|
||||
integrity sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==
|
||||
|
||||
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==
|
||||
|
||||
promise-inflight@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
||||
@ -3225,6 +3095,19 @@ react-refresh@^0.9.0:
|
||||
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf"
|
||||
integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==
|
||||
|
||||
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==
|
||||
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"
|
||||
|
||||
readable-stream@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||
@ -3292,14 +3175,6 @@ resolve@^1.20.0, resolve@^1.22.1:
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
restore-cursor@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||
integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==
|
||||
dependencies:
|
||||
onetime "^2.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
retry@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
|
||||
@ -3310,7 +3185,7 @@ reusify@^1.0.4:
|
||||
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
|
||||
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
||||
|
||||
rimraf@^2.5.2, rimraf@^2.6.3:
|
||||
rimraf@2, rimraf@^2.5.2, rimraf@^2.6.3:
|
||||
version "2.7.1"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
|
||||
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
|
||||
@ -3338,13 +3213,6 @@ run-parallel@^1.1.9:
|
||||
dependencies:
|
||||
queue-microtask "^1.2.2"
|
||||
|
||||
rxjs@^6.3.3, rxjs@^6.5.1:
|
||||
version "6.6.7"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
|
||||
integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
rxjs@^7.0.0:
|
||||
version "7.5.7"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39"
|
||||
@ -3364,6 +3232,11 @@ safe-buffer@^5.0.1, safe-buffer@~5.2.0:
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
||||
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==
|
||||
|
||||
"safer-buffer@>= 2.1.2 < 3.0.0":
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
@ -3398,7 +3271,7 @@ semver@^6.0.0:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
semver@^7.3.5:
|
||||
semver@^7.3.5, semver@^7.3.8:
|
||||
version "7.3.8"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
|
||||
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
|
||||
@ -3415,6 +3288,11 @@ set-cookie-parser@^2.5.1:
|
||||
resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b"
|
||||
integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==
|
||||
|
||||
setimmediate@~1.0.4:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
||||
integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
@ -3432,7 +3310,7 @@ shell-quote@^1.7.3:
|
||||
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8"
|
||||
integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==
|
||||
|
||||
signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7:
|
||||
signal-exit@^3.0.0, signal-exit@^3.0.7:
|
||||
version "3.0.7"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||
@ -3456,11 +3334,6 @@ slash@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
|
||||
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
|
||||
|
||||
slice-ansi@0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
|
||||
integrity sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==
|
||||
|
||||
smart-buffer@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
|
||||
@ -3549,15 +3422,6 @@ streamsearch@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
|
||||
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
|
||||
|
||||
string-width@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||
integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==
|
||||
dependencies:
|
||||
code-point-at "^1.0.0"
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
@ -3567,14 +3431,6 @@ string-width@^1.0.1:
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string-width@^3.0.0, string-width@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
|
||||
@ -3591,19 +3447,12 @@ string_decoder@^1.1.1:
|
||||
dependencies:
|
||||
safe-buffer "~5.2.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 sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
|
||||
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:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
|
||||
version "5.2.0"
|
||||
@ -3626,11 +3475,6 @@ strip-indent@^3.0.0:
|
||||
dependencies:
|
||||
min-indent "^1.0.0"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
@ -3713,11 +3557,6 @@ svgo@^2.4.0:
|
||||
picocolors "^1.0.0"
|
||||
stable "^0.1.8"
|
||||
|
||||
symbol-observable@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||
|
||||
tar@^6.0.2, tar@^6.1.11, tar@^6.1.2:
|
||||
version "6.1.12"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6"
|
||||
@ -3799,16 +3638,16 @@ tr46@~0.0.3:
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
|
||||
|
||||
"traverse@>=0.3.0 <0.4":
|
||||
version "0.3.9"
|
||||
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
|
||||
integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==
|
||||
|
||||
tree-kill@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
|
||||
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
|
||||
|
||||
tslib@^1.9.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
||||
tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
|
||||
@ -3866,6 +3705,22 @@ universalify@^0.1.0:
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||
|
||||
unzipper@^0.10.11:
|
||||
version "0.10.11"
|
||||
resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e"
|
||||
integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==
|
||||
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"
|
||||
graceful-fs "^4.2.2"
|
||||
listenercount "~1.0.1"
|
||||
readable-stream "~2.3.6"
|
||||
setimmediate "~1.0.4"
|
||||
|
||||
update-browserslist-db@^1.0.9:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
|
||||
@ -3881,7 +3736,7 @@ uri-js@^4.2.2:
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
util-deprecate@^1.0.1:
|
||||
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 sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||
@ -3957,14 +3812,6 @@ wide-align@^1.1.2, wide-align@^1.1.5:
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2 || 3 || 4"
|
||||
|
||||
wrap-ansi@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
|
||||
integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==
|
||||
dependencies:
|
||||
string-width "^2.1.1"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
wrap-ansi@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
|
||||
|
Loading…
x
Reference in New Issue
Block a user