Update in progress

Signed-off-by: Avior <florian.bouillon@delta-wings.net>
This commit is contained in:
Florian Bouillon 2021-02-03 01:14:26 +01:00
parent 557dad7e33
commit 1e4a9ba9d1
Signed by: Florian Bouillon
GPG Key ID: 50BD648F12C86AB6
27 changed files with 272 additions and 92 deletions

4
.gitmodules vendored
View File

@ -1,7 +1,7 @@
[submodule "db"]
path = db
url = https://git.delta-wings.net/tcgdex/db.git
url = https://github.com/tcgdex/cards-database.git
[submodule "dist"]
path = dist
url = https://git.delta-wings.net/tcgdex/compiled.git
url = https://github.com/tcgdex/distribution.git

14
all.ts
View File

@ -1,3 +1,6 @@
import Logger from '@dzeio/logger'
const logger = new Logger('Compiler')
import cardIndex from './endpoints/cards/index'
import cardItem from './endpoints/cards/item'
@ -31,14 +34,18 @@ import typesItem from './endpoints/types/item'
import tagsIndex from './endpoints/tags/index'
import tagsItem from './endpoints/tags/item'
import { fetchRemoteFile } from './endpoints/util'
(async () => {
console.log('Preparing Database Update')
logger.log('Preparing Database Update')
await Promise.all([
illustratorsDB()
illustratorsDB(),
fetchRemoteFile('https://assets.tcgdex.net/data-en.json'),
fetchRemoteFile('https://assets.tcgdex.net/data-fr.json'),
fetchRemoteFile('https://assets.tcgdex.net/data-univ.json')
])
console.log('UPDATING...')
logger.log('UPDATING...')
await Promise.all([
cardIndex(),
cardItem(),
@ -73,4 +80,5 @@ import tagsItem from './endpoints/tags/item'
tagsIndex(),
tagsItem(),
])
process.exit(0)
})()

2
db

@ -1 +1 @@
Subproject commit f6b9eafec4e9bfc0f5cd3f7a4eedfb844bf9fbe2
Subproject commit fc5cd3aba3500b19222ce5bf185ca4a8361d601d

View File

@ -6,18 +6,33 @@ import { tagToTagSimple } from "./TagUtil";
import Category from "@tcgdex/sdk/interfaces/Category";
import { attackToAttackSingle } from "./attackUtil";
import { abilityToAbilitySingle } from "./abilityUtil";
import { getExpansion } from "./expansionUtil";
import { getExpansion, getExpansionFromSetName } from "./expansionUtil";
import { getSet } from "./setUtil";
import Expansion from "@tcgdex/sdk/interfaces/Expansion";
import { fetchIllustratorsSync } from "./illustratorUtil";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil";
import { fetchRemoteFile } from "./util";
interface ObjectList<T = any> {
[key: string]: T
}
type RemoteData = ObjectList<ObjectList<ObjectList<boolean>>>
export async function cardToCardSimple(card: Card, lang: Langs): Promise<CardSimple> {
let image: string = undefined
const file: RemoteData = await fetchRemoteFile(`https://assets.tcgdex.net/data-${lang}.json`)
const expansion = getExpansionFromSetName(card.set.code)
if (file[expansion.code] && file[expansion.code][card.set.code] && file[expansion.code][card.set.code][card.localId]) {
const basePath = `https://assets.tcgdex.net/${lang}/${expansion.code}/${card.set.code}/${card.localId}`
image = `${basePath}/low`
}
export function cardToCardSimple(card: Card, lang: Langs): CardSimple {
return {
id: card.id,
localId: card.localId,
name: card.name[lang],
image: card.image && card.image.low[lang]
image
}
}
@ -25,14 +40,21 @@ export function getCardExpansion(card: Card): Expansion {
return getExpansion(getSet(card))
}
export function cardToCardSingle(card: Card, lang: Langs): CardSingle {
export async function cardToCardSingle(card: Card, lang: Langs): Promise<CardSingle> {
const images: {
low: string,
high?: string
} = card.image && {
low: card.image.low[lang],
high: card.image.high && card.image.high[lang]
let images: {
low: string;
high?: string;
} = undefined
const file: RemoteData = await fetchRemoteFile(`https://assets.tcgdex.net/data-${lang}.json`)
const expansion = getExpansionFromSetName(card.set.code)
if (file[expansion.code] && file[expansion.code][card.set.code] && file[expansion.code][card.set.code][card.localId]) {
const basePath = `https://assets.tcgdex.net/${lang}/${expansion.code}/${card.set.code}/${card.localId}`
images = {
low: `${basePath}/low`,
high: `${basePath}/high`
}
}
return {

View File

@ -19,7 +19,7 @@ export default async () => {
if (!isCardAvailable(card, lang)) continue
items.push(
cardToCardSimple(card, lang)
await cardToCardSimple(card, lang)
)
// if (if (typeof card.set.availability === "undefined"))

View File

@ -17,8 +17,12 @@ export default async () => {
if (!isCardAvailable(card, lang)) continue
await fs.mkdir(`${endpoint}/${card.id}/`, {recursive: true})
await fs.writeFile(`${endpoint}/${card.id}/index.json`, JSON.stringify(cardToCardSingle(card, lang)))
try {
await fs.mkdir(`${endpoint}/${encodeURI(card.id)}/`, {recursive: true})
await fs.writeFile(`${endpoint}/${encodeURI(card.id)}/index.json`, JSON.stringify(await cardToCardSingle(card, lang)))
} catch {
}
// if (if (typeof card.set.availability === "undefined"))
}

View File

@ -3,12 +3,15 @@ import Category, { CategorySimple, CategoryList } from '@tcgdex/sdk/interfaces/C
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import Logger from '@dzeio/logger'
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "categories")
const logger = new Logger('Category/Index')
export default async () => {
console.log(endpoint)
logger.log(endpoint)
const list: Array<CategorySimple> = []
for (const cat of Object.values(Category)) {
@ -26,5 +29,5 @@ export default async () => {
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res))
console.log('ended ' + endpoint)
logger.log('ended')
}

View File

@ -37,7 +37,7 @@ export default async () => {
const toSave: CategorySingle = {
id: rCat,
name: TranslationUtil.translate("category", rCat, lang),
cards: cards.map(el => cardToCardSimple(el, lang))
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`

View File

@ -11,12 +11,33 @@ export function getExpansion(set: Set): Expansion {
return require(`../../db/expansions/${set.expansionCode}`)
}
export function getAllExpansions(): Array<string> {
return glob.sync("./db/expansions/*.ts").map(el => el.substr(16, el.length-15-1-3)) // -15 = start -1 = 0 index -3 = .ts
const setExpansionLink: Record<string, string> = {}
export function getExpansionFromSetName(setName: string): Expansion {
try {
if (!setExpansionLink[setName]) {
setExpansionLink[setName] = glob.sync(`./db/sets/**/${setName}.ts`)[0].split('/')[3]
}
const expansionName = setExpansionLink[setName]
return fetchExpansion(expansionName)
} catch (e) {
console.error(glob.sync(`./db/sets/**/${setName}`))
throw new Error(setName)
}
}
export function getAllExpansions(): Array<string> {
return glob.sync("./db/expansions/*.ts").map(el => el.split('/')[3].substr(0, el.length-1-3)) // -15 = start -1 = 0 index -3 = .ts
}
const expansionCache: Record<string, Expansion> = {}
export function fetchExpansion(name: string): Expansion {
return require(`../db/expansions/${name}.js`).default
name = name.replace('.ts', '')
if (!expansionCache[name]) {
expansionCache[name] = require(`../db/expansions/${name}.js`).default
}
return expansionCache[name]
}
export function expansionToExpansionSimple(expansion: Expansion, lang: Langs) {

View File

@ -31,7 +31,7 @@ export default async () => {
const toSave: HpSingle = {
hp: hp as unknown as number,
cards: cards.map(el => cardToCardSimple(el, lang))
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
await fs.mkdir(`${endpoint}/${toSave.hp}/`, {recursive: true})

View File

@ -38,7 +38,7 @@ export default async () => {
const toSave: IllustratorSingle = {
id: db.indexOf(illustrator),
name: illustrator,
cards: list.map(el => cardToCardSimple(el, lang))
cards: await Promise.all(list.map(el => cardToCardSimple(el, lang)))
}
await fs.mkdir(`${endpoint}/${toSave.id}`, {recursive: true})

View File

@ -4,6 +4,10 @@ import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import Rarity, { RaritySimple, RarityList } from "@tcgdex/sdk/interfaces/Rarity"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Rarities/Index'
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "rarities")

View File

@ -6,6 +6,10 @@ import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs"
import Rarity, { RaritySingle } from "@tcgdex/sdk/interfaces/Rarity"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Rarities/Item'
type rarityCards = {
[key in Rarity]?: Array<Card>
}
@ -37,7 +41,7 @@ export default async () => {
const toSave: RaritySingle = {
id: rCat,
name: TranslationUtil.translate("rarity", rCat, lang),
cards: cards.map(el => cardToCardSimple(el, lang))
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`

View File

@ -5,6 +5,9 @@ import { isCardAvailable } from "../cardUtil"
import { RetreatList } from '@tcgdex/sdk/interfaces/Retreat'
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Retreat/Index'
const lang = (process.env.CARDLANG || "en") as Langs
const endpoint = getBaseFolder(lang, "retreat")

View File

@ -5,6 +5,9 @@ import { isCardAvailable, cardToCardSimple } from "../cardUtil"
import { RetreatSingle } from '@tcgdex/sdk/interfaces/Retreat'
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Retreat/Item'
const lang = (process.env.CARDLANG || "en") as Langs
const endpoint = getBaseFolder(lang, "retreat")
@ -30,7 +33,7 @@ export default async () => {
const item: RetreatSingle = {
id: retreat as unknown as number,
cards: cardArr.map((val) => cardToCardSimple(val, lang))
cards: await Promise.all(cardArr.map(el => cardToCardSimple(el, lang)))
}
await fs.mkdir(`${endpoint}/${item.id}`, {recursive: true})

View File

@ -46,7 +46,7 @@ export function setToSetSimple(set: Set, lang: Langs): SetSimple {
}
}
export function getSetCards(set: Set, lang: Langs): Array<CardSimple> {
export async function getSetCards(set: Set, lang: Langs): Promise<Array<CardSimple>> {
const cardes = getAllCards2(set.code)
const cards: Array<Card> = []
for (let el of cardes) {
@ -57,16 +57,15 @@ export function getSetCards(set: Set, lang: Langs): Array<CardSimple> {
card
)
}
return cards.sort((a, b) => {
return await Promise.all(cards.sort((a, b) => {
if (!isNaN(parseInt(a.localId + "")) && !isNaN(parseInt(b.localId + ""))) {
return parseInt(a.localId + "") - parseInt(b.localId + "")
}
return a.localId > b.localId ? 1 : -1
}).map(el => cardToCardSimple(el, lang))
}).map(el => cardToCardSimple(el, lang)))
}
export function setToSetSingle(set: Set, lang: Langs): SetSingle {
export async function setToSetSingle(set: Set, lang: Langs): Promise<SetSingle> {
return {
name: set.name[lang],
code: set.code,
@ -85,6 +84,6 @@ export function setToSetSingle(set: Set, lang: Langs): SetSingle {
symbol: set.images.symbol,
logo: set.images.logo
},
list: getSetCards(set, lang)
list: await getSetCards(set, lang)
}
}

View File

@ -5,6 +5,10 @@ import { SetSimple, SetList } from "@tcgdex/sdk/interfaces/Set"
import { getAllSets, getBaseFolder } from "../util"
import { isSetAvailable, setToSetSimple } from "../setUtil"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Sets/Index'
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets")

View File

@ -4,6 +4,9 @@ import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import { isSetAvailable, setToSetSingle } from "../setUtil"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Sets/Item'
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets")
@ -18,7 +21,7 @@ export default async () => {
if (!isSetAvailable(set, lang)) continue
await fs.mkdir(`${endpoint}/${set.code}/`, {recursive: true})
await fs.writeFile(`${endpoint}/${set.code}/index.json`, JSON.stringify(setToSetSingle(set, lang)))
await fs.writeFile(`${endpoint}/${set.code}/index.json`, JSON.stringify(await setToSetSingle(set, lang)))
}

View File

@ -7,6 +7,10 @@ import { getAllCards2 } from "../util"
import Card from "@tcgdex/sdk/interfaces/Card"
import { cardToCardSingle, isCardAvailable } from "../cardUtil"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Sets/SubItem'
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets")
@ -28,7 +32,7 @@ export default async () => {
if (!isCardAvailable(card, lang)) continue
await fs.mkdir(`${endpoint}/${set.code}/${card.localId}`, {recursive: true})
await fs.writeFile(`${endpoint}/${set.code}/${card.localId}/index.json`, JSON.stringify(cardToCardSingle(card, lang)))
await fs.writeFile(`${endpoint}/${set.code}/${card.localId}/index.json`, JSON.stringify(await cardToCardSingle(card, lang)))
}
}

View File

@ -4,11 +4,14 @@ import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import Tag, { TagSimple, TagList } from "@tcgdex/sdk/interfaces/Tag"
import Logger from '@dzeio/logger'
const logger = new Logger('Tags/Index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "tags")
export default async () => {
console.log(endpoint)
logger.log(endpoint)
const list: Array<TagSimple> = []
for (const cat of Object.values(Tag)) {
@ -26,5 +29,5 @@ export default async () => {
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res))
console.log('ended ' + endpoint)
logger.log('ended ' + endpoint)
}

View File

@ -1,5 +1,5 @@
import { getAllCards, getBaseFolder, urlize } from "../util"
import { fetchCard, isCardAvailable, cardToCardSimple } from "../cardUtil"
import { fetchCard, isCardAvailable, cardToCardSimple, fetchCardAsync } from "../cardUtil"
import Type, { TypeSingle } from "@tcgdex/sdk/interfaces/Type"
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
@ -7,6 +7,10 @@ import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs"
import Tag, { TagSingle } from "@tcgdex/sdk/interfaces/Tag"
import Logger from '@dzeio/logger'
import { objectKeys, objectSize } from '@dzeio/object-util'
const logger = new Logger('Tags/Item')
type tagCards = {
[key in Tag]?: Array<Card>
}
@ -16,28 +20,31 @@ const endpoint = getBaseFolder(lang, "tags")
export default async () => {
console.log(endpoint)
logger.log('part 1')
const list = getAllCards()
const arr: tagCards = {}
for (const i of list) {
const card = await fetchCard(i)
const card = await fetchCardAsync(i)
if (!isCardAvailable(card, lang)) continue
if (!isCardAvailable(card, lang) || !card.tags) continue
for (const tag of card.tags) {
if (!(tag in arr)) arr[tag] = []
arr[tag].push(card)
}
}
logger.log('part 2')
for (const type in arr) {
if (arr.hasOwnProperty(type)) {
const cards: Array<Card> = arr[type];
const rTag: Tag = parseInt(type)
logger.log('Working on tag', TranslationUtil.translate("tag", rTag, lang), `${type}/${objectSize(arr)}`)
const toSave: TagSingle = {
id: rTag,
name: TranslationUtil.translate("tag", rTag, lang),
cards: cards.map(el => cardToCardSimple(el, lang))
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`
@ -50,5 +57,5 @@ export default async () => {
await promises.writeFile(`${name}/index.json`, JSON.stringify(toSave))
}
}
console.log('ended ' + endpoint)
logger.log('ended')
}

View File

@ -8,6 +8,9 @@ import { List } from "@tcgdex/sdk/interfaces/General"
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "types")
import { logger as console } from '@dzeio/logger'
console.prefix = 'Types/Index'
export default async () => {
console.log(endpoint)
const typeArr: Array<TypeSimple> = []

View File

@ -6,6 +6,9 @@ import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs"
import { logger as console } from '@dzeio/logger'
console.prefix = 'Types/Item'
type typeCards = {
[key in Type]?: Array<Card>
}
@ -36,7 +39,7 @@ export default async () => {
const toSave: TypeSingle = {
id: rType,
name: TranslationUtil.translate("type", rType, lang),
cards: cards.map(el => cardToCardSimple(el, lang))
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`

View File

@ -1,5 +1,6 @@
import { promises as fs, promises } from 'fs'
import * as glob from 'glob'
import fetch from 'node-fetch'
const VERSION = 'v1'
@ -68,3 +69,18 @@ export function urlize(str: string): string {
str = str.normalize('NFD').replace(/[\u0300-\u036f]/g, "")
return str.replace(/ /g, "-").toLowerCase()
}
interface fileCacheInterface {
[key: string]: any
}
const fileCache: fileCacheInterface = {}
export async function fetchRemoteFile<T = any>(url: string): Promise<T> {
// console.log(Object.keys(fileCache))
if (!fileCache[url]) {
const resp = await fetch(url)
// console.log(await resp.text(), url)
fileCache[url] = resp.json()
}
return fileCache[url]
}

View File

@ -1 +1 @@
["Ken Sugimori","Keiji Kinebuchi","Mitsuhiro Arita","Tomoaki Imakuni","Kagemaru Himeno","Miki Tanaka","Shin-ichi Yoshida","Takumi Akabane","Sumiyoshi Kizuki","Atsuko Nishida","Christopher Rush","Benimaru Itoh","Hiromichi Sugiyama","Kunihiko Yuyama","Toshinao Aoki","Gakuji Nomoto","Tomokazu Komiya","Hironobu Yoshida","Hideki Kazama","Craig Turvey","Hajime Kusajima","Ayaka Yoshida","5ban Graphics","Daisuke Iwamoto","Kouki Saitou","Naoyo Kimura","match","Shin Nagasawa","Masakazu Fukuda","Naoki Saito","sui","MAHOU","Midori Harada","Kent Kanetsuna","Ryo Ueda","Yuri Umemura","Noriko Hotta","Eske Yoshinob","Akira Komayama","Satoshi Shirai","kawayoo","Kyoko Umemoto","Shigenori Negishi","Suwama Chiaki","Mizue","HiRON","Yusuke Ohmura","kirisAki","Toyste Beach","Sanosuke Sakuma","Megumi Mizutani","TOKIYA","Kanako Eo","Aya Kusube","Shizurow","hatachu","Sachiko Adachi","Yukiko Baba","Hitoshi Ariga","Hiroki Asanuma","Yuka Morii","James Turner","Reiko Tanoue","Maiko Fujiwara","Tomohiro Kitakaze","Hideaki Hakozaki","BERUBURI","Kouji Tajima","Illus.Direc.The Pokémon Company Art Team","Takashi Yamaguchi","Wataru Kawahara","Nakaoka","Mikiko Takeda","Hideyuki Nakajima","Shin-ichi Yoshikawa","Kai Ishikawa","Hiroaki Ito","Masahiko Ishii","Takabon","Kazuyuki Kano","Daisuke Ito","Emi Yoshida","Kenkichi Toyama","Hiroki Fuchino","Lee HyunJung","Satoshi Ohta","Takao Unno","Motofumi Fujiwara","Saya Tsuruta","Saya Tsuruta","Kazuaki Aihara","Ryota Saito","Makoto Imai","Yusuke Ishikawa","Masako Yamashita","Sachi Matoba","Yuichi Sawayama","Aimi Tomita","\"Big Mama\" Tagawa","Milky Isobe","Kimiya Masago","K. Hoshiba","Asuka Iwashita","Keiko Fukuyama","Hizuki Misono","Mikio Menjo","Kazuo Yazawa","Jungo Suzuki","Hisao Nakamura","Hikaru Koike","Katsura Tabata","Ken Ikuji","CR CG gangs","K. Hoshiba","Kyoko Koizumi","Zu-Ka","Yasuki Watanabe","Yusuke Shimada","Tomokazu","K. Utsunomiya","T. Honda","Mt. TBT","M. Akiyama","Atsuko Ujiie","Yosuke Da Silva","Big Mama\" Tagawa\"","Ken Ikugi","Tokumi Akabane","MikiTanaka","K Hoshiba","Emi Miwa","Midroi Harada","Tomoko Wakai","Shinji Higuchi","Shinji Higuchi + Sachiko Eba","Shinji Higuchi + Noriko Takaya","Wataru Kawahara/Direc. Shinji Higuchi","Kent Kanetsuna/Direc. Shinji Higuchi","Shinji Higuchi + Sachiko Eba/樋口真嗣 + 江場左知子","Shinji Higuchi + Sachiko Eba/樋口真嗣+江場左知子","Shinji Higuchi + Noriko Takaya/樋口真嗣+高屋法子","Imakuni?","Etsuya Hattori","Mana Ibe","Nobuyuki Fujimoto","Keiko Moritsugu","Framestore","MPC Film","Shibuzoh.","Yoshinobu Saito","kodama","Hasuno","chibi","Asako Ito","You Iribi","Eri Yamaki","DemizuPosuka","OOYAMA","PLANETA","Mina Nakai","miki kudo","Yumi","Anesaki Dynamic","Hiroyuki Yamamoto","Hideki Ishikawa","nagimiso","0313","sadaji","SATOSHI NAKAI","Sekio","otumami","PLANETA Igarashi","tetsuya koizumi","Misa Tsutsui","sowsow","kanahei","HYOGONOSUKE","Studio Bora Inc.","aky CG Works","so-taro","AKIRA EGAWA","PLANETA Tsuji","KEIICHIRO ITO","ryoma uratsuka","ConceptLab","PLANETA Otani","Pani Kobayashi","Ryuta Fuse","inose yukie","Ken Sugimori Yusuke Ohmura","Sakiko Maeda","Junsei Kuninobu","Uta","Noriko Uono","Nabana Kensaku","Ryota Murayama","Tomomi Kaneko","Misaki Hashimoto","Fumie Kittaka","Huang Tzu En","Avec Yoko","take","Emi Ando","2017 Pikachu Project","Taira Akitsu","Megumi Higuchi","Kazuma Koda","Jumpei Akasaka","Hasegawa Saki","GAME FREAK inc.","Dr.Ooyama","Rya Ueda","Nagimiso","Saki Hayashiro"]
["Ken Sugimori","Keiji Kinebuchi","Mitsuhiro Arita","Tomoaki Imakuni","Kagemaru Himeno","Miki Tanaka","Shin-ichi Yoshida","Takumi Akabane","Sumiyoshi Kizuki","Atsuko Nishida","Christopher Rush","Benimaru Itoh","Hiromichi Sugiyama","Kunihiko Yuyama","Toshinao Aoki","Gakuji Nomoto","Tomokazu Komiya","Hironobu Yoshida","Hideki Kazama","Craig Turvey","Hajime Kusajima","Ayaka Yoshida","5ban Graphics","Daisuke Iwamoto","Kouki Saitou","Naoyo Kimura","match","Shin Nagasawa","Masakazu Fukuda","Naoki Saito","sui","MAHOU","Midori Harada","Kent Kanetsuna","Ryo Ueda","Yuri Umemura","Noriko Hotta","Eske Yoshinob","Akira Komayama","Satoshi Shirai","kawayoo","Kyoko Umemoto","Shigenori Negishi","Suwama Chiaki","Mizue","HiRON","Yusuke Ohmura","kirisAki","Toyste Beach","Sanosuke Sakuma","Megumi Mizutani","TOKIYA","Kanako Eo","Aya Kusube","Shizurow","hatachu","Sachiko Adachi","Yukiko Baba","Hitoshi Ariga","Hiroki Asanuma","Yuka Morii","James Turner","Reiko Tanoue","Maiko Fujiwara","Tomohiro Kitakaze","Hideaki Hakozaki","BERUBURI","Kouji Tajima","Illus.Direc.The Pokémon Company Art Team","Takashi Yamaguchi","Wataru Kawahara","Nakaoka","Mikiko Takeda","Hideyuki Nakajima","Shin-ichi Yoshikawa","Kai Ishikawa","Hiroaki Ito","Masahiko Ishii","Takabon","Kazuyuki Kano","Daisuke Ito","Emi Yoshida","Kenkichi Toyama","Hiroki Fuchino","Lee HyunJung","Satoshi Ohta","Takao Unno","Motofumi Fujiwara","Saya Tsuruta","Saya Tsuruta","Kazuaki Aihara","Ryota Saito","Makoto Imai","Yusuke Ishikawa","Masako Yamashita","Sachi Matoba","Yuichi Sawayama","Aimi Tomita","\"Big Mama\" Tagawa","Milky Isobe","Kimiya Masago","K. Hoshiba","Asuka Iwashita","Keiko Fukuyama","Hizuki Misono","Mikio Menjo","Kazuo Yazawa","Jungo Suzuki","Hisao Nakamura","Hikaru Koike","Katsura Tabata","Ken Ikuji","CR CG gangs","K. Hoshiba","Kyoko Koizumi","Zu-Ka","Yasuki Watanabe","Yusuke Shimada","Tomokazu","K. Utsunomiya","T. Honda","Mt. TBT","M. Akiyama","Atsuko Ujiie","Yosuke Da Silva","Big Mama\" Tagawa\"","Ken Ikugi","Tokumi Akabane","MikiTanaka","K Hoshiba","Emi Miwa","Midroi Harada","Tomoko Wakai","Shinji Higuchi","Shinji Higuchi + Sachiko Eba","Shinji Higuchi + Noriko Takaya","Wataru Kawahara/Direc. Shinji Higuchi","Kent Kanetsuna/Direc. Shinji Higuchi","Shinji Higuchi + Sachiko Eba/樋口真嗣 + 江場左知子","Shinji Higuchi + Sachiko Eba/樋口真嗣+江場左知子","Shinji Higuchi + Noriko Takaya/樋口真嗣+高屋法子","Imakuni?","Etsuya Hattori","Mana Ibe","Nobuyuki Fujimoto","Keiko Moritsugu","Framestore","MPC Film","Shibuzoh.","Yoshinobu Saito","kodama","Hasuno","chibi","Asako Ito","You Iribi","Eri Yamaki","DemizuPosuka","OOYAMA","PLANETA","Mina Nakai","miki kudo","Yumi","Anesaki Dynamic","Hiroyuki Yamamoto","Hideki Ishikawa","nagimiso","0313","sadaji","SATOSHI NAKAI","Sekio","otumami","PLANETA Igarashi","tetsuya koizumi","Misa Tsutsui","sowsow","kanahei","HYOGONOSUKE","Studio Bora Inc.","aky CG Works","so-taro","AKIRA EGAWA","PLANETA Tsuji","KEIICHIRO ITO","ryoma uratsuka","ConceptLab","PLANETA Otani","Pani Kobayashi","Ryuta Fuse","inose yukie","Ken Sugimori Yusuke Ohmura","Sakiko Maeda","Junsei Kuninobu","Uta","Noriko Uono","Nabana Kensaku","Ryota Murayama","Tomomi Kaneko","Misaki Hashimoto","Fumie Kittaka","Huang Tzu En","Avec Yoko","take","Emi Ando","2017 Pikachu Project","Taira Akitsu","Megumi Higuchi","Kazuma Koda","Jumpei Akasaka","Hasegawa Saki","GAME FREAK inc.","Dr.Ooyama","Rya Ueda","Nagimiso","Saki Hayashiro","PLANETA Mochizuki","NC Empire","Tika Matsuno"]

View File

@ -9,16 +9,20 @@
"scripts": {
"db:compile": "cd db && tsc --project tsconfig.json",
"db:test": "cd db && tsc --noEmit --project tsconfig.json",
"gen": "yarn ts-node all.ts"
"gen": "ts-node --transpile-only all.ts"
},
"dependencies": {
"@dzeio/logger": "^2.0.0-alpha.0",
"@dzeio/object-util": "^1.0.4",
"@tcgdex/sdk": "^1.5.0",
"glob": "^7.1.6",
"node-fetch": "^2.6.0",
"ssh2-sftp-client": "^5.1.1"
},
"devDependencies": {
"@types/glob": "^7.1.1",
"@types/node": "^13.7.4",
"@types/node-fetch": "^2.5.7",
"ts-node": "^8.6.2",
"typescript": "^3.7.5"
}

148
yarn.lock
View File

@ -2,24 +2,30 @@
# yarn lockfile v1
"@tcgdex/sdk@^1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@tcgdex/sdk/-/sdk-1.5.0.tgz#892b5aa29ac55c399d5f8130615fc3898f5f76e6"
integrity sha512-oPWYQdV26eIywM1JRannDuE2mgn49eRjRfqw5sSi0jZMGFWwR7ZindUeSbUyghno2m4YxpgfJgAaxeyMhnYtkg==
"@dzeio/logger@^2.0.0-alpha.0":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@dzeio/logger/-/logger-2.0.2.tgz#a9d58fba6c0b5e181c3247a66d2e908936f52866"
integrity sha512-P5N7g9xIxyhr5AlW+PHKK5h0e7gF9Ha9hJQOSs02yssf09dCrRN6xd7BUrbLLemyLvy4wnQ9+IpvOR8KWB3ltA==
dependencies:
isomorphic-unfetch "^3.0.0"
ansi-colors "^4.1.1"
"@types/events@*":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
"@dzeio/object-util@^1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@dzeio/object-util/-/object-util-1.0.4.tgz#1cd8855e9437ec5b94c079421e74e913acec9847"
integrity sha512-poLW0k3BB345lQDqtaMiBpIHcglg4HCcg8FblAGZ0n/M0cOaeiq1kwRm2Z/6rIplelntWUrPqQRAUcr6DnAONQ==
"@tcgdex/sdk@^1.5.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@tcgdex/sdk/-/sdk-1.7.0.tgz#66c3891cbc044a7b9ab20c4a0b5cb1a5d3803fc6"
integrity sha512-LXswGVzVrx6enO71NhEhjiz1dqig7lC1AFVep7xt7HySGrNt/vTWPRjsgmKiHFivVoz2cLhULUacQL64A+5mBw==
dependencies:
isomorphic-unfetch "^3.1.0"
"@types/glob@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
version "7.1.3"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==
dependencies:
"@types/events" "*"
"@types/minimatch" "*"
"@types/node" "*"
@ -28,10 +34,28 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*", "@types/node@^13.7.4":
version "13.13.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54"
integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A==
"@types/node-fetch@^2.5.7":
version "2.5.8"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb"
integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw==
dependencies:
"@types/node" "*"
form-data "^3.0.0"
"@types/node@*":
version "14.14.22"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18"
integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==
"@types/node@^13.7.4":
version "13.13.40"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.40.tgz#f655ef327362cc83912f2e69336ddc62a24a9f88"
integrity sha512-eKaRo87lu1yAXrzEJl0zcJxfUMDT5/mZalFyOkT44rnQps41eS2pfWzbaulSPpQLFNy29bFqn+Y5lOTL8ATlEQ==
ansi-colors@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
arg@^4.1.0:
version "4.1.3"
@ -45,6 +69,11 @@ asn1@~0.2.0:
dependencies:
safer-buffer "~2.1.0"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@ -70,6 +99,13 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@ -85,11 +121,25 @@ concat-stream@^2.0.0:
readable-stream "^3.0.2"
typedarray "^0.0.6"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
form-data@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@ -120,19 +170,31 @@ inherits@2, inherits@^2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
isomorphic-unfetch@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.0.0.tgz#de6d80abde487b17de2c400a7ef9e5ecc2efb362"
integrity sha512-V0tmJSYfkKokZ5mgl0cmfQMTb7MLHsBMngTkbLY0eXvKqiVRRoZP04Ly+KhKrJfKtzC9E6Pp15Jo+bwh7Vi2XQ==
isomorphic-unfetch@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f"
integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==
dependencies:
node-fetch "^2.2.0"
unfetch "^4.0.0"
node-fetch "^2.6.1"
unfetch "^4.2.0"
make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
mime-db@1.45.0:
version "1.45.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
mime-types@^2.1.12:
version "2.1.28"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd"
integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==
dependencies:
mime-db "1.45.0"
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@ -140,10 +202,10 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
node-fetch@^2.2.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
node-fetch@^2.6.0, node-fetch@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
once@^1.3.0:
version "1.4.0"
@ -172,9 +234,9 @@ retry@^0.12.0:
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
safe-buffer@~5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safer-buffer@~2.1.0:
version "2.1.2"
@ -195,9 +257,9 @@ source-map@^0.6.0:
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
ssh2-sftp-client@^5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-5.1.2.tgz#8138f050c5933bbeb2f916f2a1513f124ad61116"
integrity sha512-pKmoDdxa4jwjMr+eZTm2IP8iYxuyM/O74rbz54t0UcETnRNmkLnv3NmKiFK5/hstacyO3WS4Tu8fRBGVGY0UAQ==
version "5.3.2"
resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-5.3.2.tgz#a7f4383b96468fde3ee8fe1b7f1db352c6160946"
integrity sha512-YD38WQKleuapAZyvqRJq7PN8pC6GnzWdWcnZN4vsPXMHtZpjcg/ipBcFGtDsC5rkHp5qXgRu56WPcDUkM87FiA==
dependencies:
concat-stream "^2.0.0"
retry "^0.12.0"
@ -232,9 +294,9 @@ string_decoder@^1.1.1:
safe-buffer "~5.2.0"
ts-node@^8.6.2:
version "8.9.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.0.tgz#d7bf7272dcbecd3a2aa18bd0b96c7d2f270c15d4"
integrity sha512-rwkXfOs9zmoHrV8xE++dmNd6ZIS+nmHHCxcV53ekGJrxFLMbp+pizpPS07ARvhwneCIECPppOwbZHvw9sQtU4w==
version "8.10.2"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d"
integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==
dependencies:
arg "^4.1.0"
diff "^4.0.1"
@ -253,14 +315,14 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript@^3.7.5:
version "3.8.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
version "3.9.7"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
unfetch@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db"
integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg==
unfetch@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be"
integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==
util-deprecate@^1.0.1:
version "1.0.2"