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"] [submodule "db"]
path = db path = db
url = https://git.delta-wings.net/tcgdex/db.git url = https://github.com/tcgdex/cards-database.git
[submodule "dist"] [submodule "dist"]
path = 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 cardIndex from './endpoints/cards/index'
import cardItem from './endpoints/cards/item' import cardItem from './endpoints/cards/item'
@ -31,14 +34,18 @@ import typesItem from './endpoints/types/item'
import tagsIndex from './endpoints/tags/index' import tagsIndex from './endpoints/tags/index'
import tagsItem from './endpoints/tags/item' import tagsItem from './endpoints/tags/item'
import { fetchRemoteFile } from './endpoints/util'
(async () => { (async () => {
console.log('Preparing Database Update') logger.log('Preparing Database Update')
await Promise.all([ 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([ await Promise.all([
cardIndex(), cardIndex(),
cardItem(), cardItem(),
@ -73,4 +80,5 @@ import tagsItem from './endpoints/tags/item'
tagsIndex(), tagsIndex(),
tagsItem(), 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 Category from "@tcgdex/sdk/interfaces/Category";
import { attackToAttackSingle } from "./attackUtil"; import { attackToAttackSingle } from "./attackUtil";
import { abilityToAbilitySingle } from "./abilityUtil"; import { abilityToAbilitySingle } from "./abilityUtil";
import { getExpansion } from "./expansionUtil"; import { getExpansion, getExpansionFromSetName } from "./expansionUtil";
import { getSet } from "./setUtil"; import { getSet } from "./setUtil";
import Expansion from "@tcgdex/sdk/interfaces/Expansion"; import Expansion from "@tcgdex/sdk/interfaces/Expansion";
import { fetchIllustratorsSync } from "./illustratorUtil"; import { fetchIllustratorsSync } from "./illustratorUtil";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"; 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 { return {
id: card.id, id: card.id,
localId: card.localId, localId: card.localId,
name: card.name[lang], 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)) return getExpansion(getSet(card))
} }
export function cardToCardSingle(card: Card, lang: Langs): CardSingle { export async function cardToCardSingle(card: Card, lang: Langs): Promise<CardSingle> {
const images: { let images: {
low: string, low: string;
high?: string high?: string;
} = card.image && { } = undefined
low: card.image.low[lang],
high: card.image.high && card.image.high[lang] 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 { return {

View File

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

View File

@ -17,8 +17,12 @@ export default async () => {
if (!isCardAvailable(card, lang)) continue if (!isCardAvailable(card, lang)) continue
await fs.mkdir(`${endpoint}/${card.id}/`, {recursive: true}) try {
await fs.writeFile(`${endpoint}/${card.id}/index.json`, JSON.stringify(cardToCardSingle(card, lang))) 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")) // 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 TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList" import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs' import { promises as fs } from 'fs'
import Logger from '@dzeio/logger'
const lang = process.env.CARDLANG as Langs || "en" const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "categories") const endpoint = getBaseFolder(lang, "categories")
const logger = new Logger('Category/Index')
export default async () => { export default async () => {
console.log(endpoint) logger.log(endpoint)
const list: Array<CategorySimple> = [] const list: Array<CategorySimple> = []
for (const cat of Object.values(Category)) { for (const cat of Object.values(Category)) {
@ -26,5 +29,5 @@ export default async () => {
await fs.mkdir(endpoint, {recursive: true}) await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res)) 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 = { const toSave: CategorySingle = {
id: rCat, id: rCat,
name: TranslationUtil.translate("category", rCat, lang), 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}` const index = `${endpoint}/${toSave.id}`

View File

@ -11,12 +11,33 @@ export function getExpansion(set: Set): Expansion {
return require(`../../db/expansions/${set.expansionCode}`) return require(`../../db/expansions/${set.expansionCode}`)
} }
export function getAllExpansions(): Array<string> { const setExpansionLink: Record<string, string> = {}
return glob.sync("./db/expansions/*.ts").map(el => el.substr(16, el.length-15-1-3)) // -15 = start -1 = 0 index -3 = .ts
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 { 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) { export function expansionToExpansionSimple(expansion: Expansion, lang: Langs) {

View File

@ -31,7 +31,7 @@ export default async () => {
const toSave: HpSingle = { const toSave: HpSingle = {
hp: hp as unknown as number, 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}) await fs.mkdir(`${endpoint}/${toSave.hp}/`, {recursive: true})

View File

@ -38,7 +38,7 @@ export default async () => {
const toSave: IllustratorSingle = { const toSave: IllustratorSingle = {
id: db.indexOf(illustrator), id: db.indexOf(illustrator),
name: 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}) 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 { promises as fs } from 'fs'
import Rarity, { RaritySimple, RarityList } from "@tcgdex/sdk/interfaces/Rarity" 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 lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "rarities") const endpoint = getBaseFolder(lang, "rarities")

View File

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

View File

@ -5,6 +5,9 @@ import { isCardAvailable } from "../cardUtil"
import { RetreatList } from '@tcgdex/sdk/interfaces/Retreat' import { RetreatList } from '@tcgdex/sdk/interfaces/Retreat'
import { Langs } from "@tcgdex/sdk/interfaces/LangList" 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 lang = (process.env.CARDLANG || "en") as Langs
const endpoint = getBaseFolder(lang, "retreat") const endpoint = getBaseFolder(lang, "retreat")

View File

@ -5,6 +5,9 @@ import { isCardAvailable, cardToCardSimple } from "../cardUtil"
import { RetreatSingle } from '@tcgdex/sdk/interfaces/Retreat' import { RetreatSingle } from '@tcgdex/sdk/interfaces/Retreat'
import { Langs } from "@tcgdex/sdk/interfaces/LangList" 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 lang = (process.env.CARDLANG || "en") as Langs
const endpoint = getBaseFolder(lang, "retreat") const endpoint = getBaseFolder(lang, "retreat")
@ -30,7 +33,7 @@ export default async () => {
const item: RetreatSingle = { const item: RetreatSingle = {
id: retreat as unknown as number, 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}) 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 cardes = getAllCards2(set.code)
const cards: Array<Card> = [] const cards: Array<Card> = []
for (let el of cardes) { for (let el of cardes) {
@ -57,16 +57,15 @@ export function getSetCards(set: Set, lang: Langs): Array<CardSimple> {
card card
) )
} }
return await Promise.all(cards.sort((a, b) => {
return cards.sort((a, b) => {
if (!isNaN(parseInt(a.localId + "")) && !isNaN(parseInt(b.localId + ""))) { if (!isNaN(parseInt(a.localId + "")) && !isNaN(parseInt(b.localId + ""))) {
return parseInt(a.localId + "") - parseInt(b.localId + "") return parseInt(a.localId + "") - parseInt(b.localId + "")
} }
return a.localId > b.localId ? 1 : -1 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 { return {
name: set.name[lang], name: set.name[lang],
code: set.code, code: set.code,
@ -85,6 +84,6 @@ export function setToSetSingle(set: Set, lang: Langs): SetSingle {
symbol: set.images.symbol, symbol: set.images.symbol,
logo: set.images.logo 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 { getAllSets, getBaseFolder } from "../util"
import { isSetAvailable, setToSetSimple } from "../setUtil" 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 lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets") 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 { promises as fs } from 'fs'
import { isSetAvailable, setToSetSingle } from "../setUtil" 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 lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets") const endpoint = getBaseFolder(lang, "sets")
@ -18,7 +21,7 @@ export default async () => {
if (!isSetAvailable(set, lang)) continue if (!isSetAvailable(set, lang)) continue
await fs.mkdir(`${endpoint}/${set.code}/`, {recursive: true}) 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 Card from "@tcgdex/sdk/interfaces/Card"
import { cardToCardSingle, isCardAvailable } from "../cardUtil" 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 lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets") const endpoint = getBaseFolder(lang, "sets")
@ -28,7 +32,7 @@ export default async () => {
if (!isCardAvailable(card, lang)) continue if (!isCardAvailable(card, lang)) continue
await fs.mkdir(`${endpoint}/${set.code}/${card.localId}`, {recursive: true}) 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 { promises as fs } from 'fs'
import Tag, { TagSimple, TagList } from "@tcgdex/sdk/interfaces/Tag" 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 lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "tags") const endpoint = getBaseFolder(lang, "tags")
export default async () => { export default async () => {
console.log(endpoint) logger.log(endpoint)
const list: Array<TagSimple> = [] const list: Array<TagSimple> = []
for (const cat of Object.values(Tag)) { for (const cat of Object.values(Tag)) {
@ -26,5 +29,5 @@ export default async () => {
await fs.mkdir(endpoint, {recursive: true}) await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res)) 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 { 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 Type, { TypeSingle } from "@tcgdex/sdk/interfaces/Type"
import Card from "@tcgdex/sdk/interfaces/Card" import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList" import { Langs } from "@tcgdex/sdk/interfaces/LangList"
@ -7,6 +7,10 @@ import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs" import { promises } from "fs"
import Tag, { TagSingle } from "@tcgdex/sdk/interfaces/Tag" 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 = { type tagCards = {
[key in Tag]?: Array<Card> [key in Tag]?: Array<Card>
} }
@ -16,28 +20,31 @@ const endpoint = getBaseFolder(lang, "tags")
export default async () => { export default async () => {
console.log(endpoint) logger.log('part 1')
const list = getAllCards() const list = getAllCards()
const arr: tagCards = {} const arr: tagCards = {}
for (const i of list) { 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) { for (const tag of card.tags) {
if (!(tag in arr)) arr[tag] = [] if (!(tag in arr)) arr[tag] = []
arr[tag].push(card) arr[tag].push(card)
} }
} }
logger.log('part 2')
for (const type in arr) { for (const type in arr) {
if (arr.hasOwnProperty(type)) { if (arr.hasOwnProperty(type)) {
const cards: Array<Card> = arr[type]; const cards: Array<Card> = arr[type];
const rTag: Tag = parseInt(type) const rTag: Tag = parseInt(type)
logger.log('Working on tag', TranslationUtil.translate("tag", rTag, lang), `${type}/${objectSize(arr)}`)
const toSave: TagSingle = { const toSave: TagSingle = {
id: rTag, id: rTag,
name: TranslationUtil.translate("tag", rTag, lang), 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}` const index = `${endpoint}/${toSave.id}`
@ -50,5 +57,5 @@ export default async () => {
await promises.writeFile(`${name}/index.json`, JSON.stringify(toSave)) 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 lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "types") const endpoint = getBaseFolder(lang, "types")
import { logger as console } from '@dzeio/logger'
console.prefix = 'Types/Index'
export default async () => { export default async () => {
console.log(endpoint) console.log(endpoint)
const typeArr: Array<TypeSimple> = [] const typeArr: Array<TypeSimple> = []

View File

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

View File

@ -1,5 +1,6 @@
import { promises as fs, promises } from 'fs' import { promises as fs, promises } from 'fs'
import * as glob from 'glob' import * as glob from 'glob'
import fetch from 'node-fetch'
const VERSION = 'v1' const VERSION = 'v1'
@ -68,3 +69,18 @@ export function urlize(str: string): string {
str = str.normalize('NFD').replace(/[\u0300-\u036f]/g, "") str = str.normalize('NFD').replace(/[\u0300-\u036f]/g, "")
return str.replace(/ /g, "-").toLowerCase() 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": { "scripts": {
"db:compile": "cd db && tsc --project tsconfig.json", "db:compile": "cd db && tsc --project tsconfig.json",
"db:test": "cd db && tsc --noEmit --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": { "dependencies": {
"@dzeio/logger": "^2.0.0-alpha.0",
"@dzeio/object-util": "^1.0.4",
"@tcgdex/sdk": "^1.5.0", "@tcgdex/sdk": "^1.5.0",
"glob": "^7.1.6", "glob": "^7.1.6",
"node-fetch": "^2.6.0",
"ssh2-sftp-client": "^5.1.1" "ssh2-sftp-client": "^5.1.1"
}, },
"devDependencies": { "devDependencies": {
"@types/glob": "^7.1.1", "@types/glob": "^7.1.1",
"@types/node": "^13.7.4", "@types/node": "^13.7.4",
"@types/node-fetch": "^2.5.7",
"ts-node": "^8.6.2", "ts-node": "^8.6.2",
"typescript": "^3.7.5" "typescript": "^3.7.5"
} }

148
yarn.lock
View File

@ -2,24 +2,30 @@
# yarn lockfile v1 # yarn lockfile v1
"@tcgdex/sdk@^1.5.0": "@dzeio/logger@^2.0.0-alpha.0":
version "1.5.0" version "2.0.2"
resolved "https://registry.yarnpkg.com/@tcgdex/sdk/-/sdk-1.5.0.tgz#892b5aa29ac55c399d5f8130615fc3898f5f76e6" resolved "https://registry.yarnpkg.com/@dzeio/logger/-/logger-2.0.2.tgz#a9d58fba6c0b5e181c3247a66d2e908936f52866"
integrity sha512-oPWYQdV26eIywM1JRannDuE2mgn49eRjRfqw5sSi0jZMGFWwR7ZindUeSbUyghno2m4YxpgfJgAaxeyMhnYtkg== integrity sha512-P5N7g9xIxyhr5AlW+PHKK5h0e7gF9Ha9hJQOSs02yssf09dCrRN6xd7BUrbLLemyLvy4wnQ9+IpvOR8KWB3ltA==
dependencies: dependencies:
isomorphic-unfetch "^3.0.0" ansi-colors "^4.1.1"
"@types/events@*": "@dzeio/object-util@^1.0.4":
version "3.0.0" version "1.0.4"
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" resolved "https://registry.yarnpkg.com/@dzeio/object-util/-/object-util-1.0.4.tgz#1cd8855e9437ec5b94c079421e74e913acec9847"
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 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": "@types/glob@^7.1.1":
version "7.1.1" version "7.1.3"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==
dependencies: dependencies:
"@types/events" "*"
"@types/minimatch" "*" "@types/minimatch" "*"
"@types/node" "*" "@types/node" "*"
@ -28,10 +34,28 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*", "@types/node@^13.7.4": "@types/node-fetch@^2.5.7":
version "13.13.2" version "2.5.8"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb"
integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A== 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: arg@^4.1.0:
version "4.1.3" version "4.1.3"
@ -45,6 +69,11 @@ asn1@~0.2.0:
dependencies: dependencies:
safer-buffer "~2.1.0" 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: balanced-match@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 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" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 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: concat-map@0.0.1:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 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" readable-stream "^3.0.2"
typedarray "^0.0.6" 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: diff@^4.0.1:
version "4.0.2" version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 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: fs.realpath@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 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" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
isomorphic-unfetch@^3.0.0: isomorphic-unfetch@^3.1.0:
version "3.0.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.0.0.tgz#de6d80abde487b17de2c400a7ef9e5ecc2efb362" resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f"
integrity sha512-V0tmJSYfkKokZ5mgl0cmfQMTb7MLHsBMngTkbLY0eXvKqiVRRoZP04Ly+KhKrJfKtzC9E6Pp15Jo+bwh7Vi2XQ== integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==
dependencies: dependencies:
node-fetch "^2.2.0" node-fetch "^2.6.1"
unfetch "^4.0.0" unfetch "^4.2.0"
make-error@^1.1.1: make-error@^1.1.1:
version "1.3.6" version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 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: minimatch@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@ -140,10 +202,10 @@ minimatch@^3.0.4:
dependencies: dependencies:
brace-expansion "^1.1.7" brace-expansion "^1.1.7"
node-fetch@^2.2.0: node-fetch@^2.6.0, node-fetch@^2.6.1:
version "2.6.0" version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
once@^1.3.0: once@^1.3.0:
version "1.4.0" version "1.4.0"
@ -172,9 +234,9 @@ retry@^0.12.0:
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
safe-buffer@~5.2.0: safe-buffer@~5.2.0:
version "5.2.0" version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safer-buffer@~2.1.0: safer-buffer@~2.1.0:
version "2.1.2" version "2.1.2"
@ -195,9 +257,9 @@ source-map@^0.6.0:
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
ssh2-sftp-client@^5.1.1: ssh2-sftp-client@^5.1.1:
version "5.1.2" version "5.3.2"
resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-5.1.2.tgz#8138f050c5933bbeb2f916f2a1513f124ad61116" resolved "https://registry.yarnpkg.com/ssh2-sftp-client/-/ssh2-sftp-client-5.3.2.tgz#a7f4383b96468fde3ee8fe1b7f1db352c6160946"
integrity sha512-pKmoDdxa4jwjMr+eZTm2IP8iYxuyM/O74rbz54t0UcETnRNmkLnv3NmKiFK5/hstacyO3WS4Tu8fRBGVGY0UAQ== integrity sha512-YD38WQKleuapAZyvqRJq7PN8pC6GnzWdWcnZN4vsPXMHtZpjcg/ipBcFGtDsC5rkHp5qXgRu56WPcDUkM87FiA==
dependencies: dependencies:
concat-stream "^2.0.0" concat-stream "^2.0.0"
retry "^0.12.0" retry "^0.12.0"
@ -232,9 +294,9 @@ string_decoder@^1.1.1:
safe-buffer "~5.2.0" safe-buffer "~5.2.0"
ts-node@^8.6.2: ts-node@^8.6.2:
version "8.9.0" version "8.10.2"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.0.tgz#d7bf7272dcbecd3a2aa18bd0b96c7d2f270c15d4" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d"
integrity sha512-rwkXfOs9zmoHrV8xE++dmNd6ZIS+nmHHCxcV53ekGJrxFLMbp+pizpPS07ARvhwneCIECPppOwbZHvw9sQtU4w== integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==
dependencies: dependencies:
arg "^4.1.0" arg "^4.1.0"
diff "^4.0.1" diff "^4.0.1"
@ -253,14 +315,14 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript@^3.7.5: typescript@^3.7.5:
version "3.8.3" version "3.9.7"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
unfetch@^4.0.0: unfetch@^4.2.0:
version "4.1.0" version "4.2.0"
resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be"
integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==
util-deprecate@^1.0.1: util-deprecate@^1.0.1:
version "1.0.2" version "1.0.2"