diff --git a/.envrc.sample b/.envrc.sample index 03566970..1b4876d0 100644 --- a/.envrc.sample +++ b/.envrc.sample @@ -17,8 +17,11 @@ export SPOTIFY_CLIENT_ID="" export SPOTIFY_CLIENT_SECRET="" export MUSIXMATCH_API_KEY="" -export EVENT_ID="" -export STRAGE_URL="" +export EVENT_ID="todo" +export STORAGE_ID="" +export STORAGE_URL="" -export THREAD_TITLE_WORD="" +export EMPTY_MODE_SEARCH_WORD="探偵 クイズ 推理 アニメ " # クイズなど + +export THREAD_TITLE_WORD="ならアニソン" export DIRECT_MODE=0 \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..095e0d97 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 vipzero + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/maintanace-flow.md b/maintanace-flow.md new file mode 100644 index 00000000..1d2d597d --- /dev/null +++ b/maintanace-flow.md @@ -0,0 +1,97 @@ +## メンテフロー + +### Event 作成 + +``` +$ vi .envrc EVENT_ID +EVENT_ID=xxxxxx +$ yarn setup # EVENT_ID から動作 +$ yarn setup:anison +``` + +```mermaid +sequenceDiagram + +participant you_ as You +participant envB as BackEnd環境設定 +participant appB as haikei-server +participant fbdb as Firestore +participant andb as AnisonDb + +you_ ->> envB : .envrc EVENT_ID 更新 +you_ ->> appB : yarn setup +envB ->> appB : EVENT_ID +appB ->> fbdb : event 追加 +``` + +```mermaid +sequenceDiagram + +participant you_ as You +participant envB as BackEnd環境設定 data/*.csv +participant appB as haikei-server +participant andb as AnisonDb + +you_ ->> appB : yarn setup:anison +appB ->> andb : get +andb ->> envB : 同期 +``` + +### FrontEnd のセットアップ + +rekka-haikei の `src/config/incdex.ts` + +- イベント追加 `xxxxxx` +- 終了時間指定 + +### サーバー起動 + +```mermaid + +sequenceDiagram + +participant you_ as You +participant appB as haikei-server +participant fbhi as Firestore/hist +participant fbco as Firestore/counts +participant strm as Stream + +you_ ->> appB : yarn start +appB ->> fbhi : get [eventId] +fbhi ->> appB : lastSong +appB ->> fbco : get [eventId] +fbco ->> appB : all cache + +appB ->> strm : subscribe + +``` + +### 動作中 + +```mermaid + +sequenceDiagram + +participant strm as Stream +participant appB as haikei-server +participant fbhi as Firestore/hist +participant fbso as Firestore/song +participant fbco as Firestore/counts + + +strm ->> appB : icy +appB ->> appB : 解析 +appB ->> fbhi : update +appB ->> fbso : push +appB ->> fbco : update + +``` + +### 終了 + +アーカイブする。 +イベント中の履歴は Firestore からロードするが、アーカイブ後は履歴を Cloud Storage からダウンロードするようになる。 + +``` +yarn close:archive {event_ia} +``` diff --git a/package.json b/package.json index 9e015807..b69c88e0 100644 --- a/package.json +++ b/package.json @@ -3,33 +3,45 @@ "type": "commonjs", "dependencies": { "@types/jest": "^27.4.1", - "axios": "0.21.1", + "axios": "0.27.2", "chalk": "4.1.2", "chch": "2.8.0", - "cheerio": "1.0.0-rc.10", - "csv-parse": "4.16.0", - "date-fns": "2.23.0", - "file-type": "16.5.3", - "got": "11.8.2", + "cheerio": "1.0.0-rc.12", + "csv-parse": "4.16.3", + "csv-stringify": "^6.0.5", + "date-fns": "2.30.0", + "esbuild": "^0.17.0", + "esbuild-register": "^3.3.2", + "file-type": "16.5.4", + "got": "11.8.6", "iconv-lite": "0.6.3", "icy": "2.1.0", + "jaco": "^4.0.0", "jest": "^27.5.1", + "jimp": "^0.22.0", + "jptext-to-emoji": "0.3.0", + "luxon": "^3.3.0", "node-spotify-api": "1.1.1", - "sharp": "0.28.3" + "sharp": "0.32.1" }, "scripts": { - "start": "ts-node src/index.ts", + "start": "yarn start:esbuild", + "start:esbuild": "node -r esbuild-register src/index.ts", + "start:ts-node": "ts-node src/index.ts", "get_history": "curl http://w.hoshinoa.me:8000/play.txt -o data/history.txt", "setup": "ts-node scripts/setupEvent.ts", "setup:ee": "ts-node scripts/setupEasterEgg.ts", "setup:anison": "./scripts/updateAnisonDb.mjs", + "close:archive": "ts-node ./scripts/archiveEvent/index.ts", "import2": "ts-node scripts/batch/importHistoryFromCells.ts", "map:watch": "./scripts/hourly-yarn-map.sh", "map": "yarn map-load-thread && yarn map-save", "map-load-thread": "ts-node scripts/loadThreads.ts", "map-save": "ts-node scripts/makePostCountMap.ts", + "fix:counts": "ts-node scripts/batch/migrateWordCounts.ts", "active-thread": "chch dump-threads |jq -r '.threads[] | \"\\(.url),\\(.title)\"' |grep \"ならアニソン\"", - "test": "jest" + "test": "jest", + "test:type": "npx tsc --noEmit" }, "devDependencies": { "@swc/core": "^1.2.168", @@ -39,18 +51,19 @@ "@types/imagemin": "7.0.1", "@types/imagemin-gifsicle": "7.0.1", "@types/imagemin-mozjpeg": "8.0.1", + "@types/luxon": "^3.3.0", "@types/node": "17.0.24", "@types/sharp": "0.28.5", - "@typescript-eslint/eslint-plugin": "4.29.1", - "@typescript-eslint/parser": "4.29.1", - "eslint": "8.13.0", - "firebase-admin": "9.11.0", + "@typescript-eslint/eslint-plugin": "5.21.0", + "@typescript-eslint/parser": "5.21.0", + "eslint": "8.14.0", + "firebase-admin": "9.12.0", "imagemin": "7.0.1", "imagemin-gifsicle": "7.0.0", "imagemin-mozjpeg": "9.0.0", "imagemin-pngquant": "9.0.2", "rimraf": "3.0.2", - "ts-node": "10.7.0", - "typescript": "4.6.3" + "ts-node": "10.9.1", + "typescript": "4.9.5" } } diff --git a/readme.md b/readme.md index 12916c0e..53ec166c 100644 --- a/readme.md +++ b/readme.md @@ -46,8 +46,29 @@ iTunes API (認証なし) - spotify: アートワーク・アルバム名・(邦楽・アニソンあまり取れないため) - musixmatch: アートワーク・アルバム名・歌詞の出だし(有料 API では FULL) +調整・アルゴリズム関係 -## 検索文字生成部分や調整しているアルゴリズムなど -https://github.com/vipzero/haikei-server/wiki/algo +## 画像検索文字列の生成部分 +方針 +- 関連性のあるものが出るように +- meme やキャプ画像が出るように +- 平凡な公式タイトル画像以外が出るように + +コード + +https://github.com/vipzero/haikei-server/blob/main/src/utils/makeSearchWord.ts + +## 画像選択 + +imagemin などで Optimize 後のメタデータで +ソートして上から 3 つ + +コード + +https://github.com/vipzero/haikei-server/blob/main/src/imageIo/uploadManage.ts + +## メンテフロー + +[./maintanace-flow.md](./maintanace-flow.md) diff --git a/scripts/archiveEvent/index.ts b/scripts/archiveEvent/index.ts new file mode 100644 index 00000000..70f544fc --- /dev/null +++ b/scripts/archiveEvent/index.ts @@ -0,0 +1,38 @@ +import { assert } from 'console' +import { stringify } from 'csv-stringify/sync' +import { writeFile } from 'fs/promises' + +import { + archiveUrl, + loadHistEventSongs, + uploadStorageArchive, +} from '../../src/service/firebase' +import { log } from '../../src/utils/logger' + +const archiveEventCsv = async (id: string) => { + log({ id }) + if (!id) return + const data = await loadHistEventSongs(id) + const dataWithN = data.map((d) => ({ ...d, n: d.n || 0 })) + const csvText = stringify(dataWithN, { + header: true, + columns: ['time', 'title', 'n'].map((key) => ({ key, header: key })), + }) + + await saveFile(id, csvText) +} + +const saveFile = async (id: string, text: string) => { + const paths = archiveUrl(id) + const { localFile } = paths + + await writeFile(localFile, text) + await uploadStorageArchive(paths) + log({ paths }) +} + +const eventId = process.argv[2] + +assert(eventId, 'need arg [event_id]') + +archiveEventCsv(eventId).then(() => log('doae')) diff --git a/scripts/batch/importHistoryFromCells.ts b/scripts/batch/importHistoryFromCells.ts index 2a57abfd..69fd6b76 100644 --- a/scripts/batch/importHistoryFromCells.ts +++ b/scripts/batch/importHistoryFromCells.ts @@ -22,7 +22,7 @@ async function main() { const { title, time } = parseLine(line) await sleep(200) await addHistory(title, time) - anaCounts(title, {}) + anaCounts([title], {}, [], true) process.stdout.write('.') } diff --git a/scripts/batch/importHistoryFromCells2.ts b/scripts/batch/importHistoryFromCells2.ts new file mode 100644 index 00000000..513e4068 --- /dev/null +++ b/scripts/batch/importHistoryFromCells2.ts @@ -0,0 +1,31 @@ +import { readFileSync } from 'fs' +import { addHistory } from '../../src/service/firebase' +import { sleep } from '../../src/utils' +import { anaCounts } from '../../src/utils/wordCounts' + +const parseLine = (text: string) => { + const [time, title] = text.split(',') + + return { time, title } +} + +const importFile = './data/20220501_0200-0800.mid.csv' +const text = readFileSync(importFile, 'utf8') + +const lines = text.trim().split('\r\n') + +async function main() { + // for (let i = 0; i < 3; i++) { + for (let i = 0; i < lines.length; i++) { + const line = lines[i] + const { title, time } = parseLine(line) + + await sleep(200) + await addHistory(title.trim(), Number(time), 0) + anaCounts([title], {}, [], true) + + process.stdout.write('.') + } +} + +main().then(() => console.log('fin')) diff --git a/scripts/batch/importHistoryFromCells3.ts b/scripts/batch/importHistoryFromCells3.ts new file mode 100644 index 00000000..a05213e0 --- /dev/null +++ b/scripts/batch/importHistoryFromCells3.ts @@ -0,0 +1,32 @@ +import { readFileSync } from 'fs' +import { addHistory } from '../../src/service/firebase' +import { sleep } from '../../src/utils' +import { anaCounts } from '../../src/utils/wordCounts' + +const parseLine = (text: string) => { + const [title, artist, time] = text.split(',') + + return { time, title: `${title} - ${artist}` } +} + +const importFile = './data/archive/history_1214.txt' +const text = readFileSync(importFile, 'utf8') + +const lines = text.trim().split('\n') + +async function main() { + // for (let i = 0; i < 3; i++) { + for (let i = 0; i < lines.length; i++) { + const line = lines[i] + const { title, time } = parseLine(line) + + await sleep(200) + + await addHistory(title.trim(), Number(time), 0) + anaCounts([title], {}, [], true) + + process.stdout.write('.') + } +} + +main().then(() => console.log('fin')) diff --git a/scripts/batch/importHistoryFromCells4.ts b/scripts/batch/importHistoryFromCells4.ts new file mode 100644 index 00000000..75f82803 --- /dev/null +++ b/scripts/batch/importHistoryFromCells4.ts @@ -0,0 +1,41 @@ +import { readFileSync } from 'fs' +// import { addHistory } from '../../src/service/firebase' +import { sleep } from '../../src/utils' +// import { anaCounts } from '../../src/utils/wordCounts' +import { DateTime } from 'luxon' + +const parseLine = (text: string) => { + const [time, ...icys] = text.split(' ') + const icy = icys.join(' ') + + return { time, title: icy } +} + +const importFile = './data/archive/history_2023gw0501.utf.txt' +const text = readFileSync(importFile, 'utf8') + +const lines = text.trim().split('\r\n') + +async function main() { + // for (let i = 0; i < 3; i++) { + for (let i = 0; i < lines.length; i++) { + const line = lines[i] + const { title, time: timeStr } = parseLine(line) + + await sleep(200) + // 01/May/2023:05:19:32 + const time = DateTime.fromFormat(timeStr, 'dd/MMM/yyyy:HH:mm:ss') + .setLocale('ja') + .toMillis() + if (i === 0) console.log('start1: ', time) + if (i === 1) console.log('start2: ', time) + if (i === lines.length - 1) console.log('end: ', time) + + // await addHistory(title.trim(), Number(time), 0) + // anaCounts([title], {}, [], true) + + // process.stdout.write('.') + } +} + +main().then(() => console.log('fin')) diff --git a/scripts/batch/restoreByRes.ts b/scripts/batch/restoreByRes.ts new file mode 100644 index 00000000..bf60849b --- /dev/null +++ b/scripts/batch/restoreByRes.ts @@ -0,0 +1,36 @@ +/* eslint-disable no-console */ +import { loadActiveUrls } from './../threadUrls' +import chch from 'chch' +import { Post } from 'chch/dist/types' +import { sleep } from '../../src/utils' + +const filterRes = (p: Post) => + p.name.raw.includes(process.env.TARGET_NAME || '---') + +async function main() { + const search = process.env.THREAD_TITLE_WORD + const currentTreads = search + ? (await chch.getThreads(null)).threads + .filter((t) => t.title.includes(search)) + .map((t) => t.url) + : [] + + const urls = loadActiveUrls() + .map((v) => v.text) + .concat(currentTreads) + console.log(urls) + + for (const url of urls) { + const thread = await chch.getThread(url) + + for (const post of thread.posts.filter(filterRes)) { + const line1 = post.message.split('\n')[0] + if (line1.includes(' ')) + console.log(line1.split(' ').join(',') + ',' + post.timestamp) + } + sleep(1000) + } +} + +// watch() +main().then(() => console.log('fin')) diff --git a/scripts/batch/restoreHistoryTags.ts b/scripts/batch/restoreHistoryTags.ts new file mode 100644 index 00000000..0a90e0ec --- /dev/null +++ b/scripts/batch/restoreHistoryTags.ts @@ -0,0 +1,38 @@ +import { assert } from 'console' +import { findSong } from '../../src/anisonDb/findSong' + +import { + countupWordsEntry, + loadHistEventSongs +} from '../../src/service/firebase' +import { convertTimeTags } from '../../src/utils' +import { log } from '../../src/utils/logger' + +// 年代をタグにして補完する +const restoreHistoryTags = async (id: string) => { + // log({ id }) + if (!id) return + const data = await loadHistEventSongs(id) + + const counts: Record = {} + + data.map((s) => { + const icy = s.title + const { date } = findSong(icy) + + if (!date) return + const tags = convertTimeTags(date) + tags.map((v) => { + if (!counts[v]) counts[v] = 0 + counts[v] += 1 + }) + }) + log(JSON.stringify(counts)) + countupWordsEntry(counts) +} + +const eventId = process.argv[2] + +assert(eventId, 'need arg [event_id]') + +restoreHistoryTags(eventId).then(() => log('doae')) diff --git a/scripts/loadThreads.ts b/scripts/loadThreads.ts index 6ce91841..a6b14c4f 100644 --- a/scripts/loadThreads.ts +++ b/scripts/loadThreads.ts @@ -4,6 +4,9 @@ import chch from 'chch' import { sleep } from '../src/utils' import { loadData, saveData } from './postTimeUtil' +const filterNonGreeting = (s: string) => + !(s.includes('>>') && /^おつ|^よろ|^云々/m.exec(s)) + async function main() { const search = process.env.THREAD_TITLE_WORD const currentTreads = search @@ -23,7 +26,9 @@ async function main() { if (!data[thread.url]) data[thread.url] = {} - for (const post of thread.posts) { + for (const post of thread.posts.filter((p) => + filterNonGreeting(p.message) + )) { data[thread.url][post.timestamp] = true } sleep(1000) diff --git a/scripts/playground.ts b/scripts/playground.ts index 26e24bce..7f4ebba1 100644 --- a/scripts/playground.ts +++ b/scripts/playground.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-irregular-whitespace */ /* eslint-disable no-console */ // import { pathQueue, push } from './state/pathQueue' @@ -77,3 +78,20 @@ // import { getSyncConf } from './../src/utils/syncConf' // console.log(getSyncConf()) + +// import { makeSearchQuery } from '../src/utils/makeSearchWord' +// +// const song = { +// icy: '愛美 - LIVE for LIFE ~狼たちの夜~', +// } +// console.log(makeSearchQuery(song, Math.random())) + +// import { makeEmol } from '../src/service/emol' + +// const text = +// '水面が 揺らぐ\n風の輪が 拡がる\n触れ合った指先の\n青い電流\n\n見つめあうだけで\n孤独な加速度が\n一瞬に砕け散る\nあなたが好きよ\n\n透明な真珠のように\n宙に浮く涙\n悲劇だってかまわない\nあなたと生きたい\n\nキラッ!\n流星にまたがって\nあなたに急降下 ah ah\n濃紺の星空に\n私たち花火みたい\n心が光の矢を放つ\n\n会話などなしに\n内側に潜って\n考えが読み取れる\n不思議な夜\n\nあなたの名 呪文みたいに\n無限のリピート\n憎らしくて手の甲に\n爪をたててみる\n\nキラッ!\n身体ごと透き通り\n絵のように漂う uh uh\nけし粒の生命でも\n私たち瞬いてる\n魂に銀河 雪崩れてく\n\n流星にまたがって\nあなたは急上昇 oh oh\n濃紺の星空に\n私たち花火みたい\n心が光の矢を放つ\n\nけし粒の生命でも\n私たち瞬いてる\n魂に銀河 雪崩れてく\n魂に銀河 雪崩れてく' +// // emojify(text, { onlyEmoji: true }).then(console.log) +// makeEmol(text).then(console.log) + +// const icy = `READY STEADY GO - L'Arc~en~Ciel` +// console.log(findSong(icy)) diff --git a/scripts/setupEasterEgg.ts b/scripts/setupEasterEgg.ts index 00a2e607..8ca539f6 100644 --- a/scripts/setupEasterEgg.ts +++ b/scripts/setupEasterEgg.ts @@ -44,11 +44,27 @@ async function main() { mk: 0, rk: 0, }, gabudoro: { gb: 0, vi: 0, st: 0, rf: 0 }, + yamajo: { ur: 0, nn: 0, mi: 0, mr: 0, na: 0, as: 0, si: 0 }, + bryunhild: { nk: 0, kn: 0, kz: 0, kt: 0, nn: 0, ht: 0, mt: 0 }, + // prettier-ignore + imasml: { + mr: 0, sy: 0, kt: 0, ar: 0, km: 0, er: 0, um: 0, mn: 0, nr: 0, no: 0, mt: 0, ik: 0, yr: 0, + jr: 0, tk: 0, sz: 0, sb: 0, ay: 0, mz: 0, ro: 0, sh: 0, mk: 0, em: 0, cz: 0, rk: 0, tg: 0, + hn: 0, sr: 0, an: 0, tm: 0, ri: 0, el: 0, ak: 0, kn: 0, tb: 0, kl: 0, hk: 0, my: 0, ko: 0, + ah: 0, ch: 0, yh: 0, yy: 0, rt: 0, az: 0, io: 0, ma: 0, am: 0, mm: 0, mi: 0, hb: 0, tn: 0, }, + // prettier-ignore + rakupro: { mm: 0, si: 0, kt: 0, ym: 0, mk: 0, mo: 0, nn: 0, rr: 0, rt: 0, ma: 0, rn: 0, sz: 0, }, + // prettier-ignore + shining: { hn: 0, ss: 0, mr: 0, hy: 0, gs: 0, rr: 0, kk: 0, uo: 0, ms: 0, hr: 0, er: 0, te: 0, }, + aobuta: { mi: 0, sk: 0, tm: 0, ft: 0, nd: 0, ke: 0 }, + // prettier-ignore + milgram: { es: 0, hr: 0, yn: 0, fu: 0, mu: 0, sd: 0, mh: 0, kz: 0, am: 0, mk: 0, kt: 0, }, } const tasks = Object.entries(votes).map(async ([animeId, inits]) => { const animeRef = fdb.collection('cvote').doc(animeId) const doc = await animeRef.get() + if (doc.exists) return await animeRef.set(inits) diff --git a/scripts/setupEvent.ts b/scripts/setupEvent.ts index 45d8a632..621bd3d8 100644 --- a/scripts/setupEvent.ts +++ b/scripts/setupEvent.ts @@ -1,10 +1,18 @@ +/* eslint-disable no-console */ import { fdb } from '../src/service/firebase' const eventId = process.env.EVENT_ID async function main() { - if (!eventId) return + if (!eventId) { + console.warn(`EVENT_ID が設定されてません`) + return + } const hist = await fdb.collection('hist').doc(eventId).get() - if (hist.exists) return + await fdb.collection('yo').doc('current').set({ bookCount: 0 }) + if (hist.exists) { + console.warn(`${eventId} は登録済み`) + return + } await fdb.collection('hist').doc(eventId).set({ lasttime: 0 }) diff --git a/scripts/updateAnisonDb.mjs b/scripts/updateAnisonDb.mjs index 5afc950e..beca749c 100755 --- a/scripts/updateAnisonDb.mjs +++ b/scripts/updateAnisonDb.mjs @@ -8,9 +8,10 @@ const files = ['anison', 'program', 'sf', 'game'] for (const file of files) { await $`wget http://anison.info/data/download/${file}.zip` - await $`unzip ${file}.zip` + await $`unzip -o ${file}.zip` await $`mv -f ${file}.csv ../data` } await cd('../') -await rm('workspace') +await $`rm -rf workspace` +// await rm('workspace') diff --git a/src/imageIo/download.ts b/src/imageIo/download.ts index f309a6ec..64668817 100644 --- a/src/imageIo/download.ts +++ b/src/imageIo/download.ts @@ -1,55 +1,101 @@ -import { error, warn, log } from '../utils/logger' -import { fromStream } from 'file-type' -import fs from 'fs' +import fs, { statSync } from 'fs' import got from 'got' import stream from 'stream' import { promisify } from 'util' -import { imageMin } from './imagemin' +import { CacheFile, CacheFileStat } from '../types' +import { raseTimeout } from '../utils' +import { error, log, warnDesc } from '../utils/logger' +import { jimpHash } from './jimp' import { sharpMin } from './sharp' -import { CacheFile } from '../types' const uuidv4 = require('uuid/v4') const pipeline = promisify(stream.pipeline) -const fileTypeDefault = { ext: 'png', mime: 'image/png' } + +const mimeJpg = { ext: 'jpg', mime: 'image/jpeg' } +const mimePng = { ext: 'png', mime: 'image/png' } +const mimeWebp = { ext: 'webp', mime: 'image/webp' } +const mimeGif = { ext: 'gif', mime: 'image/gif' } +const mimeSvg = { ext: 'svg', mime: 'image/svg+xml' } + +const mimeMap: Record = { + jpeg: mimeJpg, + jpg: mimeJpg, // will unuse + png: mimePng, + webp: mimeWebp, + gif: mimeGif, + svg: mimeSvg, +} +const fileTypeDefault = mimePng +const gotOption = { timeout: { response: 10_000 } } + +export const download = async (url: string, filePath: string) => { + let res: string | boolean = true + try { + const stream = got.stream(url, gotOption) + res = await pipeline(stream, fs.createWriteStream(filePath)) + .catch((e) => { + if (e.name === 'TimeoutError') { + log(`Timeout`, `${url}`) + } else { + error(`DownloadSaveError`, `${url} ${filePath}`) + log(JSON.stringify(e)) + } + return 'SaveError' as const + }) + .then(() => true) + } catch (e) { + warnDesc(`out-DownloadSaveError`, JSON.stringify(e)) + res = 'SaveError' + } + return res +} export const downloadOptimize = async ( url: string ): Promise => { - const uuid = uuidv4() - const filePath = `tmp/${uuid}` - const stream = got.stream(url) - const fileTypePromise = fromStream(stream).catch((e) => { - if (e.message.includes('End-Of-Stream')) { - warn(`EndOfStreamError`, `${url} ${filePath}`) - return - } else { - error(`FileTypeError`, `${url} ${filePath}`) - log(JSON.stringify(e)) - } - - return fileTypeDefault - }) + const stat: CacheFileStat = { + url, + times: { prev: performance.now(), dw: 0, sharp: 0, jimp: 0 }, + size: { before: 0, sharped: 0, sharpReport: 0, jimped: 0 }, + } + + const filePath = `tmp/${uuidv4()}` - const res = await pipeline(stream, fs.createWriteStream(filePath)).catch( - (e) => { - error(`DownloadSaveError`, `${url} ${filePath}`) - log(typeof e) - log(JSON.stringify(e)) - return 'SaveError' as const - } - ) - if (res === 'SaveError') return false - await imageMin(filePath) - const shapeRes = await sharpMin(filePath).catch((e) => { - warn('UnsupportedError', e) + const res = await raseTimeout(download(url, filePath), 10000, false as const) + + if (res === 'SaveError' || !res) return false + stat.times.dw = performance.now() - stat.times.prev + stat.times.prev = performance.now() + stat.size.before = statSync(filePath).size + + const shapeTask = sharpMin(filePath).catch((e) => { + warnDesc('UnsupportedError', e) return false as const }) + const shapeRes = await raseTimeout(shapeTask, 10000, false as const) if (!shapeRes) return false - const { size, height, width } = shapeRes + const { size, height, width, format } = shapeRes + const fileType = mimeMap[format] || fileTypeDefault + + stat.times.sharp = performance.now() - stat.times.prev + stat.times.prev = performance.now() + stat.size.sharped = statSync(filePath).size + stat.size.sharpReport = size + + const jimpTask = jimpHash(filePath, fileType.mime).catch((e) => { + warnDesc('JimpError', e) + return false as const + }) + + const resj = await raseTimeout(jimpTask, 10000, false as const) - const fileType = (await fileTypePromise) || fileTypeDefault + if (!resj) return false + const { hash } = resj + stat.times.jimp = performance.now() - stat.times.prev + stat.times.prev = performance.now() + stat.size.jimped = statSync(filePath).size - return { filePath, fileType, size, height, width } + return { filePath, fileType, size, height, width, hash, stat } } diff --git a/src/imageIo/imagemin.ts b/src/imageIo/imagemin.ts index e5ac0f41..336c648b 100644 --- a/src/imageIo/imagemin.ts +++ b/src/imageIo/imagemin.ts @@ -1,22 +1,27 @@ -import { error } from '../utils/logger' +import { readFile, writeFile } from 'fs/promises' import imagemin from 'imagemin' +import imageminGifsicle from 'imagemin-gifsicle' import imageminMozjpeg from 'imagemin-mozjpeg' import imageminPngquant from 'imagemin-pngquant' -import imageminGifsicle from 'imagemin-gifsicle' +import { error } from '../utils/logger' -// const imageminSvgo = require('imagemin-svgo'); +export async function imageMin(path: string) { + const originalFileBuffer = await readFile(path) -export function imageMin(path: string) { - return imagemin([path], { - destination: 'tmp', - plugins: [ - imageminMozjpeg({ quality: 50 }), - imageminPngquant({ quality: [0.5, 0.6] }), - imageminGifsicle(), - // imageminSvgo(), - ], - }).catch((e) => { - error('ImageMin', e) - return false - }) + const modifiedFileBuffer = await imagemin + .buffer(originalFileBuffer, { + plugins: [ + imageminMozjpeg({ quality: 50 }), + imageminPngquant({ quality: [0.5, 0.6] }), + imageminGifsicle(), + // imageminSvgo(), + ], + }) + .catch((e) => { + error('ImageMin', e) + return false + }) + if (typeof modifiedFileBuffer === 'boolean') return false + await writeFile(path, modifiedFileBuffer) + return true } diff --git a/src/imageIo/jimp.ts b/src/imageIo/jimp.ts new file mode 100644 index 00000000..f47fd4f1 --- /dev/null +++ b/src/imageIo/jimp.ts @@ -0,0 +1,28 @@ +import { compareHashes, read } from 'jimp' +import { warnDesc } from '../utils/logger' + +const QUALITY_MAP: Record = { + 'image/jpeg': 50, + 'image/png': 70, +} + +export async function jimpHash(path: string, mime: string) { + const img = await read(path).catch(() => false as const) + if (img === false) { + warnDesc('read error', path) + + return false + } + + const res = await img.quality(QUALITY_MAP[mime] || 80).write(path) + + return { hash: res.hash(), height: res.getHeight(), width: res.getWidth() } +} + +export async function isUniqueHash(check: string, targets: string[]) { + return targets.every((v) => { + const p = compareHashes(check, v) + const dup = p < 0.15 + return !dup + }) +} diff --git a/src/imageIo/uploadManage.ts b/src/imageIo/uploadManage.ts index 2e13f8e7..03eaf896 100644 --- a/src/imageIo/uploadManage.ts +++ b/src/imageIo/uploadManage.ts @@ -1,27 +1,34 @@ import { unlink } from 'fs/promises' -import { error } from '../utils/logger' import { UploadFile } from '../types/index' +import { error, log } from '../utils/logger' import { uploadStorage } from './../service/firebase' import { CacheFile } from './../types/index' import { downloadOptimize } from './download' +import { isUniqueHash } from './jimp' +import { printImageSetupTimeTable } from '../utils/tableTimeLogger' +const nonFalse = (v: T | false): v is T => v !== false export const uploadByUrlAll = async (urls: string[]) => { const timeId = +new Date() - const downloads: CacheFile[] = [] - for (const url of urls) { - // console.log(url) - const res = await downloadOptimize(url) - if (!res) continue - downloads.push(res) - // console.log(res) - } + log(urls) + log(urls.length) + const downloads: CacheFile[] = ( + await Promise.all(urls.map((url) => downloadOptimize(url))) + ).filter((v) => nonFalse(v)) as CacheFile[] + // tt.print() + printImageSetupTimeTable(downloads.map((v) => v.stat)) const uploads: UploadFile[] = [] - const selects = choiceImage(downloads) + const hashs: string[] = [] for (const [i, file] of selects.entries()) { + if (!(await isUniqueHash(file.hash, hashs))) { + continue + } + hashs.push(file.hash) + const id = `${timeId}_${i}` const res = await uploadStorage(file, id).catch((e) => { error('UploadError', e) @@ -29,7 +36,7 @@ export const uploadByUrlAll = async (urls: string[]) => { }) if (!res) continue uploads.push(res) - if (uploads.length >= 3) break + if (uploads.length >= 5) break } downloads.map((f) => unlink(f.filePath)) diff --git a/src/index.ts b/src/index.ts index e067caa0..e4b5ac77 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,8 @@ import { findSong } from './anisonDb/findSong' -import subscribeIcy from './streaming/icy' import { uploadByUrlAll } from './imageIo/uploadManage' -import { error, info, log, songPrint } from './utils/logger' -import { makeSearchQuery } from './utils/makeSearchWord' import { getImageLinks } from './service/customImageSearch' import { - addHistoryNow, + addHistory, deleteFile, getCurrentPlay, init, @@ -13,10 +10,12 @@ import { } from './service/firebase' import { getAlbum } from './service/itunes' import { getLyricsSafe } from './service/jlyricnet' -// import { spotifySearchSongInfo } from './spotify' import { store } from './state/store' -import { Song } from './types/index' -import { sleep } from './utils' +import subscribeIcy from './streaming/icy' +import { Counts, Song } from './types/index' +import { convertTimeTags, nonEmpty, sleep } from './utils' +import { error, info, log, songPrint } from './utils/logger' +import { makeSearchQuery } from './utils/makeSearchWord' import { anaCounts } from './utils/wordCounts' const url = process.env.URL @@ -27,7 +26,7 @@ store.onExpiredStorageUrl = (urls) => { }) } -const DIRECT_MODE = Boolean(process.env.DIRECT_MODE) +const DIRECT_MODE = Boolean(Number(process.env.DIRECT_MODE)) async function prepareImages(q: string) { const googleImageLinks = await getImageLinks(q) if (DIRECT_MODE) return googleImageLinks @@ -36,36 +35,34 @@ async function prepareImages(q: string) { return uploads.map((u) => u.downloadUrl) } -async function receiveIcy(icy: string) { - const time = Date.now() - info(icy) - - if (store.isDuplicate(icy)) return // 起動時の重複登録を防ぐ - - addHistoryNow(icy) - +export async function icyToSong( + icy: string, + time: number, + prevCounts: Counts = {} +): Promise<[Song, Counts] | false> { const song = findSong(icy) - const additionals: string[] = [song.animeTitle, song.title].filter( - Boolean - ) as string[] - const { wordCounts, counts } = anaCounts(icy, store.counts || {}, additionals) - store.counts = counts - - const imageSearchWord = makeSearchQuery(song) - const imageLinksSync = prepareImages(imageSearchWord) - // const spoinfo = spotifySearchSongInfo(song.title, song.artist) - // if (spoinfo) song.artwork = spoinfo.artwork - - const albumInfosSync = getAlbum(icy) - const lyricsSync = getLyricsSafe(song.title, song.artist) - // const lyric = lyrics ? lyrics.lyric : null + const imageSearchWord = makeSearchQuery(song, Math.random()) const [imageLinks, albumInfos, { creators }] = await Promise.all([ - imageLinksSync, - albumInfosSync, - lyricsSync, + prepareImages(imageSearchWord), + getAlbum(icy), + getLyricsSafe(song.title, song.artist), + ]) + + const additionals: string[] = nonEmpty([ + song.animeTitle, + ...convertTimeTags(song.date), ]) + const { wordCounts, counts } = anaCounts( + [icy, song.artist || '', ...nonEmpty(Object.values(creators))], + prevCounts, + additionals + ) + if (albumInfos?.artworkUrl100) { + imageLinks.push(albumInfos.artworkUrl100) + } + const compSong: Song = { ...song, imageLinks, @@ -75,13 +72,27 @@ async function receiveIcy(icy: string) { time, imageSearchWord, } + return [compSong, counts] +} - songPrint(compSong) - saveMusic(compSong) +async function receiveIcy(icy: string) { + info(icy) + + if (store.isDuplicate(icy)) return false // 起動時の重複登録を防ぐ + + const time = Date.now() + const res = await icyToSong(icy, time, store.counts) + if (!res) return + const [song, counts] = res + store.counts = counts + songPrint(song) + saveMusic(song) + addHistory(icy, time) } async function main() { const res = await getCurrentPlay() + store.counts = (await init()).counts store.setFirstIcy(res.icy) if (!url) { diff --git a/src/service/customImageSearch.ts b/src/service/customImageSearch.ts index 0c060fc8..975e55fd 100644 --- a/src/service/customImageSearch.ts +++ b/src/service/customImageSearch.ts @@ -17,13 +17,20 @@ export const getImage = (q: string) => { }) } -const blackList = ['static.wikia.nocookie.net', 'amazon.com'] +const blackList = [ + 'static.wikia.nocookie.net', + 'amazon.com', + 'fril.jp', + 'shopping.yahoo.co.jp', + 'static.mercdn.net', + 'auctions.c.yimg.jp', +] const white = (v: string) => !blackList.some((blink) => v.includes(blink)) export const getImageLinks = async (q: string) => { // マイナス検索を省く - const res = await getImage(q.replace(/-/g, ' ')).catch((e) => { + const res = await getImage(q).catch((e) => { error('GetImageError', q) log(e) return false as const diff --git a/src/service/emol.ts b/src/service/emol.ts new file mode 100644 index 00000000..6a766273 --- /dev/null +++ b/src/service/emol.ts @@ -0,0 +1,25 @@ +import { emojify } from 'jptext-to-emoji' + +export const makeEmol = async (lyric: string | null) => { + if (lyric === null) return { text: '' } + const text = ( + await Promise.all( + lyric + .split('\n') + .map(async (line) => + ( + await Promise.all( + line + .split(/[ \u3000]/) + .map((word) => + word ? emojify(word, { onlyEmoji: false }) : '' + ) + ) + ).join(' ') + ) + ) + ) + .filter(Boolean) + .join('\n') + return { text } +} diff --git a/src/service/firebase.ts b/src/service/firebase.ts index 76f2ad7e..5d7d9841 100644 --- a/src/service/firebase.ts +++ b/src/service/firebase.ts @@ -1,11 +1,19 @@ import admin from 'firebase-admin' -import { Count, Counts, HistTop, Song } from '../types/index' -import { error, info, log, warn } from '../utils/logger' -import { chunk } from '../utils' +import { Count, Counts, HistoryRaw, HistTop, Song } from '../types/index' +import { chunk, textNormalize } from '../utils' +import { error, log, warnDesc } from '../utils/logger' import { CacheFile } from './../types/index' export { admin } +const P_SONGS = 'songs' +const P_SONG = 'song' +// const P_EMOL = 'emol' +const P_HIST = 'hist' +const P_YO = 'yo' +const P_COUNTS = 'counts' +const P_CURRENT = 'current' + const { SERVICE_ACCOUNT_FILE_PATH, EVENT_ID } = process.env if (!SERVICE_ACCOUNT_FILE_PATH || !EVENT_ID) { error('SetupErorr', 'empty envvar SERVICE_ACCOUNT_FILE_PATH or EVENT_ID') @@ -18,7 +26,10 @@ const credential = admin.credential.cert(serviceAccount) admin.initializeApp({ credential }) export const fdb = admin.firestore() -export const bucket = admin.storage().bucket('rekka-haikei.appspot.com') +const storageId = process.env.STORAGE_ID || '' +const storageUrl = process.env.STORAGE_URL || '' +const bucketUrl = storageUrl + storageId +export const bucket = admin.storage().bucket(storageId) type Obj = { [key: string]: number | string | object } const removeUndefined = (obj: Obj) => { @@ -36,34 +47,36 @@ export const init = async () => { } export const getCurrentPlay = async () => { - const res = await fdb.collection('song').doc(EVENT_ID).get() + const res = await fdb.collection(P_SONG).doc(EVENT_ID).get() return res.data() || { icy: '' } } const saveSong = (song: Song) => { fdb - .collection('song') + .collection(P_SONG) .doc(EVENT_ID) .set({ ...removeUndefined(song), }) } -// const saveLyric = (text) => { -// // console.log(lyric) -// fdb.collection('song').doc('lyric').set({ text }) -// } export const saveMusic = (song: Song) => { saveSong(song) - // if (lyric) { - // saveLyric(lyric) - // } else { - // saveLyric('no lyric') - // } } -export const histSongsRef = () => - fdb.collection('hist').doc(EVENT_ID).collection('songs') +export const histSongsRef = (eid = EVENT_ID) => + fdb.collection(P_HIST).doc(eid).collection(P_SONGS) +export const bookCountDocRef = () => fdb.collection(P_YO).doc(P_CURRENT) + +export const loadHistEventSongs = async (eid: string) => { + const snaps = await histSongsRef(eid).orderBy('time', 'asc').get() + const lines: HistoryRaw[] = [] + snaps.docs.forEach((doc) => { + const d = doc.data() as HistoryRaw + lines.push(d) + }) + return lines +} export const loadHistoryTimes = async () => { const histSnaps = await histSongsRef() @@ -75,13 +88,19 @@ export const loadHistoryTimes = async () => { return times } -export const addHistory = (title: string, time: number | null) => { - return histSongsRef().doc(String(time)).set({ title, time, n: null }) +export const addHistory = async ( + title: string, + time: number | null, + n: null | number = null +) => { + await bookCountDocRef().update({ bookCount: 0 }) + + return await histSongsRef().doc(String(time)).set({ title, time, n, b: 0 }) } export const loadAllIcy = async () => { const snap = await fdb - .collection('hist') + .collection(P_HIST) .doc(EVENT_ID) .collection('songs') .get() @@ -90,15 +109,17 @@ export const loadAllIcy = async () => { export const loadWordCounts = async () => { const snap = await fdb - .collection('hist') + .collection(P_HIST) .doc(EVENT_ID) - .collection('counts') + .collection(P_COUNTS) .get() - const hist = await fdb.collection('hist').doc(EVENT_ID).get() + const hist = await fdb.collection(P_HIST).doc(EVENT_ID).get() const lasttime = (hist.exists && (hist.data() as HistTop).lasttime) || 0 const counts: Counts = {} - snap.docs.forEach((v) => (counts[v.data().word] = v.data().count)) + snap.docs.forEach( + (v) => (counts[textNormalize(v.data().word)] = v.data().count) + ) return { counts, lasttime } } @@ -112,7 +133,7 @@ export const setupCount = async (counts: Counts, lasttime: number) => { ents.forEach(([k, v]) => { if (!k || !v) return batch.set( - fdb.collection('hist').doc(EVENT_ID).collection('counts').doc(), + fdb.collection(P_HIST).doc(EVENT_ID).collection(P_COUNTS).doc(), { word: k, count: v, @@ -121,14 +142,14 @@ export const setupCount = async (counts: Counts, lasttime: number) => { }) await batch.commit() } - fdb.collection('hist').doc(EVENT_ID).set({ lasttime }, { merge: true }) + fdb.collection(P_HIST).doc(EVENT_ID).set({ lasttime }, { merge: true }) } export const setupHistN500 = async (ns: Record) => { const batch = fdb.batch() for (const [id, n] of Object.entries(ns)) { batch.update( - fdb.collection('hist').doc(EVENT_ID).collection('song').doc(id), + fdb.collection(P_HIST).doc(EVENT_ID).collection('song').doc(id), { n } ) } @@ -147,14 +168,47 @@ export const setupHistN = async (ns: Record) => { } } +export const countupWordsEntry = async (words: Record) => { + const batch = fdb.batch() + const check: Record = {} + for (const ws of chunk(Object.entries(words), 10)) { + const docs = await fdb + .collection(P_HIST) + .doc(EVENT_ID) + .collection(P_COUNTS) + .where( + 'word', + 'in', + ws.map((v) => v[0]) + ) + .get() + docs.forEach((doc) => { + const wk = (doc.data() as Count).word + check[wk] = true + batch.update(doc.ref, { + count: admin.firestore.FieldValue.increment(words[wk]), + }) + }) + } + Object.entries(words).forEach(([word, count]) => { + if (check[word]) return + batch.set(fdb.collection(P_HIST).doc(EVENT_ID).collection(P_COUNTS).doc(), { + word, + count, + }) + }) + + await batch.commit() +} + export const countupWords = async (words: string[]) => { const batch = fdb.batch() const check: Record = {} for (const ws of chunk(words, 10)) { const docs = await fdb - .collection('hist') + .collection(P_HIST) .doc(EVENT_ID) - .collection('counts') + .collection(P_COUNTS) .where('word', 'in', ws) .get() docs.forEach((doc) => { @@ -164,12 +218,12 @@ export const countupWords = async (words: string[]) => { } words.forEach((word) => { if (check[word]) return - batch.set(fdb.collection('hist').doc(EVENT_ID).collection('counts').doc(), { + batch.set(fdb.collection(P_HIST).doc(EVENT_ID).collection(P_COUNTS).doc(), { word, count: 1, }) }) - batch.update(fdb.collection('hist').doc(EVENT_ID), { lasttime: +new Date() }) + batch.update(fdb.collection(P_HIST).doc(EVENT_ID), { lasttime: +new Date() }) await batch.commit() } @@ -178,7 +232,7 @@ export const countupWords = async (words: string[]) => { // const check = {} // for (const ws of chunk(Object.keys(words), 10)) { // const docs = await fdb -// .collection('hist') +// .collection(P_HIST) // .doc(EVENT_ID) // .collection('counts') // .where('word', 'in', ws) @@ -192,24 +246,24 @@ export const countupWords = async (words: string[]) => { // } // Object.keys(words).forEach((word) => { // if (check[word]) return -// batch.set(fdb.collection('hist').doc(EVENT_ID).collection('counts').doc(), { +// batch.set(fdb.collection(P_HIST).doc(EVENT_ID).collection('counts').doc(), { // word, // count: 1, // }) // }) -// batch.update(fdb.collection('hist').doc(EVENT_ID), { lasttime: +new Date() }) +// batch.update(fdb.collection(P_HIST).doc(EVENT_ID), { lasttime: +new Date() }) // await batch.commit() // } export const deleteFile = (path: string) => { - info(`delete op: ${path}`) + // info(`delete op: ${path}`) return bucket .file(path) .delete() .catch((e) => { if (e.code === 404) { - warn(`NoDeleteTargetWarn`, `no delete target ${path}`) + warnDesc(`NoDeleteTargetWarn`, `no delete target ${path}`) return } error(`DeleteFileError`, path) @@ -228,8 +282,32 @@ export const uploadStorage = async (file: CacheFile, id: string) => { predefinedAcl: 'publicRead', }) - const downloadUrl = `${process.env.STRAGE_URL}${destination}` + const downloadUrl = `${bucketUrl}/${destination}` return { downloadUrl, path: destination, tmpFilePath } } -export const addHistoryNow = (title: string) => addHistory(title, +new Date()) +const distPath = `archive` + +type StoragePaths = { + url: string + localFile: string + destination: string + filename: string +} +export const archiveUrl = (eid: string): StoragePaths => { + const localFile = `data/archvie_${eid}.csv` + const filename = `hist_${eid}.csv` + const destination = `${distPath}/${filename}` + const url = `${bucketUrl}/${destination}` + return { url, destination, filename, localFile } +} +export const uploadStorageArchive = async ({ + localFile, + destination, +}: StoragePaths) => { + await bucket.upload(localFile, { + contentType: 'text/csv', + destination, + predefinedAcl: 'publicRead', + }) +} diff --git a/src/service/jlyricnet.ts b/src/service/jlyricnet.ts index 2fe6498d..e6165f47 100644 --- a/src/service/jlyricnet.ts +++ b/src/service/jlyricnet.ts @@ -1,5 +1,5 @@ import axios from 'axios' -import cheerio from 'cheerio' +import { load } from 'cheerio' function searchJlyrics(title: string, artist: string | null) { const params: Record = { @@ -25,12 +25,12 @@ function searchJlyrics(title: string, artist: string | null) { // } function scrapeFirstResult(html: string) { - const $ = cheerio.load(html) + const $ = load(html) return $('#mnb a').attr('href') } function scrapeLyrics(html: string) { - const $ = cheerio.load(html) + const $ = load(html) $('#Lyric').find('br').replaceWith('\n') $('.lbdy').find('br').replaceWith('\n') @@ -55,7 +55,7 @@ function scrapeLyrics(html: string) { export async function getLyricsSafe(title?: string, artist?: string) { const res = await getLyrics(title, artist) - if (!res) return { creators: {}, lyrics: null } + if (!res) return { creators: {}, lyric: null } return res } export async function getLyrics(title?: string, artist?: string) { diff --git a/src/service/musixmatch.ts b/src/service/musixmatch.ts index 4f24e794..2d1b37c6 100644 --- a/src/service/musixmatch.ts +++ b/src/service/musixmatch.ts @@ -1,5 +1,5 @@ -import { error, log } from './logger' import axios from 'axios' +import { log, error } from '../utils/logger' const apikey = process.env.MUSIXMATCH_API_KEY diff --git a/src/state/store.ts b/src/state/store.ts index 7f383521..9960c6ee 100644 --- a/src/state/store.ts +++ b/src/state/store.ts @@ -1,7 +1,6 @@ -import { UploadFile } from './../types/index' -import { Counts } from '../types/index' +import { Counts, UploadFile } from '../types' -class Store { +export class Store { counts: Counts isFirst: boolean firstIcy: string diff --git a/src/streaming/icy.ts b/src/streaming/icy.ts index 838bab0e..b84b1dc0 100644 --- a/src/streaming/icy.ts +++ b/src/streaming/icy.ts @@ -1,4 +1,3 @@ -import { log } from '../utils/logger' import { sjisToUtf8 } from '../utils' const icy = require('icy') @@ -22,8 +21,7 @@ function subscribeIcy( // connect to the remote stream icy.get(url, (res: IcyRes) => { // log the HTTP response headers - log() - res.headers + // log(res.headers) // log any "metadata" events that happen res.on('metadata', (metadata) => { diff --git a/src/tests/convertTimeTags.test.ts b/src/tests/convertTimeTags.test.ts new file mode 100644 index 00000000..001fa3a0 --- /dev/null +++ b/src/tests/convertTimeTags.test.ts @@ -0,0 +1,40 @@ +import { convertTimeTags } from '../utils' + +test('convertTimeTags', () => { + expect(convertTimeTags('2000-01-01')).toMatchInlineSnapshot(` +Array [ + "[2000]", + "[2000-01]", + "[2000-S1]", +] +`) + expect(convertTimeTags('2010-05-20')).toMatchInlineSnapshot(` +Array [ + "[2010]", + "[2010-05]", + "[2010-S2]", +] +`) + const range = (n: number) => [...Array(n).keys()] + + const res = range(12).map((i) => + convertTimeTags(`2000-${String(i + 1).padStart(2, '0')}-01`) + ) + + expect(res.map((v) => v[2])).toMatchInlineSnapshot(` +Array [ + "[2000-S1]", + "[2000-S1]", + "[2000-S1]", + "[2000-S2]", + "[2000-S2]", + "[2000-S2]", + "[2000-S3]", + "[2000-S3]", + "[2000-S3]", + "[2000-S4]", + "[2000-S4]", + "[2000-S4]", +] +`) +}) diff --git a/src/tests/imageIO.test.ts b/src/tests/imageIO.test.ts index fb2d2e85..15f1059d 100644 --- a/src/tests/imageIO.test.ts +++ b/src/tests/imageIO.test.ts @@ -1,4 +1,5 @@ import { choiceImage } from '../imageIo/uploadManage' +import { CacheFile } from '../types' test('choiceImage', () => { const basePng = { @@ -6,8 +7,9 @@ test('choiceImage', () => { size: 100_000, height: 700, width: 800, + hash: 'ffffff', } - const downloads = [ + const downloads: CacheFile[] = [ { ...basePng, filePath: 'will skipped', @@ -50,6 +52,7 @@ Array [ "ext": "png", "mime": "image/png", }, + "hash": "ffffff", "height": 700, "size": 100000, "width": 800, @@ -60,6 +63,7 @@ Array [ "ext": "png", "mime": "image/png", }, + "hash": "ffffff", "height": 1000, "size": 100000, "width": 30, @@ -70,6 +74,7 @@ Array [ "ext": "jpg", "mime": "image/jpeg", }, + "hash": "ffffff", "height": 700, "size": 100000, "width": 800, @@ -80,6 +85,7 @@ Array [ "ext": "png", "mime": "image/png", }, + "hash": "ffffff", "height": 500, "size": 100000, "width": 500, @@ -90,6 +96,7 @@ Array [ "ext": "png", "mime": "image/png", }, + "hash": "ffffff", "height": 700, "size": 555117, "width": 800, @@ -100,6 +107,7 @@ Array [ "ext": "png", "mime": "image/png", }, + "hash": "ffffff", "height": 30, "size": 100000, "width": 80, diff --git a/src/tests/makeSearchQuery.test.ts b/src/tests/makeSearchQuery.test.ts index 3622f580..a3b50333 100644 --- a/src/tests/makeSearchQuery.test.ts +++ b/src/tests/makeSearchQuery.test.ts @@ -1,60 +1,77 @@ import { makeSearchQuery } from '../utils/makeSearchWord' import { pickCharaIcy } from '../utils' +const seed = 0.123456789 describe('makeSearchQuery', () => { test('lost animeTitle', () => { expect( - makeSearchQuery({ - artist: '蒼井翔太', - title: 'give me ? me', - icy: '蒼井翔太 - give me ? me', - }) + makeSearchQuery( + { + artist: '蒼井翔太', + title: 'give me ? me', + icy: '蒼井翔太 - give me ? me', + }, + + seed + ) ).toMatchInlineSnapshot( - `"蒼井翔太 give me ? me (名シーン OR キャラ) (キャプ画像 OR 壁紙) かわいい"` + `"(蒼井翔太 OR give me ? me) ネタ画像 OR 壁紙 OR 作画 OR 5話"` ) }) test('lost animeTitle and detect chara', () => { expect( - makeSearchQuery({ - icy: 'せーので跳べって言ってんの! - 本城香澄(CV:岩橋由佳)', - }) + makeSearchQuery( + { + icy: 'せーので跳べって言ってんの! - 本城香澄(CV:岩橋由佳)', + }, + + seed + ) ).toMatchInlineSnapshot( - `"本城香澄 (名シーン OR キャラ) (キャプ画像 OR 壁紙) かわいい"` + `"本城香澄 (名シーン OR キャラ) (キャプ画像 OR 壁紙)"` ) }) test('has animeTitle', () => { expect( - makeSearchQuery({ - artist: 'artist', - title: 'title', - animeTitle: 'アニメタイトルあり', - icy: 'artist - title', - }) + makeSearchQuery( + { + artist: 'artist', + title: 'title', + animeTitle: 'アニメタイトルあり', + icy: 'artist - title', + }, + seed + ) ).toMatchInlineSnapshot(`"アニメタイトルあり"`) }) test('has animeTitle and category anime', () => { expect( - makeSearchQuery({ - artist: 'artist', - title: 'title', - animeTitle: 'アニメタイトルあり', - category: 'ほにゃららアニメ', - icy: 'artist - title', - }) - ).toMatchInlineSnapshot( - `"アニメタイトルあり AND (アニメ OR meme OR キャプ画 OR キャラ OR かわいい)"` - ) +makeSearchQuery( +{ + artist: 'artist', + title: 'title', + animeTitle: 'アニメタイトルあり', + category: 'ほにゃららアニメ', + icy: 'artist - title' }, + + +seed)). + +toMatchInlineSnapshot(`"アニメタイトルあり アニメ -公式 AND (ネタ画像 OR 壁紙 OR 作画 OR 5話)"`) }) test('has animeTitle and category game', () => { expect( - makeSearchQuery({ - title: '飯島真理', - artist: '飯島真理', - category: 'ゲーム', - gameType: 'シューティング', - animeTitle: '超時空要塞マクロス 愛・おぼえていますか', - icy: '飯島真理 - 愛・おぼえていますか', - }) + makeSearchQuery( + { + title: '飯島真理', + artist: '飯島真理', + category: 'ゲーム', + gameType: 'シューティング', + animeTitle: '超時空要塞マクロス 愛・おぼえていますか', + icy: '飯島真理 - 愛・おぼえていますか', + }, + seed + ) ).toMatchInlineSnapshot( `"超時空要塞マクロス 愛・おぼえていますか AND (ゲーム)"` ) diff --git a/src/tests/normalize.test.ts b/src/tests/normalize.test.ts new file mode 100644 index 00000000..fde30b9d --- /dev/null +++ b/src/tests/normalize.test.ts @@ -0,0 +1,11 @@ +import { textNormalize } from '../utils' +test('textNormalize', () => { + const generalParret = textNormalize('[【test】]') + expect(generalParret).toMatchInlineSnapshot(`"[(test)]"`) + + const wided = textNormalize('TEstテストT !?') + expect(wided).toMatchInlineSnapshot(`"testテストt !?"`) + + const multiple = textNormalize('〜スヤスヤ生活〜') + expect(multiple).toMatchInlineSnapshot(`"~スヤスヤ生活~"`) +}) diff --git a/src/tests/parseWords.test.ts b/src/tests/parseWords.test.ts index dc35a72a..250efeb3 100644 --- a/src/tests/parseWords.test.ts +++ b/src/tests/parseWords.test.ts @@ -14,6 +14,28 @@ Array [ "沼倉愛美", "Ray of bullet", ] +`) + + expect(parseCountWords([q, q])).toMatchInlineSnapshot(` +Array [ + "イリス", + "フレイア", + "日高里菜", + "物部深月", + "沼倉愛美", + "Ray of bullet", +] +`) + + expect(parseCountWords([q, ''])).toMatchInlineSnapshot(` +Array [ + "イリス", + "フレイア", + "日高里菜", + "物部深月", + "沼倉愛美", + "Ray of bullet", +] `) q = @@ -137,6 +159,26 @@ Array [ "めぐみん", "ダクネス", ] +`) + + q = + '劇団ひととせ(桜木ひな子(cv:m・a・o)/夏川くいな(cv:富田美憂)/柊真雪(cv:小倉唯)/萩野千秋(cv:東城日沙子)/中島ゆあ(cv:高野麻里佳))' + expect(parseCountWords(q)).toMatchInlineSnapshot(` +Array [ + "劇団ひととせ", + "桜木ひな子", + "m", + "a", + "o", + "夏川くいな", + "富田美憂", + "柊真雪", + "小倉唯", + "萩野千秋", + "東城日沙子", + "中島ゆあ", + "高野麻里佳", +] `) }) diff --git a/src/tests/random.test.ts b/src/tests/random.test.ts new file mode 100644 index 00000000..4830be41 --- /dev/null +++ b/src/tests/random.test.ts @@ -0,0 +1,28 @@ +import { shuffle } from '../utils/random' + +describe('shuffle', () => { + it('shuffle', () => { + const a = [1, 2, 3, 4, 5] + const b = shuffle(a, 'a') + const c = shuffle(a, 'b') + + expect(b).toMatchInlineSnapshot(` +Array [ + 3, + 2, + 4, + 5, + 1, +] +`) + expect(c).toMatchInlineSnapshot(` +Array [ + 3, + 4, + 2, + 1, + 5, +] +`) + }) +}) diff --git a/src/types/index.ts b/src/types/index.ts index bb4c984c..f4af3d6c 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -70,6 +70,8 @@ export type Song = Partial & (SongFull | SongMiss) export type HistoryRaw = { title: string time: number + n?: number + b?: number } export type HistTop = { @@ -88,11 +90,27 @@ export type Count = { export type CacheFile = { filePath: string - fileType: { - ext: string - mime: string - } + fileType: { ext: string; mime: string } size: number width: number height: number + hash: string + stat: CacheFileStat +} + +export type CacheFileStat = { + url: string + times: { + prev: number + dw: number + sharp: number + jimp: number + } + size: { + before: number + sharped: number + sharpReport: number + jimped: number + } } +export type Emol = { text: string } diff --git a/src/utils/index.ts b/src/utils/index.ts index a5ae8498..037ee636 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,6 @@ import iconv from 'iconv-lite' +import toWideKatakana from 'jaco/fn/toWideKatakana' +import toNarrowAlphanumeric from 'jaco/fn/toNarrowAlphanumeric' export const isHit = (long: string, short: string) => long.indexOf(short) >= 0 @@ -9,14 +11,20 @@ export const sleep = (msec: number) => new Promise((rs) => setTimeout(rs, msec)) // frontend と同じ必要あり export function textNormalize(s: string) { - return s - .trim() - .toLowerCase() - .replace(' ', ' ') - .replace(/[(【「[]/, '(') - .replace(/[)】」\]]/, ')') - .replace('!', '!') - .replace('?', '?') + return toNarrowAlphanumeric( + toWideKatakana( + s + .trim() + .toLowerCase() + // eslint-disable-next-line no-irregular-whitespace + .replace(/ /g, ' ') + .replace(/[(【「[]/g, '(') + .replace(/[)】」\]]/g, ')') + .replace(/[〜~]/g, '~') + .replace(/!/g, '!') + .replace(/?/g, '?') + ) + ) } const SP = /CV ?|[([([](CV)? ?|[〈〉()[]()【】[\]、・:.]| x | - |feat\.?/gi @@ -24,25 +32,12 @@ const isTagWord = (v: string) => !!v && v !== '-' const trimWord = (v: string) => v .trim() - .replace(/^[.::&&]/, '') + .replace(/^[.::&&/]/, '') .trim() const parseWords = (s: string) => s.replace(SP, ',').split(',').map(trimWord).filter(isTagWord) -export const shuffle = (arr: T[]): T[] => { - const a = [...arr] - for (let i = a.length - 1; i > 0; i--) { - const r = Math.floor(Math.random() * (i + 1)) - const tmp = a[i] - a[i] = a[r] - a[r] = tmp - } - return a -} - -export const sample = (arr: T[], n = 1) => shuffle(arr).slice(0, n) - export const uniq = (arr: T[]) => Array.from(new Set(arr)) export const uniqo = (arr: string[]) => { const obj: Record = {} @@ -58,8 +53,13 @@ export const uniqo = (arr: string[]) => { return Object.values(obj) } -export const parseCountWords = (icy: string, additional: string[] = []) => { - const words = parseWords(icy) +export const parseCountWords = ( + icys: string | string[], + additional: string[] = [] +) => { + const words = (Array.isArray(icys) ? icys : [icys]) + .map((icy) => parseWords(icy)) + .flat() const entries = uniqo([...additional, ...words]) return entries @@ -97,3 +97,22 @@ export const pickChara = (s: string): string[] => { export const flatten = (arr: T[][]) => arr.reduce((a, b) => a.concat(b), []) + +export const nonEmpty = (strs: (string | undefined)[]) => + strs.filter(Boolean) as string[] + +// YYYY-MM-DD -> [YYYY, YYYY-MM, YYYY-SX] +export const convertTimeTags = (songDate?: string) => { + if (!songDate) return [] + const [y, m] = songDate.split('-') + return [`[${y}]`, `[${y}-${m}]`, `[${y}-S${Math.floor((+m - 1) / 3) + 1}]`] +} + +export const raseTimeout = (task: Promise, msec: number, alt: U) => { + const timeout = async () => { + await sleep(msec) + return alt + } + + return Promise.race([task, timeout()]) +} diff --git a/src/utils/logger.ts b/src/utils/logger.ts index cf26575f..53275b3f 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -1,15 +1,19 @@ /* eslint-disable no-console */ import chalk from 'chalk' +export const logLine = (str: string) => process.stdout.write(chalk.gray(str)) + export const log = console.log export const info = (str: string | number | object) => console.log(chalk.gray(str)) export const error = (key: string, description: string) => { console.error(chalk.red(`${key}: ${description}`)) } +export const warn = (str: string | number | object) => + console.warn(chalk.yellow(str)) -export const warn = (key: string, description: string) => { - console.warn(chalk.red(`${key}: ${description}`)) +export const warnDesc = (key: string, description: string) => { + console.warn(chalk.yellow(`${key}: ${description}`)) } // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/src/utils/makeSearchWord.ts b/src/utils/makeSearchWord.ts index ef1a1a24..e7e7aa45 100644 --- a/src/utils/makeSearchWord.ts +++ b/src/utils/makeSearchWord.ts @@ -1,28 +1,69 @@ -import { getSyncConf } from './syncConf' -import { SongSeed } from '../types/index' import { pickCharaIcy } from '.' +import { SongSeed } from '../types/index' +import { getSyncConf } from './syncConf' +import { shuffle } from './random' + +/* anison DB から曲情報を取れた場合アニメタイトル、カテゴリ(ゲーム,アニメ,SF,映画)などを使用できる */ -const animeExt = ['アニメ', 'meme', 'キャプ画', 'キャラ', 'かわいい'].join( - ' OR ' -) -const gameExt = ['ゲーム'].join(' OR ') // 実験 -const icyOpt = `(名シーン OR キャラ) (キャプ画像 OR 壁紙) かわいい` +/* ランダムに追加する */ +const animeExt = [ + 'キービジュアル', + 'キャプ画', + 'イラストレーター', + 'かわいい', + 'グッズ', + 'ネタ画像', + '壁紙', + '原作', + '名シーン', + '作画', + 'wallpaper', + '敵', + 'ボス', + 'ヒット', + '似てる', + 'ゲーム', +] +const range = (n: number) => [...Array(n).keys()] +const animeExtEp = [...[...range(8)].map((i) => `${i}話`), '映画'] +/* アニメカテゴリ場合は↓を検索クエリに追加する */ +const animeExtBase = 'アニメ -公式' -export function makeSearchQuery(song: SongSeed): string { +/* ゲームカテゴリ場合は↓を検索クエリに追加する */ +const gameExt = ['ゲーム'].join(' OR ') + +/* アニメ情報が取れなかった曲は icy に↓を検索クエリに追加する */ +const icyOpt = `(名シーン OR キャラ) (キャプ画像 OR 壁紙)` + +export function makeSearchQuery(song: SongSeed, seed: number): string { const { icy, category, animeTitle } = song if (getSyncConf().simpleSearch) return icy.replace(/-/g, ' ') + const r = shuffle(animeExt, `${seed}`) + const rEp = shuffle(animeExtEp, `${seed}`) + const opts = [r[0], r[1], r[2], rEp[0]] + + if (icy === '') { + return ( + (process.env.EMPTY_MODE_SEARCH_WORD || 'アニメ') + + ` AND (${opts.join(' OR ')})` + ) + } if (!animeTitle) { const charaName = pickCharaIcy(icy).join(' ') if (charaName) return `${charaName} ${icyOpt}` - return icy.replace(' - ', ' ') + ` ${icyOpt}` + return ( + `(${icy + .split(' - ') + .map((v) => v.substring(0, 16)) + .join(' OR ')})` + ` ${opts.join(' OR ')}` + ) } if (!category) return animeTitle if (category.includes('アニメ')) { - // 実験 - return `${animeTitle} AND (${animeExt})` + return `${animeTitle} ${animeExtBase} AND (${opts.join(' OR ')})` } if (category.includes('ゲーム')) { return `${animeTitle} AND (${gameExt})` diff --git a/src/utils/random.ts b/src/utils/random.ts new file mode 100644 index 00000000..1eb44aa9 --- /dev/null +++ b/src/utils/random.ts @@ -0,0 +1,11 @@ +import crypto from 'crypto' + +const random = (seed: string) => + crypto.createHash('sha256').update(seed).digest().readUInt32LE() + +export const shuffle = (a: T[], seed: string) => { + return a + .map((v, i) => ({ v, r: random(seed + `${i}`) })) + .sort((a, b) => a.r - b.r) + .map(({ v }) => v) +} diff --git a/src/utils/tableTimeLogger.ts b/src/utils/tableTimeLogger.ts new file mode 100644 index 00000000..fab0e047 --- /dev/null +++ b/src/utils/tableTimeLogger.ts @@ -0,0 +1,51 @@ +import { CacheFileStat } from '../types' +import { log } from './logger' + +import chalk from 'chalk' + +export type ImageSetupTimeTable = ReturnType +const decoTime = (ms: number) => { + const s = `${Math.floor(ms)}ms`.padStart(8) + if (ms < 1000) { + return chalk.gray(s) + } else { + return chalk.yellow(s) + } +} +export const printImageSetupTimeTable = (status: CacheFileStat[]) => { + log('') + log( + [ + 'url'.padStart(30), + 'dw'.padStart(8), + 'sharp'.padStart(8), + 'jimp'.padStart(8), + ].join(', ') + ) + const res = status + .map((item) => { + const cols = [item.times.dw, item.times.sharp, item.times.jimp] + const times = cols + .map((ms) => (ms ? decoTime(ms) : '-'.padStart(8))) + .join(', ') + const sizes = `${printSize(item.size.before)} => ${printSize( + item.size.sharpReport + )} => ${printSize(item.size.sharped)} => ${printSize(item.size.jimped)}` + return `${printId(item.url) + .substring(0, 30) + .padStart(30)}, ${times}, ${sizes}` + }) + .join('\n') + log(res) +} +const printSize = (size: number) => { + return chalk.gray(`${(size / 1024).toFixed(1)}KB`) +} +const printId = (str: string) => { + if (str.length <= 30) return str + return ( + str.substring(0, 20 - 5) + + ' ... ' + + str.substring(str.length - 10, str.length) + ) +} diff --git a/src/utils/wikipedia.ts b/src/utils/wikipedia.ts new file mode 100644 index 00000000..f1c665d8 --- /dev/null +++ b/src/utils/wikipedia.ts @@ -0,0 +1,50 @@ +import axios from 'axios' +import { load } from 'cheerio' + +const qp = { + format: 'json', + action: 'query', +} + +const url = 'https://ja.wikipedia.org/w/api.php' +export const makePageUrl = (pageId: string | number) => + `${url}/?${new URLSearchParams({ + ...qp, + prop: 'revisions', + rvprop: 'content', + rvparse: '', + pageids: String(pageId), + }).toString()}` +export const makeSearchUrl = (title: string) => + `${url}/?${new URLSearchParams({ + ...qp, + list: 'search', + srsearch: title, + }).toString()}` + +type SearchResponse = { query: { search: { pageId: number }[] } } + +type PageResponse = { + query: { + pages: { + [pageId: number | string]: { + pageid: number + ns: 0 + title: string + revisions: { '*': string }[] + } + } + } +} + +export const searchWikipedia = async (title: string) => { + const res = await axios.get(makeSearchUrl(title)) + if (res.data.query.search.length === 0) return null + const { pageId } = res.data.query.search[0] + + const res2 = await axios.get(makePageUrl(pageId)) + const html = res2.data.query.pages[pageId].revisions[0]['*'] + + const $ = load(html) + $ +} diff --git a/src/utils/wordCounts.ts b/src/utils/wordCounts.ts index 03404cf5..6c94faf9 100644 --- a/src/utils/wordCounts.ts +++ b/src/utils/wordCounts.ts @@ -16,15 +16,17 @@ export function saveCountsFile(counts: Counts, time = Date.now()) { } export function anaCounts( - icy: string, + icys: string[], countsOld: Counts, - additionals: string[] = [] + additionals: string[] = [], + write = false ) { - const entries = parseCountWords(icy, additionals) + const entries = parseCountWords(icys, additionals) const counts = { ...countsOld } const entriesNoms = entries.map(textNormalize) - countupWords(entriesNoms) + if (write) countupWords(entriesNoms) + entriesNoms.forEach((v) => { counts[v] = (countsOld[v] || 0) + 1 }) diff --git a/yarn.lock b/yarn.lock index 1b100086..31384d89 100644 --- a/yarn.lock +++ b/yarn.lock @@ -419,6 +419,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/runtime@^7.21.0": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/template@^7.14.5", "@babel/template@^7.3.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" @@ -489,22 +496,127 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== - dependencies: - "@cspotcode/source-map-consumer" "0.8.0" - -"@eslint/eslintrc@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" - integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== + +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== + +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== + +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== + +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== + +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== + +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== + +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== + +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== + +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== + +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== + +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== + +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== + +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== + +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== + +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== + +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== + +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== + +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== + +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== + +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== + +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== + +"@eslint/eslintrc@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.2.tgz#4989b9e8c0216747ee7cca314ae73791bb281aae" + integrity sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -521,48 +633,74 @@ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.3.tgz#3f10514786aad846d74cd63cb693556309918f4b" integrity sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw== +"@firebase/app-types@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f" + integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg== + "@firebase/auth-interop-types@0.1.6": version "0.1.6" resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz#5ce13fc1c527ad36f1bb1322c4492680a6cf4964" integrity sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g== -"@firebase/component@0.5.5": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.5.tgz#849ccf7cbf0398a43058f274ffcd43620ae9521f" - integrity sha512-L41SdS/4a164jx2iGfakJgaBUPPBI3DI+RrUlmh3oHSUljTeCwfj/Nhcv3S7e2lyXsGFJtAyepfPUx4IQ05crw== +"@firebase/component@0.5.13": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.13.tgz#65a382e83bddd109380c9aa1f280791b1b4567c4" + integrity sha512-hxhJtpD8Ppf/VU2Rlos6KFCEV77TGIGD5bJlkPK1+B/WUe0mC6dTjW7KhZtXTc+qRBp9nFHWcsIORnT8liHP9w== dependencies: - "@firebase/util" "1.2.0" + "@firebase/util" "1.5.2" tslib "^2.1.0" -"@firebase/database-types@0.7.3", "@firebase/database-types@^0.7.2": +"@firebase/database-compat@^0.1.1": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.1.8.tgz#ab627f2bdbe94367f515d5bded880c86886bbd28" + integrity sha512-dhXr5CSieBuKNdU96HgeewMQCT9EgOIkfF1GNy+iRrdl7BWLxmlKuvLfK319rmIytSs/vnCzcD9uqyxTeU/A3A== + dependencies: + "@firebase/component" "0.5.13" + "@firebase/database" "0.12.8" + "@firebase/database-types" "0.9.7" + "@firebase/logger" "0.3.2" + "@firebase/util" "1.5.2" + tslib "^2.1.0" + +"@firebase/database-types@0.9.7": + version "0.9.7" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.7.tgz#c5ee0ea9bb2703a13c1c47fe880fc577d5ce7f33" + integrity sha512-EFhgL89Fz6DY3kkB8TzdHvdu8XaqqvzcF2DLVOXEnQ3Ms7L755p5EO42LfxXoJqb9jKFvgLpFmKicyJG25WFWw== + dependencies: + "@firebase/app-types" "0.7.0" + "@firebase/util" "1.5.2" + +"@firebase/database-types@^0.7.2": version "0.7.3" resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.7.3.tgz#819f16dd4c767c864b460004458620f265a3f735" integrity sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A== dependencies: "@firebase/app-types" "0.6.3" -"@firebase/database@^0.10.0": - version "0.10.9" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.10.9.tgz#79f7b03cbe8a127dddfb7ea7748a3e923990f046" - integrity sha512-Jxi9SiE4cNOftO9YKlG71ccyWFw4kSM9AG/xYu6vWXUGBr39Uw1TvYougANOcU21Q0TP4J08VPGnOnpXk/FGbQ== +"@firebase/database@0.12.8": + version "0.12.8" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.12.8.tgz#11a1b6752ba0614892af15c71958e00ce16f5824" + integrity sha512-JBQVfFLzfhxlQbl4OU6ov9fdsddkytBQdtSSR49cz48homj38ccltAhK6seum+BI7f28cV2LFHF9672lcN+qxA== dependencies: "@firebase/auth-interop-types" "0.1.6" - "@firebase/component" "0.5.5" - "@firebase/database-types" "0.7.3" - "@firebase/logger" "0.2.6" - "@firebase/util" "1.2.0" - faye-websocket "0.11.3" + "@firebase/component" "0.5.13" + "@firebase/logger" "0.3.2" + "@firebase/util" "1.5.2" + faye-websocket "0.11.4" tslib "^2.1.0" -"@firebase/logger@0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.2.6.tgz#3aa2ca4fe10327cabf7808bd3994e88db26d7989" - integrity sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw== +"@firebase/logger@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.3.2.tgz#5046ffa8295c577846d54b6ca95645a03809800e" + integrity sha512-lzLrcJp9QBWpo40OcOM9B8QEtBw2Fk1zOZQdvv+rWS6gKmhQBCEMc4SMABQfWdjsylBcDfniD1Q+fUX1dcBTXA== + dependencies: + tslib "^2.1.0" -"@firebase/util@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.2.0.tgz#4d4e419bf8c9bc1bc51308d1953dc2e4353c0770" - integrity sha512-8W9TTGImXr9cu+oyjBJ7yjoEd/IVAv0pBZA4c1uIuKrpGZi2ee38m+8xlZOBRmsAaOU/tR9DXz1WF/oeM6Fb7Q== +"@firebase/util@1.5.2": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.5.2.tgz#bdd2bc11c956a8a6a0fa25fbd752a13e033558bc" + integrity sha512-YvBH2UxFcdWG2HdFnhxZptPl2eVFlpOyTH66iDo13JPEYraWzWToZ5AMTtkyRHVmu7sssUpQlU9igy1KET7TOw== dependencies: tslib "^2.1.0" @@ -859,6 +997,264 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jimp/bmp@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.22.8.tgz#19ce17bfef7f3d34a0dbe220d640f384d28178bc" + integrity sha512-JEMKgM1AEvvWfn9ZCHn62nK+QCE3Pb/ZhPdL3NF0ZgKNww6pqOmo6KqXzqY18JLB7c0epuTp4GPDPDhOh/ou1g== + dependencies: + "@jimp/utils" "^0.22.8" + bmp-js "^0.1.0" + +"@jimp/core@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.22.8.tgz#6851513756e81887864d64d1786f212795076065" + integrity sha512-vkN28aFikzQieA6bGxN+qe20pseCAemCyUI0YmRkJIArlb6OujtAwWAKyokv2lylV56bq8EQGIz+Y30OXUnRqg== + dependencies: + "@jimp/utils" "^0.22.8" + any-base "^1.1.0" + buffer "^5.2.0" + exif-parser "^0.1.12" + file-type "^16.5.4" + isomorphic-fetch "^3.0.0" + mkdirp "^2.1.3" + pixelmatch "^4.0.2" + tinycolor2 "^1.6.0" + +"@jimp/custom@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.22.8.tgz#098cee27bb3e460d24cdcc6774c1680f164b5e50" + integrity sha512-u6lP9x/HNeGHB0Oojv4c2mhuDvn7G0ikzYbK4IKLsH4HzHxt62faMjBzQMcFhKJhR6UiiKE/jiHrhGvBT/fMkw== + dependencies: + "@jimp/core" "^0.22.8" + +"@jimp/gif@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.22.8.tgz#6692a9117fb4b25620d92327fa305dd95cd57334" + integrity sha512-I0l6koS67IPU40RPxCJTD1NvePEd8vUIHTejx1ly0jrjGnumbqdarAlBUkDrKfPPc+Fnqp84hBbSN1w5hNPT6w== + dependencies: + "@jimp/utils" "^0.22.8" + gifwrap "^0.9.2" + omggif "^1.0.9" + +"@jimp/jpeg@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.22.8.tgz#182c41108833bdc8c88598ef4c11bf4f197228eb" + integrity sha512-hLXrQ7/0QiUhAVAF10dfGCSq3hvyqjKltlpu/87b3wqMDKe9KdvhX1AJHiUUrAbJv1fAcnOmQGTyXGuySa1D6A== + dependencies: + "@jimp/utils" "^0.22.8" + jpeg-js "^0.4.4" + +"@jimp/plugin-blit@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.22.8.tgz#b7ea7cbcbb0d7da87fb4124f0129ee539bf5ae49" + integrity sha512-rQ19txVCKIwo74HtgFodFt4//0ATPCJK+f24riqzb+nx+1JaOo1xRvpJqg4moirHwKR2fhwdDxmY7KX20kCeYA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-blur@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.22.8.tgz#d561de68d7154175b7a443d12949ba7d9fe255ca" + integrity sha512-GWbNK3YW6k2EKiGJdpAFEr0jezPBtiVxj2wG/lCPuWJz7KmzSSN99hQjIy73xQxoBCRdALfJlkhe3leFNRueSQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-circle@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.22.8.tgz#2182999a77d0fab7d9eaad94815524104307015f" + integrity sha512-qPCw8XFW8opT89ciFDuvs+eB3EB1mZIJWVajD2qAlprHiE7YGr34TkM7N5MNr3qZ1pJgkYdW6+HbBrJwBaonqw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-color@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.22.8.tgz#3f64888b28438ac986a97c672babe6abec886cb3" + integrity sha512-ogkbg6rpDVH/mMLgAQKg17z3oZE0VN7ZWxNoH12fUHchqKz1I57zpa65fxZe2I8T5Xz97HR3x+7V7oI8qQGdSA== + dependencies: + "@jimp/utils" "^0.22.8" + tinycolor2 "^1.6.0" + +"@jimp/plugin-contain@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.22.8.tgz#5afad638558ccf69abfac0c85b6354534e22c0eb" + integrity sha512-oiaPLdJt9Dk+XEEhM/OU3lFemM51mA9NgMCAdburSCjDzKacJYBGFSHjTOhXzcxOie/ZDpOYN/UzFGKy8Dgl9A== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-cover@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.22.8.tgz#b7e2aa869ff3d68c6b3d68e46f9ddb309bf5fa8a" + integrity sha512-mO68w1m/LhfuHU8LKHY05a4/hhWnY4t+T+8JCw9t+5yfzA4+LofBZZKtFtWgwf/QGe1y3X2rtUU/avAzDUKyyA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-crop@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.22.8.tgz#2683de20d34eac0d457a5d231a0e3885023a2192" + integrity sha512-ns4oH0h0gezYsbuH8RThcMLY5uTLk/vnqOVjWCehMHEzxi0DHMWCmpcb6bC//vJ+XFNhtVGn1ALN7+ROmPrj+A== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-displace@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.22.8.tgz#d29992956fcdb01ab860bb00dd923964e88540f0" + integrity sha512-Cj8nHYgsdFynOIx3dbbiVwRuZn3xO+RVfwkTRy0JBye+K2AU8SQJS+hSFNMQFTZt5djivh6kh0TzvR/6LkOd1w== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-dither@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.22.8.tgz#75d31db459852bd6c2caf10ff74bc7340c9d3bf5" + integrity sha512-oE0Us/6bEgrgEg56plU3jSBzvB9iGhweKUHmxYMWnQbFCHP4mNCtPAs8+Fmq6c+m98ZgBgRcrJTnC7lphHkGyw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-fisheye@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.8.tgz#980bd252ae9ebe903256fc238f224d7deb067813" + integrity sha512-bWvYY/nfMcKclWEaRyAir+YsT6C5St823HUQAsewZowTrJmme+w4U2a6InsryTHUL01BBcV5BLH0aDHuV3StvA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-flip@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.22.8.tgz#c359436260455af0ec4156d9823a55b75b776d94" + integrity sha512-0NFTNzjsdmOQkaIkNjZqO3/yU4SQb9nnWQXsLS1fFo+9QrIL5v8vVkXpk/rhiND6PyTj2mMTNjOa76GuZcC+iQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-gaussian@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.8.tgz#bd52b0944055afa9344496af9a1f05c8d7127ded" + integrity sha512-E/f14aLzCS50QAM7K+InI9V61KVy/Zx52vy7Jjfo1h7qKhQHss3PYaydaH0N6qlXRNeXgh+4/32P9JfieLMcdw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-invert@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.22.8.tgz#d52c4c735720359d942a600827693b2e097c61a7" + integrity sha512-UauP39FF2cwbA5VU+Tz9VlNa9rtULPSHZb0Huwcjqjm9/G/xVN69VJ8+RKiFC4zM1/kYAUp/6IRwPa6qdKJpSw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-mask@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.22.8.tgz#80adff958c1cec3d4727a21018f4f7062a697394" + integrity sha512-bhg5+3i8x1CmYj6cjvPBQZLwZEI3iK3gJWF25ZHF+12d3cqDuJngtr8oRQOQLlAgvKmrj9FXIiEPDczUI9cnWQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-normalize@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.22.8.tgz#e60e864c7b0270920517e6276d847c4604154051" + integrity sha512-Yg5nreAR1JYuSObu3ExlgaLxVeW6VvjVL5qFwiPFxSNlG8JIwL1Ir3K3ChSnnvymyZvJMHb6YKTYNfXKw5Da6g== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-print@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.22.8.tgz#fa1e6659a1cc34dddceee33e887cbf6fc0d99038" + integrity sha512-86O5ejCDi543IYl0TykSmNWErzAjEYhiAxNQb2F7rFRT38WJYNVsvJ6QhxhDQHKxSmF5iwmqbk0jYk5Wp2Z1kw== + dependencies: + "@jimp/utils" "^0.22.8" + load-bmfont "^1.4.1" + +"@jimp/plugin-resize@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.22.8.tgz#d111c164512fb54c096da55dcabf681a5b57d458" + integrity sha512-kg8ArQRPqv/iU3DWNXCa8kcVIhoq64Ze0aGCAeFLKlAq/59f5pzAci6m6vV4L/uOVdYmUa9/kYwIFY6RWKpfzQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-rotate@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.22.8.tgz#3b61655a1a38600e01c73210c201c690041c3bcb" + integrity sha512-9a+VPZWMN/Cks76wf8LjM5RVA3ntP9+NAdsS1SZhhXel7U3Re/dWMouIEbo3QTt6K+igRo4txUCdZiw4ZucvkQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-scale@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.22.8.tgz#b5a4f798aebefa914e942a0feae6dc179230d974" + integrity sha512-dQS4pG6DX6endu8zUpvBBOEtGC+ljDDDNw0scSXY71TxyQdNo5Ro0apfsppjmuAr8rNotRkfyxbITKkXQDRUDQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-shadow@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.22.8.tgz#ba6c14074aafbc47c550878044e7c18498c91907" + integrity sha512-HyAhr7OblTQh+BoKHQg4qbS9MweNlH77yfpBqUEyDtfyjI5r06+5chf1ZdLRIPEWv/BdCfdI/g81Wv69muCMwA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-threshold@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.22.8.tgz#63b96ce4f82250ef993bfb7e88f12dae94e17a04" + integrity sha512-ZmkfH0PtjvF1UcKsjw0H7V6r+LC0yKzEfg76Jhs2nIqIgsxsSOVfHwS7z0/1IWnyXxSw36m+NjCAotNHRILGmA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugins@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.22.8.tgz#07683e350d3578b319580bf445650df88fb7eccd" + integrity sha512-ieI2+kCpmIfjwVlT7B67ULCzxMizfj7LspJh9HnIZCDXQB9GBOZ9KImLYc75Krae0dP/3FR7FglLiSI7fkOHbw== + dependencies: + "@jimp/plugin-blit" "^0.22.8" + "@jimp/plugin-blur" "^0.22.8" + "@jimp/plugin-circle" "^0.22.8" + "@jimp/plugin-color" "^0.22.8" + "@jimp/plugin-contain" "^0.22.8" + "@jimp/plugin-cover" "^0.22.8" + "@jimp/plugin-crop" "^0.22.8" + "@jimp/plugin-displace" "^0.22.8" + "@jimp/plugin-dither" "^0.22.8" + "@jimp/plugin-fisheye" "^0.22.8" + "@jimp/plugin-flip" "^0.22.8" + "@jimp/plugin-gaussian" "^0.22.8" + "@jimp/plugin-invert" "^0.22.8" + "@jimp/plugin-mask" "^0.22.8" + "@jimp/plugin-normalize" "^0.22.8" + "@jimp/plugin-print" "^0.22.8" + "@jimp/plugin-resize" "^0.22.8" + "@jimp/plugin-rotate" "^0.22.8" + "@jimp/plugin-scale" "^0.22.8" + "@jimp/plugin-shadow" "^0.22.8" + "@jimp/plugin-threshold" "^0.22.8" + timm "^1.6.1" + +"@jimp/png@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.22.8.tgz#3fd5e546087aede4011ceb1f75e912dbc8ff696e" + integrity sha512-XOj11kcCr8zKg24QSwlRfH9k4hbV6rkMGUVxMS3puRzzB0FBSQy42NBYEfYf2XlY2QJSAByPl4AYerOtKb805w== + dependencies: + "@jimp/utils" "^0.22.8" + pngjs "^6.0.0" + +"@jimp/tiff@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.22.8.tgz#e584e087633cbfad90fcca82439fabcba4b6786e" + integrity sha512-K0hYUVW5MLgwq3jiHVHa6LvP05J1rXOlRCC+5dMTUnAXVwi45+MKsqA/8lzzwhHYJ65CNhZwy6D3+ZNzM9SIBQ== + dependencies: + utif2 "^4.0.1" + +"@jimp/types@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.22.8.tgz#4dedda51186a1d950108ed9856f5d17a9f003597" + integrity sha512-9+xc+mzuYwu0i+6dsnhXiUgfcS+Ktqn5q2jczoKyyBT0cOKgsk+57EIeFLgpTfVGRKRR0y/UIdHByeCzGguF3A== + dependencies: + "@jimp/bmp" "^0.22.8" + "@jimp/gif" "^0.22.8" + "@jimp/jpeg" "^0.22.8" + "@jimp/png" "^0.22.8" + "@jimp/tiff" "^0.22.8" + timm "^1.6.1" + +"@jimp/utils@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.22.8.tgz#04039431a00f62e0c630b376aab848f8718fb9a1" + integrity sha512-AaqjfqDeLzSFzrbGRKHMXg/ntiWKvoG9tpVgWzgOx5/gPWj/IyGfztojLTTvY8HqZCr25z8z91u2lAQD2v46Jw== + dependencies: + regenerator-runtime "^0.13.3" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" @@ -869,6 +1265,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.0": version "0.3.4" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" @@ -1280,10 +1684,10 @@ jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" -"@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/keyv@*": version "3.1.2" @@ -1297,6 +1701,11 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== +"@types/luxon@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.3.0.tgz#a61043a62c0a72696c73a0a305c544c96501e006" + integrity sha512-uKRI5QORDnrGFYgcdAVnHvEIvEZ8noTpP/Bg+HeUzZghwinDlIS87DEenV5r1YoOF9G4x600YsUXLWZ19rmTmg== + "@types/mime@^1": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" @@ -1317,6 +1726,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.13.tgz#7dfd9c14661edc65cccd43a29eb454174642370d" integrity sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg== +"@types/node@16.9.1": + version "16.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" + integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== + "@types/node@17.0.24": version "17.0.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.24.tgz#20ba1bf69c1b4ab405c7a01e950c4f446b05029f" @@ -1381,74 +1795,85 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz#808d206e2278e809292b5de752a91105da85860b" - integrity sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw== +"@typescript-eslint/eslint-plugin@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz#bfc22e0191e6404ab1192973b3b4ea0461c1e878" + integrity sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg== dependencies: - "@typescript-eslint/experimental-utils" "4.29.1" - "@typescript-eslint/scope-manager" "4.29.1" - debug "^4.3.1" + "@typescript-eslint/scope-manager" "5.21.0" + "@typescript-eslint/type-utils" "5.21.0" + "@typescript-eslint/utils" "5.21.0" + debug "^4.3.2" functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" + ignore "^5.1.8" + regexpp "^3.2.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz#0af2b17b0296b60c6b207f11062119fa9c5a8994" - integrity sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw== +"@typescript-eslint/parser@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.21.0.tgz#6cb72673dbf3e1905b9c432175a3c86cdaf2071f" + integrity sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.29.1" - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/typescript-estree" "4.29.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@typescript-eslint/scope-manager" "5.21.0" + "@typescript-eslint/types" "5.21.0" + "@typescript-eslint/typescript-estree" "5.21.0" + debug "^4.3.2" -"@typescript-eslint/parser@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.1.tgz#17dfbb45c9032ffa0fe15881d20fbc2a4bdeb02d" - integrity sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg== - dependencies: - "@typescript-eslint/scope-manager" "4.29.1" - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/typescript-estree" "4.29.1" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz#f25da25bc6512812efa2ce5ebd36619d68e61358" - integrity sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A== - dependencies: - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/visitor-keys" "4.29.1" - -"@typescript-eslint/types@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.1.tgz#94cce6cf7cc83451df03339cda99d326be2feaf5" - integrity sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA== - -"@typescript-eslint/typescript-estree@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz#7b32a25ff8e51f2671ccc6b26cdbee3b1e6c5e7f" - integrity sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw== - dependencies: - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/visitor-keys" "4.29.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" +"@typescript-eslint/scope-manager@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz#a4b7ed1618f09f95e3d17d1c0ff7a341dac7862e" + integrity sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ== + dependencies: + "@typescript-eslint/types" "5.21.0" + "@typescript-eslint/visitor-keys" "5.21.0" + +"@typescript-eslint/type-utils@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz#ff89668786ad596d904c21b215e5285da1b6262e" + integrity sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw== + dependencies: + "@typescript-eslint/utils" "5.21.0" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.21.0.tgz#8cdb9253c0dfce3f2ab655b9d36c03f72e684017" + integrity sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA== + +"@typescript-eslint/typescript-estree@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz#9f0c233e28be2540eaed3df050f0d54fb5aa52de" + integrity sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg== + dependencies: + "@typescript-eslint/types" "5.21.0" + "@typescript-eslint/visitor-keys" "5.21.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz#0615be8b55721f5e854f3ee99f1a714f2d093e5d" - integrity sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag== +"@typescript-eslint/utils@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.21.0.tgz#51d7886a6f0575e23706e5548c7e87bce42d7c18" + integrity sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q== dependencies: - "@typescript-eslint/types" "4.29.1" - eslint-visitor-keys "^2.0.0" + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.21.0" + "@typescript-eslint/types" "5.21.0" + "@typescript-eslint/typescript-estree" "5.21.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.21.0": + version "5.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz#453fb3662409abaf2f8b1f65d515699c888dd8ae" + integrity sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA== + dependencies: + "@typescript-eslint/types" "5.21.0" + eslint-visitor-keys "^3.0.0" abab@^2.0.3, abab@^2.0.5: version "2.0.5" @@ -1529,11 +1954,6 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -1568,6 +1988,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +any-base@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" + integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== + anymatch@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -1576,11 +2001,6 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - arch@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" @@ -1593,14 +2013,6 @@ archive-type@^4.0.0: dependencies: file-type "^4.2.0" -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -1657,6 +2069,13 @@ async-retry@^1.3.1: dependencies: retry "0.12.0" +async@^2.0.1: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1672,12 +2091,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== +axios@0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.9" + form-data "^4.0.0" axios@^0.21.0: version "0.21.4" @@ -1839,6 +2259,11 @@ bluebird@^3.5.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" + integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw== + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1916,6 +2341,11 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA== + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -1926,7 +2356,7 @@ 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@^5.2.1, buffer@^5.5.0: +buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -1952,7 +2382,7 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" -cacheable-request@^7.0.1: +cacheable-request@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== @@ -2085,7 +2515,32 @@ cheerio-select@^1.5.0: domhandler "^4.2.0" domutils "^2.7.0" -cheerio@1.0.0-rc.10, cheerio@^1.0.0-rc.3: +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +cheerio@^1.0.0-rc.3: version "1.0.0-rc.10" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e" integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw== @@ -2134,17 +2589,12 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -2168,21 +2618,21 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" - integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" + color-convert "^2.0.1" + color-string "^1.9.0" colorette@^1.2.2: version "1.2.2" @@ -2196,7 +2646,7 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.8.1: +commander@^2.15.1, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2233,11 +2683,6 @@ configstore@^5.0.0: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - console-stream@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44" @@ -2312,11 +2757,27 @@ css-select@^4.1.3: domutils "^2.6.0" nth-check "^2.0.0" +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + css-what@^5.0.0, css-what@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -2334,11 +2795,21 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csv-parse@*, csv-parse@4.16.0: +csv-parse@*: version "4.16.0" resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.0.tgz#b4c875e288a41f7ff917cb0d7d45880d563034f6" integrity sha512-Zb4tGPANH4SW0LgC9+s9Mnequs9aqn7N3/pCqNbVjs2XhEF6yWNU2Vm4OGl1v2Go9nw8rXt87Cm2QN/o6Vpqgg== +csv-parse@4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== + +csv-stringify@^6.0.5: + version "6.4.0" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-6.4.0.tgz#6d006dca9194700e44f9fbc541bee8bbbd4f459c" + integrity sha512-HQsw0QXiN5fdlO+R8/JzCZnR3Fqp8E87YVnhHlaPtNGJjt6ffbV0LpOkieIb1x6V1+xt878IYq77SpXHWAqKkA== + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -2367,10 +2838,12 @@ date-and-time@^1.0.0: resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-1.0.1.tgz#4959b7faf1ec5873e59d926d4528b9223a808a57" integrity sha512-7u+uNfnjWkX+YFQfivvW24TjaJG6ahvTrfw1auq7KlC7osuGcZBIWGBvB9UcENjH6JnLVhMqlRripk1dSHjAUA== -date-fns@2.23.0: - version "2.23.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.23.0.tgz#4e886c941659af0cf7b30fafdd1eaa37e88788a9" - integrity sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA== +date-fns@2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" debug@2: version "2.6.9" @@ -2379,13 +2852,20 @@ debug@2: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -2416,13 +2896,6 @@ decompress-response@^3.2.0, decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -2513,15 +2986,10 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== detect-newline@^3.0.0: version "3.1.0" @@ -2568,11 +3036,30 @@ dom-serializer@^1.0.1, dom-serializer@^1.3.2: domhandler "^4.2.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -2587,6 +3074,13 @@ domhandler@^4.0.0, domhandler@^4.2.0: dependencies: domelementtype "^2.2.0" +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" @@ -2596,6 +3090,15 @@ domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -2603,6 +3106,11 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" +doublearray@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/doublearray/-/doublearray-0.0.2.tgz#63186fe8d34413276d3621f6aa0ec5f79e227ef9" + integrity sha512-aw55FtZzT6AmiamEj2kvmR6BuFqvYgKZUkfQ7teqVRNqD5UE0rw8IeW/3gieHNKQ5sPuDKlljWEn4bzv5+1bHw== + download@^6.2.2: version "6.2.5" resolved "https://registry.yarnpkg.com/download/-/download-6.2.5.tgz#acd6a542e4cd0bb42ca70cfc98c9e43b07039714" @@ -2710,6 +3218,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2717,6 +3230,41 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +esbuild-register@^3.3.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.4.2.tgz#1e39ee0a77e8f320a9790e68c64c3559620b9175" + integrity sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q== + dependencies: + debug "^4.3.4" + +esbuild@^0.17.0: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== + optionalDependencies: + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -2777,17 +3325,17 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.13.0.tgz#6fcea43b6811e655410f5626cfcf328016badcd7" - integrity sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ== +eslint@8.14.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.14.0.tgz#62741f159d9eb4a79695b28ec4989fcdec623239" + integrity sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw== dependencies: - "@eslint/eslintrc" "^1.2.1" + "@eslint/eslintrc" "^1.2.2" "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" @@ -2934,6 +3482,11 @@ executable@^4.1.0: dependencies: pify "^2.2.0" +exif-parser@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" + integrity sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2989,7 +3542,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3, fast-glob@^3.1.1: +fast-glob@^3.0.3: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== @@ -3000,6 +3553,17 @@ fast-glob@^3.0.3, fast-glob@^3.1.1: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -3022,10 +3586,10 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== +faye-websocket@0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" @@ -3058,10 +3622,10 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-type@16.5.3: - version "16.5.3" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.3.tgz#474b7e88c74724046abb505e9b8ed4db30c4fc06" - integrity sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A== +file-type@16.5.4, file-type@^16.5.4: + version "16.5.4" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== dependencies: readable-web-to-node-stream "^3.0.0" strtok3 "^6.2.4" @@ -3146,12 +3710,12 @@ find-versions@^3.0.0: dependencies: semver-regex "^2.0.0" -firebase-admin@9.11.0: - version "9.11.0" - resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.11.0.tgz#c0c72e4480b836fb4cd15e6d834ddfbfb9cc54ba" - integrity sha512-68fXdwcKF99LkWBE33M5hnLwjvGpbCRznIOtZVsiBqZdM9iwxlTfNEpAckh++o3GdJcSLRUWmIN+MKqPUsxoCA== +firebase-admin@9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.12.0.tgz#d7e889e97c9c31610efbcd131bb6d06a783af757" + integrity sha512-AtA7OH5RbIFGoc0gZOQgaYC6cdjdhZv4w3XgWoupkPKO1HY+0GzixOuXDa75kFeoVyhIyo4PkLg/GAC1dC1P6w== dependencies: - "@firebase/database" "^0.10.0" + "@firebase/database-compat" "^0.1.1" "@firebase/database-types" "^0.7.2" "@types/node" ">=12.12.47" dicer "^0.3.0" @@ -3175,16 +3739,16 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== -follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - follow-redirects@^1.14.0: version "1.14.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== +follow-redirects@^1.14.9: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -3199,6 +3763,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -3241,20 +3814,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - gaxios@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.0.tgz#ad4814d89061f85b97ef52aed888c5dbec32f774" @@ -3363,6 +3922,14 @@ gifsicle@^5.0.0: execa "^5.0.0" logalot "^2.0.0" +gifwrap@^0.9.2: + version "0.9.4" + resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.9.4.tgz#f4eb6169ba027d61df64aafbdcb1f8ae58ccc0c5" + integrity sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ== + dependencies: + image-q "^4.0.0" + omggif "^1.0.10" + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -3394,6 +3961,14 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -3420,16 +3995,16 @@ globby@^10.0.0: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" google-auth-library@^7.0.0, google-auth-library@^7.0.2, google-auth-library@^7.3.0: @@ -3473,17 +4048,17 @@ google-p12-pem@^3.0.3: dependencies: node-forge "^0.10.0" -got@11.8.2: - version "11.8.2" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" - integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== +got@11.8.6: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" "@types/cacheable-request" "^6.0.1" "@types/responselike" "^1.0.0" cacheable-lookup "^5.0.3" - cacheable-request "^7.0.1" + cacheable-request "^7.0.2" decompress-response "^6.0.0" http2-wrapper "^1.0.0-beta.5.2" lowercase-keys "^2.0.0" @@ -3599,11 +4174,6 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3655,6 +4225,16 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -3742,16 +4322,23 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.1, ignore@^5.1.4: +ignore@^5.1.1: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -ignore@^5.2.0: +ignore@^5.1.8, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +image-q@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/image-q/-/image-q-4.0.0.tgz#31e075be7bae3c1f42a85c469b4732c358981776" + integrity sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw== + dependencies: + "@types/node" "16.9.1" + imagemin-gifsicle@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz#1a7ab136a144c4678657ba3b6c412f80805d26b0" @@ -3892,23 +4479,16 @@ is-finite@^1.0.0: resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-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" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -4020,6 +4600,14 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isomorphic-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4080,6 +4668,13 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jaco@4.0.0, jaco@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jaco/-/jaco-4.0.0.tgz#7522a3dd4d7295b3e33b0ae82c08b34db99738e5" + integrity sha512-RBtY32bY4ICqgPVTmWOLoxn3rZQ+sFPtkcmCA2HJY7ZCCKkCMoMhv/zw0G+eGCzIb7Vkpx5dqSu4cwuS6c6l1w== + dependencies: + commander "^2.15.1" + jest-changed-files@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" @@ -4485,6 +5080,16 @@ jest@^27.5.1: import-local "^3.0.2" jest-cli "^27.5.1" +jimp@^0.22.0: + version "0.22.8" + resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.22.8.tgz#85db9a2de69370c36d8b5ae070381af83dbbb40f" + integrity sha512-pBbrooJMX7795sDcxx1XpwNZC8B/ITyDV+JK2/1qNbQl/1UWqWeh5Dq7qQpMZl5jLdcFDv5IVTM+OhpafSqSFA== + dependencies: + "@jimp/custom" "^0.22.8" + "@jimp/plugins" "^0.22.8" + "@jimp/types" "^0.22.8" + regenerator-runtime "^0.13.3" + jose@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.5.tgz#29746a18d9fff7dcf9d5d2a6f62cb0c7cd27abd3" @@ -4492,6 +5097,19 @@ jose@^2.0.5: dependencies: "@panva/asn1.js" "^1.0.0" +jpeg-js@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" + integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== + +jptext-to-emoji@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/jptext-to-emoji/-/jptext-to-emoji-0.3.0.tgz#002fa4335c5b200f7b51e423640768e88c7961c7" + integrity sha512-RFwsfR+lm/tXQufRfpXso05pSwEqWctpOlhk0VXzpawpiZmH+j4iS9ERWE+DgOvcbDzRxeARQ9Mv25nNwJbcRQ== + dependencies: + jaco "4.0.0" + kuromojin "3.0.0" + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4709,6 +5327,23 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +kuromoji@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/kuromoji/-/kuromoji-0.1.2.tgz#293f0d6706df006112137980588d5daac26d0790" + integrity sha512-V0dUf+C2LpcPEXhoHLMAop/bOht16Dyr+mDiIE39yX3vqau7p80De/koFqpiTcL1zzdZlc3xuHZ8u5gjYRfFaQ== + dependencies: + async "^2.0.1" + doublearray "0.0.2" + zlibjs "^0.3.1" + +kuromojin@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kuromojin/-/kuromojin-3.0.0.tgz#54a1a6643110f49f741c4beb82fef400d1cd498b" + integrity sha512-3h3qnn/NVVhqoKFP4oc7e6apO2B01Atc056oiVlIY7Uoup4rhrnBe28g3y9lK1HTmLDQEejvXB+3I3qxAneF7A== + dependencies: + kuromoji "0.1.2" + lru_map "^0.4.1" + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -4740,6 +5375,20 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +load-bmfont@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.1.tgz#c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9" + integrity sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA== + dependencies: + buffer-equal "0.0.1" + mime "^1.3.4" + parse-bmfont-ascii "^1.0.3" + parse-bmfont-binary "^1.0.5" + parse-bmfont-xml "^1.1.4" + phin "^2.9.1" + xhr "^2.0.1" + xtend "^4.0.0" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -4808,7 +5457,7 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash@^4.17.19, lodash@^4.17.20, lodash@^4.7.0: +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4895,6 +5544,16 @@ lru-memoizer@^2.1.4: lodash.clonedeep "^4.5.0" lru-cache "~4.0.0" +lru_map@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.4.1.tgz#f7b4046283c79fb7370c36f8fca6aee4324b0a98" + integrity sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg== + +luxon@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.3.0.tgz#d73ab5b5d2b49a461c47cedbc7e73309b4805b48" + integrity sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg== + make-dir@^1.0.0, make-dir@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -4969,7 +5628,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -4994,6 +5653,11 @@ mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.49.0" +mime@^1.3.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mime@^2.2.0: version "2.5.2" resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" @@ -5009,16 +5673,18 @@ mimic-response@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -5050,6 +5716,11 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + mozjpeg@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/mozjpeg/-/mozjpeg-7.1.0.tgz#23f202f3e48e98f02ed84f415358d4cbfab66c19" @@ -5089,17 +5760,17 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-abi@^2.21.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.0.tgz#8be53bf3e7945a34eea10e0fc9a5982776cf550b" - integrity sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg== +node-abi@^3.3.0: + version "3.40.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.40.0.tgz#51d8ed44534f70ff1357dfbc3a89717b1ceac1b4" + integrity sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA== dependencies: - semver "^5.4.1" + semver "^7.3.5" -node-addon-api@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== node-fetch@^2.3.0, node-fetch@^2.6.1: version "2.6.1" @@ -5195,16 +5866,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" @@ -5212,10 +5873,12 @@ nth-check@^2.0.0: dependencies: boolbase "^1.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" nwsapi@^2.2.0: version "2.2.0" @@ -5237,6 +5900,11 @@ object-hash@^2.1.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== +omggif@^1.0.10, omggif@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" + integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -5385,6 +6053,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pako@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5392,6 +6065,29 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-bmfont-ascii@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" + integrity sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA== + +parse-bmfont-binary@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" + integrity sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA== + +parse-bmfont-xml@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" + integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== + dependencies: + xml-parse-from-string "^1.0.0" + xml2js "^0.4.5" + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -5416,11 +6112,26 @@ parse5-htmlparser2-tree-adapter@^6.0.1: dependencies: parse5 "^6.0.1" +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -5482,6 +6193,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +phin@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" + integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -5524,6 +6240,13 @@ pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== +pixelmatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA== + dependencies: + pngjs "^3.0.0" + pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -5531,6 +6254,16 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pngjs@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +pngjs@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" + integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== + pngquant-bin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/pngquant-bin/-/pngquant-bin-6.0.0.tgz#aff0d7e61095feb96ced379ad8c7294ad3dd1712" @@ -5541,22 +6274,21 @@ pngquant-bin@^6.0.0: execa "^4.0.0" logalot "^2.0.0" -prebuild-install@^6.1.2: - version "6.1.4" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f" - integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ== +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== dependencies: - detect-libc "^1.0.3" + detect-libc "^2.0.0" expand-template "^2.0.3" github-from-package "0.0.0" minimist "^1.2.3" mkdirp-classic "^0.5.3" napi-build-utils "^1.0.1" - node-abi "^2.21.0" - npmlog "^4.0.1" + node-abi "^3.3.0" pump "^3.0.0" rc "^1.2.7" - simple-get "^3.0.3" + simple-get "^4.0.0" tar-fs "^2.0.0" tunnel-agent "^0.6.0" @@ -5594,6 +6326,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + prompts@^2.0.1: version "2.4.1" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" @@ -5753,7 +6490,7 @@ readable-stream@1.0: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5: 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== @@ -5798,7 +6535,12 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regexpp@^3.1.0, regexpp@^3.2.0: +regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.3: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -5959,6 +6701,11 @@ safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -5985,7 +6732,7 @@ semver-truncate@^1.1.2: dependencies: semver "^5.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -6002,22 +6749,24 @@ semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: dependencies: lru-cache "^6.0.0" -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -sharp@0.28.3: - version "0.28.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.28.3.tgz#ecd74cefd020bee4891bb137c9850ee2ce277a8b" - integrity sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA== - dependencies: - color "^3.1.3" - detect-libc "^1.0.3" - node-addon-api "^3.2.0" - prebuild-install "^6.1.2" - semver "^7.3.5" - simple-get "^3.1.0" +semver@^7.5.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + +sharp@0.32.1: + version "0.32.1" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.1.tgz#41aa0d0b2048b2e0ee453d9fcb14ec1f408390fe" + integrity sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^6.1.0" + prebuild-install "^7.1.1" + semver "^7.5.0" + simple-get "^4.0.1" tar-fs "^2.1.1" tunnel-agent "^0.6.0" @@ -6055,12 +6804,12 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== -simple-get@^3.0.3, simple-get@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: - decompress-response "^4.2.0" + decompress-response "^6.0.0" once "^1.3.1" simple-concat "^1.0.0" @@ -6234,23 +6983,6 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2": - 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@^4.1.0, string-width@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" @@ -6279,20 +7011,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -6514,6 +7239,16 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timm@^1.6.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" + integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== + +tinycolor2@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -6585,12 +7320,12 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -ts-node@10.7.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" - integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.7.0" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -6601,7 +7336,7 @@ ts-node@10.7.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" tslib@^1.8.1: @@ -6689,10 +7424,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" - integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== unbzip2-stream@^1.0.9: version "1.4.3" @@ -6740,6 +7475,13 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +utif2@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/utif2/-/utif2-4.1.0.tgz#e768d37bd619b995d56d9780b5d2b4611a3d932b" + integrity sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w== + dependencies: + pako "^1.0.11" + 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" @@ -6755,7 +7497,7 @@ uuid@^8.0.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache-lib@^3.0.0: +v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== @@ -6843,6 +7585,11 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-fetch@^3.4.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -6871,13 +7618,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -6917,11 +7657,39 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xhr@^2.0.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml-parse-from-string@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" + integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g== + +xml2js@^0.4.5: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" @@ -6982,3 +7750,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zlibjs@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/zlibjs/-/zlibjs-0.3.1.tgz#50197edb28a1c42ca659cc8b4e6a9ddd6d444554" + integrity sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==