mirror of
https://github.com/tcgdex/compiler.git
synced 2025-04-22 10:42:09 +00:00
Initial Compiler
Signed-off-by: Avior <florian.bouillon@delta-wings.net>
This commit is contained in:
commit
552e4b49fa
39
.drone.yml
Normal file
39
.drone.yml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
kind: pipeline
|
||||||
|
name: default
|
||||||
|
type: docker
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: submodules
|
||||||
|
image: alpine/git
|
||||||
|
commands:
|
||||||
|
- git submodule update --init --recursive
|
||||||
|
- git submodule foreach git checkout master
|
||||||
|
- git submodule foreach git pull origin master
|
||||||
|
|
||||||
|
- name: prepare
|
||||||
|
image: node:alpine
|
||||||
|
commands:
|
||||||
|
- apk -q add yarn
|
||||||
|
- yarn
|
||||||
|
- yarn cards:compile
|
||||||
|
|
||||||
|
- name: compile
|
||||||
|
image: node:alpine
|
||||||
|
commands:
|
||||||
|
- apk -q add yarn
|
||||||
|
- yarn gen:all
|
||||||
|
|
||||||
|
- name: push
|
||||||
|
image: alpine/git
|
||||||
|
commands:
|
||||||
|
- cd dist
|
||||||
|
- git config --global user.email "$PUSH_EMAIL"
|
||||||
|
- git config --global user.name "$PUSH_NAME"
|
||||||
|
- git add .
|
||||||
|
- git commit -m "Updated API"
|
||||||
|
- git push -u origin master
|
||||||
|
environment:
|
||||||
|
PUSH_EMAIL:
|
||||||
|
from_secret: PUSH_EMAIL
|
||||||
|
PUSH_NAME:
|
||||||
|
from_secret: PUSH_NAME
|
12
.editorconfig
Normal file
12
.editorconfig
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.yml]
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
node_modules
|
10
.gitmodules
vendored
Normal file
10
.gitmodules
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[submodule "db"]
|
||||||
|
path = db
|
||||||
|
url = https://git.delta-wings.net/tcgdex/db.git
|
||||||
|
|
||||||
|
[submodule "dist"]
|
||||||
|
path = dist
|
||||||
|
url = https://git.delta-wings.net/tcgdex/compiled.git
|
||||||
|
[submodule "sdk"]
|
||||||
|
path = sdk
|
||||||
|
url = https://git.delta-wings.net/tcgdex/javascript-sdk.git
|
1
db
Submodule
1
db
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit be94e712b87623615025eb21c0d363f2ad89a423
|
1
dist
Submodule
1
dist
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 34f7f45aaef1f1158b987bf8bfaee3dd72a66650
|
10
endpoints/RarityUtil.ts
Normal file
10
endpoints/RarityUtil.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import Rarity from "../db/interfaces/Rarity";
|
||||||
|
import { Langs } from "../db/interfaces/LangList";
|
||||||
|
import { raritySimple } from "./rarities/rarity";
|
||||||
|
|
||||||
|
export function rarityToRaritySimple(rarity: Rarity, lang: Langs): raritySimple {
|
||||||
|
return {
|
||||||
|
id: rarity,
|
||||||
|
name: Rarity.toLang(rarity, lang)
|
||||||
|
}
|
||||||
|
}
|
10
endpoints/TagUtil.ts
Normal file
10
endpoints/TagUtil.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import Tag from "../db/interfaces/Tag";
|
||||||
|
import { Langs } from "../db/interfaces/LangList";
|
||||||
|
import { tagSimple } from "./tags/tag";
|
||||||
|
|
||||||
|
export function tagToTagSimple(tag: Tag, lang: Langs): tagSimple {
|
||||||
|
return {
|
||||||
|
id: tag,
|
||||||
|
name: Tag.toLang(tag, lang)
|
||||||
|
}
|
||||||
|
}
|
0
endpoints/abilities-type/.gitkeep
Normal file
0
endpoints/abilities-type/.gitkeep
Normal file
0
endpoints/abilities/.gitkeep
Normal file
0
endpoints/abilities/.gitkeep
Normal file
21
endpoints/abilityUtil.ts
Normal file
21
endpoints/abilityUtil.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import Ability from "../db/interfaces/Ability";
|
||||||
|
import { Langs } from "../db/interfaces/LangList";
|
||||||
|
import { abilitySimple, abilitySingle } from "./abilities/ability";
|
||||||
|
import AbilityType from "../db/interfaces/AbilityType";
|
||||||
|
|
||||||
|
export function abilityToAbilitySimple(ability: Ability, lang: Langs): abilitySimple {
|
||||||
|
return {
|
||||||
|
name: ability.name[lang]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function abilityToAbilitySingle(ability: Ability, lang: Langs): abilitySingle {
|
||||||
|
return {
|
||||||
|
name: ability.name[lang],
|
||||||
|
text: ability.text[lang],
|
||||||
|
type: {
|
||||||
|
id: ability.type,
|
||||||
|
name: AbilityType.toLang(ability.type, lang)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
endpoints/attackUtil.ts
Normal file
13
endpoints/attackUtil.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import Attack from "../db/interfaces/Attack";
|
||||||
|
import { Langs } from "../db/interfaces/LangList";
|
||||||
|
import { attackSingle } from "./attacks/attack";
|
||||||
|
import Type from "../db/interfaces/Type";
|
||||||
|
|
||||||
|
export function attackToAttackSingle(attack: Attack, lang: Langs): attackSingle {
|
||||||
|
return {
|
||||||
|
name: attack.name[lang],
|
||||||
|
cost: attack.cost && attack.cost.map(el => Type.toLang(el, lang)),
|
||||||
|
text: attack.text && attack.text[lang],
|
||||||
|
damage: attack.damage && attack.damage
|
||||||
|
}
|
||||||
|
}
|
0
endpoints/attacks-by-cost/.gitkeep
Normal file
0
endpoints/attacks-by-cost/.gitkeep
Normal file
0
endpoints/attacks-by-type/.gitkeep
Normal file
0
endpoints/attacks-by-type/.gitkeep
Normal file
0
endpoints/attacks/.gitkeep
Normal file
0
endpoints/attacks/.gitkeep
Normal file
90
endpoints/cardUtil.ts
Normal file
90
endpoints/cardUtil.ts
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
import { CardSimple, CardSingle } from "../sdk/dist/types/interfaces/Card";
|
||||||
|
import Card from "../db/interfaces/Card";
|
||||||
|
import { Langs } from "../db/interfaces/LangList";
|
||||||
|
import { typeToTypeSimple } from "./typeUtil";
|
||||||
|
import { rarityToRaritySimple } from "./RarityUtil";
|
||||||
|
import { tagToTagSimple } from "./TagUtil";
|
||||||
|
import Category from "../db/interfaces/Category";
|
||||||
|
import { attackToAttackSingle } from "./attackUtil";
|
||||||
|
import { abilityToAbilitySingle } from "./abilityUtil";
|
||||||
|
import { getExpansion } from "./expansionUtil";
|
||||||
|
import { getSet } from "./setUtil";
|
||||||
|
import Expansion from "../db/interfaces/Expansion";
|
||||||
|
|
||||||
|
export function cardToCardSimple(card: Card, lang: Langs): CardSimple {
|
||||||
|
return {
|
||||||
|
id: card.id,
|
||||||
|
name: card.name[lang],
|
||||||
|
image: card.image && card.image.low[lang]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCardExpansion(card: Card): Expansion {
|
||||||
|
return getExpansion(getSet(card))
|
||||||
|
}
|
||||||
|
|
||||||
|
export function cardToCardSingle(card: Card, lang: Langs): CardSingle {
|
||||||
|
|
||||||
|
const images: {
|
||||||
|
low: string,
|
||||||
|
high?: string
|
||||||
|
} = card.image && {
|
||||||
|
low: card.image.low[lang],
|
||||||
|
high: card.image.high && card.image.high[lang]
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: card.id,
|
||||||
|
localId: card.localId,
|
||||||
|
dexId: card.dexId,
|
||||||
|
|
||||||
|
name: card.name[lang],
|
||||||
|
hp: card.hp,
|
||||||
|
type: card.type && card.type.map((el) => typeToTypeSimple(el, lang)),
|
||||||
|
|
||||||
|
image: images,
|
||||||
|
|
||||||
|
evolveFrom: card.evolveFrom && card.evolveFrom[lang],
|
||||||
|
evolveTo: card.evolveTo && card.evolveTo.map((el) => el[lang]),
|
||||||
|
tags: card.tags.map((el) => tagToTagSimple(el, lang)),
|
||||||
|
illustrator: {
|
||||||
|
id: 0,
|
||||||
|
name: typeof card.illustrator === "object" ? card.illustrator.name : card.illustrator,
|
||||||
|
},
|
||||||
|
|
||||||
|
abilities: card.abilities && card.abilities.map((el) => abilityToAbilitySingle(el, lang)),
|
||||||
|
|
||||||
|
attacks: card.attacks && card.attacks.map(el => attackToAttackSingle(el, lang)),
|
||||||
|
|
||||||
|
effect: card.effect && card.effect[lang],
|
||||||
|
|
||||||
|
weaknesses: card.weaknesses && card.weaknesses.map(el => {return {type: typeToTypeSimple(el.type, lang), value: el.value}}),
|
||||||
|
resistances: card.resistances && card.resistances.map(el => {return {type: typeToTypeSimple(el.type, lang), value: el.value}}),
|
||||||
|
|
||||||
|
retreat: card.retreat && card.retreat,
|
||||||
|
|
||||||
|
rarity: rarityToRaritySimple(card.rarity, lang),
|
||||||
|
|
||||||
|
category: {
|
||||||
|
id: card.category,
|
||||||
|
name: Category.toLang(card.category, lang)
|
||||||
|
},
|
||||||
|
|
||||||
|
set: {
|
||||||
|
name: typeof card.set.name === "object" ? card.set.name[lang] : card.set.name,
|
||||||
|
code: card.set.code
|
||||||
|
},
|
||||||
|
|
||||||
|
cardTypes: card.cardTypes && card.cardTypes
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isCardAvailable(card: Card, lang: Langs): boolean {
|
||||||
|
if (!(lang in card.name)) return false
|
||||||
|
const set = getSet(card)
|
||||||
|
if ("availability" in set && (lang in set.availability)) {
|
||||||
|
return set.availability[lang]
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
38
endpoints/cards/index.ts
Normal file
38
endpoints/cards/index.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import Card from "../../db/interfaces/Card"
|
||||||
|
import { Langs } from "../../db/interfaces/LangList"
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import { CardList, CardSimple } from "../../sdk/dist/types/interfaces/Card"
|
||||||
|
import { cardToCardSimple, isCardAvailable } from "../cardUtil"
|
||||||
|
import { getBaseFolder, getAllCards2 } from "../util"
|
||||||
|
|
||||||
|
const lang = process.env.CARDLANG as Langs || "en"
|
||||||
|
|
||||||
|
const endpoint = getBaseFolder(lang, "cards")
|
||||||
|
|
||||||
|
const bootstrap = async () => {
|
||||||
|
const list = await getAllCards2()
|
||||||
|
const items: Array<CardSimple> = []
|
||||||
|
for (let el of list) {
|
||||||
|
el = el.replace("./", "../../")
|
||||||
|
const card: Card = require(el).default
|
||||||
|
|
||||||
|
console.log(el)
|
||||||
|
if (!isCardAvailable(card, lang)) continue
|
||||||
|
items.push(
|
||||||
|
cardToCardSimple(card, lang)
|
||||||
|
)
|
||||||
|
|
||||||
|
// if (if (typeof card.set.availability === "undefined"))
|
||||||
|
}
|
||||||
|
|
||||||
|
const cardList: CardList = {
|
||||||
|
count: items.length,
|
||||||
|
list: items
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.mkdir(`${endpoint}`, {recursive: true})
|
||||||
|
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(cardList))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap()
|
28
endpoints/cards/item.ts
Normal file
28
endpoints/cards/item.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { getAllCards2, getBaseFolder } from "..//util"
|
||||||
|
import Card from "../../db/interfaces/Card"
|
||||||
|
import { Langs } from "../../db/interfaces/LangList"
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import { cardToCardSingle, isCardAvailable } from "../cardUtil"
|
||||||
|
|
||||||
|
const lang = process.env.CARDLANG as Langs || "en"
|
||||||
|
|
||||||
|
const endpoint = getBaseFolder(lang, "cards")
|
||||||
|
|
||||||
|
const bootstrap = async () => {
|
||||||
|
const list = await getAllCards2()
|
||||||
|
console.log(list)
|
||||||
|
for (let el of list) {
|
||||||
|
el = el.replace("./", "../../")
|
||||||
|
const card: Card = require(el).default
|
||||||
|
|
||||||
|
console.log(el)
|
||||||
|
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)))
|
||||||
|
|
||||||
|
// if (if (typeof card.set.availability === "undefined"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap()
|
7
endpoints/expansionUtil.ts
Normal file
7
endpoints/expansionUtil.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import Expansion from "../db/interfaces/Expansion"
|
||||||
|
import Set from "../db/interfaces/Set"
|
||||||
|
|
||||||
|
export function getExpansion(set: Set): Expansion {
|
||||||
|
if ("expansion" in set) return set.expansion
|
||||||
|
return require(`../../db/expansions/${set.expansionCode}`)
|
||||||
|
}
|
0
endpoints/resistances/.gitkeep
Normal file
0
endpoints/resistances/.gitkeep
Normal file
36
endpoints/retreat/index.ts
Normal file
36
endpoints/retreat/index.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import Card from "../../db/interfaces/Card"
|
||||||
|
import { getAllCards2, getBaseFolder } from "../util"
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import { isCardAvailable } from "../cardUtil"
|
||||||
|
import { RetreatList } from '../../sdk/dist/types/interfaces/Retreat'
|
||||||
|
import { Langs } from "../../db/interfaces/LangList"
|
||||||
|
|
||||||
|
const lang = (process.env.CARDLANG || "en") as Langs
|
||||||
|
const endpoint = getBaseFolder(lang, "retreat")
|
||||||
|
|
||||||
|
const btsp = async () => {
|
||||||
|
const files = await getAllCards2()
|
||||||
|
const count: Array<number> = []
|
||||||
|
for (let file of files) {
|
||||||
|
file = file.replace("./", "../../")
|
||||||
|
const card: Card = await require(file).default
|
||||||
|
|
||||||
|
if (
|
||||||
|
!isCardAvailable(card, lang) ||
|
||||||
|
!card.retreat ||
|
||||||
|
count.includes(card.retreat)
|
||||||
|
) continue
|
||||||
|
console.log(file)
|
||||||
|
count.push(card.retreat)
|
||||||
|
}
|
||||||
|
|
||||||
|
const list: RetreatList = {
|
||||||
|
count: count.length,
|
||||||
|
list: count
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.mkdir(endpoint, {recursive: true})
|
||||||
|
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(list))
|
||||||
|
}
|
||||||
|
|
||||||
|
btsp()
|
42
endpoints/retreat/item.ts
Normal file
42
endpoints/retreat/item.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import Card from "../../db/interfaces/Card"
|
||||||
|
import { getAllCards2, getBaseFolder } from "../util"
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import { isCardAvailable, cardToCardSimple } from "../cardUtil"
|
||||||
|
import { RetreatSingle } from '../../sdk/dist/types/interfaces/Retreat'
|
||||||
|
import { Langs } from "../../db/interfaces/LangList"
|
||||||
|
|
||||||
|
const lang = (process.env.CARDLANG || "en") as Langs
|
||||||
|
const endpoint = getBaseFolder(lang, "retreat")
|
||||||
|
|
||||||
|
const btsp = async () => {
|
||||||
|
const files = await getAllCards2()
|
||||||
|
const count: Array<Array<Card>> = []
|
||||||
|
for (let file of files) {
|
||||||
|
file = file.replace("./", "../../")
|
||||||
|
const card: Card = await require(file).default
|
||||||
|
|
||||||
|
if (
|
||||||
|
!isCardAvailable(card, lang) ||
|
||||||
|
!card.retreat
|
||||||
|
) continue
|
||||||
|
console.log(file)
|
||||||
|
if (!(card.retreat in count)) count[card.retreat] = []
|
||||||
|
count[card.retreat].push(card)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const retreat in count) {
|
||||||
|
if (count.hasOwnProperty(retreat)) {
|
||||||
|
const cardArr = count[retreat];
|
||||||
|
|
||||||
|
const item: RetreatSingle = {
|
||||||
|
id: retreat as unknown as number,
|
||||||
|
cards: cardArr.map((val) => cardToCardSimple(val, lang))
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.mkdir(`${endpoint}/${item.id}`, {recursive: true})
|
||||||
|
await fs.writeFile(`${endpoint}/${item.id}/index.json`, JSON.stringify(item))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
btsp()
|
80
endpoints/setUtil.ts
Normal file
80
endpoints/setUtil.ts
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
import Set from "../db/interfaces/Set"
|
||||||
|
import Card from "../db/interfaces/Card"
|
||||||
|
import * as glob from 'glob'
|
||||||
|
import { Langs } from "../db/interfaces/LangList"
|
||||||
|
import { SetSimple, SetSingle } from "../sdk/dist/types/interfaces/Set"
|
||||||
|
import { cardToCardSimple } from "./cardUtil"
|
||||||
|
import { CardSimple } from "../sdk/dist/types/interfaces/Card"
|
||||||
|
import { getAllCards2 } from "./util"
|
||||||
|
|
||||||
|
interface t<T = Set> {
|
||||||
|
[key: string]: T
|
||||||
|
}
|
||||||
|
|
||||||
|
const setCache: t = {}
|
||||||
|
|
||||||
|
export function isSet(set: Set | {name: string, code: string}): set is Set {
|
||||||
|
return "releaseDate" in set
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getSet(card: Card): Set {
|
||||||
|
if (!(card.set.code in setCache)) {
|
||||||
|
if (isSet(card.set)) setCache[card.set.code] = card.set
|
||||||
|
console.log(card.set.code)
|
||||||
|
let setPath = glob.sync(`./db/sets/**/${card.set.code}.js`)[0]
|
||||||
|
setPath = setPath.replace('./', '../')
|
||||||
|
setCache[card.set.code] = require(setPath).default
|
||||||
|
}
|
||||||
|
return setCache[card.set.code]
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isSetAvailable(set: Set, lang: Langs) {
|
||||||
|
if (!set.availability || !(lang in set.availability)) return true
|
||||||
|
return set.availability
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setToSetSimple(set: Set, lang: Langs): SetSimple {
|
||||||
|
return {
|
||||||
|
code: set.code,
|
||||||
|
name: set.name[lang],
|
||||||
|
total: set.cardCount.total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getSetCards(set: Set, lang: Langs): Array<CardSimple> {
|
||||||
|
const cards = getAllCards2(set.code)
|
||||||
|
const items: Array<CardSimple> = []
|
||||||
|
for (let el of cards) {
|
||||||
|
el = el.replace("./", "../")
|
||||||
|
const card: Card = require(el).default
|
||||||
|
|
||||||
|
items.push(
|
||||||
|
cardToCardSimple(card, lang)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return items
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setToSetSingle(set: Set, lang: Langs): SetSingle {
|
||||||
|
return {
|
||||||
|
name: set.name[lang],
|
||||||
|
code: set.code,
|
||||||
|
expansionCode: set.expansion && set.expansion.code || set.expansionCode || undefined,
|
||||||
|
tcgoCode: set.tcgoCode,
|
||||||
|
cardCount: {
|
||||||
|
total: set.cardCount.total,
|
||||||
|
official: set.cardCount.official
|
||||||
|
},
|
||||||
|
releaseDate: set.releaseDate,
|
||||||
|
legal: set.legal && {
|
||||||
|
standard: set.legal.standard,
|
||||||
|
expanded: set.legal.expanded
|
||||||
|
},
|
||||||
|
images: set.images && {
|
||||||
|
symbol: set.images.symbol,
|
||||||
|
logo: set.images.logo
|
||||||
|
},
|
||||||
|
list: getSetCards(set, lang)
|
||||||
|
}
|
||||||
|
}
|
38
endpoints/sets/index.ts
Normal file
38
endpoints/sets/index.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import Set from "../../db/interfaces/Set"
|
||||||
|
import { Langs } from "../../db/interfaces/LangList"
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import { SetSimple, SetList } from "../../sdk/dist/types/interfaces/Set"
|
||||||
|
import { getAllSets, getBaseFolder } from "../util"
|
||||||
|
import { isSetAvailable, setToSetSimple } from "../setUtil"
|
||||||
|
|
||||||
|
const lang = process.env.CARDLANG as Langs || "en"
|
||||||
|
|
||||||
|
const endpoint = getBaseFolder(lang, "sets")
|
||||||
|
|
||||||
|
const bootstrap = async () => {
|
||||||
|
const list = await getAllSets()
|
||||||
|
const items: Array<SetSimple> = []
|
||||||
|
for (let el of list) {
|
||||||
|
el = el.replace("./", "../../")
|
||||||
|
const set: Set = require(el).default
|
||||||
|
|
||||||
|
console.log(el)
|
||||||
|
if (!isSetAvailable(set, lang)) continue
|
||||||
|
items.push(
|
||||||
|
setToSetSimple(set, lang)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const cardList: SetList = {
|
||||||
|
count: items.length,
|
||||||
|
list: items
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.mkdir(`${endpoint}`, {recursive: true})
|
||||||
|
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(cardList))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Building sets/index")
|
||||||
|
|
||||||
|
bootstrap()
|
28
endpoints/sets/item.ts
Normal file
28
endpoints/sets/item.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { getBaseFolder, getAllSets } from "../util"
|
||||||
|
import Set from "../../db/interfaces/Set"
|
||||||
|
import { Langs } from "../../db/interfaces/LangList"
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import { isSetAvailable, setToSetSingle } from "../setUtil"
|
||||||
|
|
||||||
|
const lang = process.env.CARDLANG as Langs || "en"
|
||||||
|
|
||||||
|
const endpoint = getBaseFolder(lang, "sets")
|
||||||
|
|
||||||
|
const bootstrap = async () => {
|
||||||
|
const list = await getAllSets()
|
||||||
|
for (let el of list) {
|
||||||
|
el = el.replace("./", "../../")
|
||||||
|
const set: Set = require(el).default
|
||||||
|
|
||||||
|
if (!isSetAvailable(set, lang)) continue
|
||||||
|
console.log(el)
|
||||||
|
|
||||||
|
await fs.mkdir(`${endpoint}/${set.code}/`, {recursive: true})
|
||||||
|
await fs.writeFile(`${endpoint}/${set.code}/index.json`, JSON.stringify(setToSetSingle(set, lang)))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
console.log("Building sets/item")
|
||||||
|
|
||||||
|
bootstrap()
|
42
endpoints/sets/subitem.ts
Normal file
42
endpoints/sets/subitem.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import { getBaseFolder, getAllSets } from "../util"
|
||||||
|
import Set from "../../db/interfaces/Set"
|
||||||
|
import { Langs } from "../../db/interfaces/LangList"
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import { isSetAvailable } from "../setUtil"
|
||||||
|
import { getAllCards2 } from "../util"
|
||||||
|
import Card from "../../db/interfaces/Card"
|
||||||
|
import { cardToCardSingle, isCardAvailable } from "../cardUtil"
|
||||||
|
|
||||||
|
const lang = process.env.CARDLANG as Langs || "en"
|
||||||
|
|
||||||
|
const endpoint = getBaseFolder(lang, "sets")
|
||||||
|
|
||||||
|
const bootstrap = async () => {
|
||||||
|
const list = await getAllSets()
|
||||||
|
for (let el of list) {
|
||||||
|
el = el.replace("./", "../../")
|
||||||
|
const set: Set = require(el).default
|
||||||
|
|
||||||
|
console.log(el)
|
||||||
|
if (!isSetAvailable(set, lang)) continue
|
||||||
|
|
||||||
|
const lit = await getAllCards2(set.code)
|
||||||
|
for (let i of lit) {
|
||||||
|
i = i.replace("./", "../../")
|
||||||
|
const card: Card = require(i).default
|
||||||
|
|
||||||
|
if (!isCardAvailable(card, lang)) continue
|
||||||
|
console.log(i)
|
||||||
|
|
||||||
|
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)))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Building sets/subitem")
|
||||||
|
|
||||||
|
bootstrap()
|
10
endpoints/typeUtil.ts
Normal file
10
endpoints/typeUtil.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import Type from "../db/interfaces/Type";
|
||||||
|
import LangList, { Langs } from "../db/interfaces/LangList";
|
||||||
|
import { typeSimple } from "./types/type";
|
||||||
|
|
||||||
|
export function typeToTypeSimple(type: Type, lang: Langs): typeSimple {
|
||||||
|
return {
|
||||||
|
id: type,
|
||||||
|
name: Type.toLang(type, lang)
|
||||||
|
}
|
||||||
|
}
|
65
endpoints/util.ts
Normal file
65
endpoints/util.ts
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import { promises as fs, promises } from 'fs'
|
||||||
|
import * as glob from 'glob'
|
||||||
|
|
||||||
|
export function getAllCards() {
|
||||||
|
return listFolder("./assets")
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAllCards2(set = "**", expansion = "**") {
|
||||||
|
return glob.sync(`./db/cards/${expansion}/${set}/*.js`)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAllSets() {
|
||||||
|
return glob.sync('./db/sets/**/*.js')
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAllCardsJSON() {
|
||||||
|
return glob.sync("./db/cards/**/**/*.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
async function listFolder(folder: string): Promise<Array<string>> {
|
||||||
|
const files = await fs.readdir(folder)
|
||||||
|
const res = []
|
||||||
|
for (const file of files) {
|
||||||
|
if (file.endsWith(".json")) res.push(`${folder}/${file}`)
|
||||||
|
if ((await fs.stat(`${folder}/${file}`)).isDirectory()) {
|
||||||
|
res.push(...await listFolder(`${folder}/${file}`))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getBaseFolder(lang: string, endpoint: string) {
|
||||||
|
return `./dist/${lang}/${endpoint}`
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function del(path: string) {
|
||||||
|
let files = []
|
||||||
|
const promiseArr = []
|
||||||
|
try {
|
||||||
|
files = await promises.readdir(path)
|
||||||
|
} catch {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (files.length > 0) {
|
||||||
|
for (const file of files) {
|
||||||
|
const fPath = `${path}/${file}`
|
||||||
|
if ((await promises.stat(fPath)).isDirectory()) {
|
||||||
|
promiseArr.push(
|
||||||
|
del(fPath)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
promiseArr.push(
|
||||||
|
promises.unlink(fPath)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await Promise.all(promiseArr)
|
||||||
|
await promises.rmdir(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function urlize(str: string): string {
|
||||||
|
str = str.normalize('NFD').replace(/[\u0300-\u036f]/g, "")
|
||||||
|
return str.replace(/ /g, "-").toLowerCase()
|
||||||
|
}
|
0
endpoints/weaknesses/.gitkeep
Normal file
0
endpoints/weaknesses/.gitkeep
Normal file
1
generated/abilities.json
Normal file
1
generated/abilities.json
Normal file
File diff suppressed because one or more lines are too long
1
generated/illustrators.json
Normal file
1
generated/illustrators.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
["Kagemaru Himeno","Ryo Ueda","Midori Harada","Mizue","5ban Graphics","Ken Sugimori","Ayaka Yoshida","Sumiyoshi Kizuki","Masakazu Fukuda","Mitsuhiro Arita","Kouki Saitou","Keiji Kinebuchi","Sachiko Adachi","Toyste Beach","Takabon","Naoki Saito","Nakaoka","Shizurow","Tomokazu Komiya","Shin Nagasawa","TOKIYA","Mikiko Takeda","Yukiko Baba","Naoyo Kimura","sui","Kyoko Umemoto","Yusuke Ohmura","kawayoo","match","Suwama Chiaki","Hajime Kusajima","Tomoko Wakai","Atsuko Nishida","Hiroaki Ito","Masahiko Ishii","OOYAMA","kodama","Miki Tanaka","Eske Yoshinob","Sanosuke Sakuma","Kanako Eo","Wataru Kawahara","Ken Ikuji","Aya Kusube","Kent Kanetsuna","Yuka Morii","MAHOU","Hiroki Fuchino","Akira Komayama","Shigenori Negishi","Anesaki Dynamic","Takumi Akabane","Wataru Kawahara/Direc. Shinji Higuchi","Takao Unno","Hideaki Hakozaki","Hisao Nakamura","\"Big Mama\" Tagawa","Hiromichi Sugiyama","Yumi","Mina Nakai","Hironobu Yoshida","tetsuya koizumi","Saya Tsuruta","Noriko Hotta","Megumi Mizutani","nagimiso","Misa Tsutsui","Hitoshi Ariga","Takashi Yamaguchi","Tomokazu","You Iribi","Yoshinobu Saito","Daisuke Iwamoto","Toshinao Aoki","Hikaru Koike","Keiko Fukuyama","Katsura Tabata","Satoshi Shirai","Shin-ichi Yoshikawa","Jungo Suzuki","Hasuno","Kyoko Koizumi","Yusuke Shimada","Hideki Ishikawa","Ryota Saito","Maiko Fujiwara","Yusuke\nOhmura","Kazuo Yazawa","Mt. TBT","Sekio","Makoto Imai","chibi","HYOGONOSUKE","Yuri Umemura","Daisuke Ito","kirisAki","sowsow","Kazuyuki Kano","ryoma uratsuka","Kenkichi Toyama","Mana Ibe","DemizuPosuka","SATOSHI NAKAI","Masako Yamashita","Lee HyunJung","HiRON","Tomoaki Imakuni","Reiko Tanoue","Shinji Higuchi + Sachiko Eba","Shinji Higuchi + Noriko Takaya","GAME FREAK inc.","BERUBURI","0313","CR CG gangs","Motofumi Fujiwara","Asako Ito","PLANETA","Pani Kobayashi","Shinji Higuchi + Noriko Takaya/樋口真嗣+高屋法子","Shin-ichi Yoshida","Kimiya Masago","Studio Bora Inc.","Kazuaki Aihara","Yusuke Ishikawa","Kai Ishikawa","Hideyuki Nakajima","Hizuki Misono","Sachi Matoba","Yuichi Sawayama","Milky Isobe","Midroi Harada","Emi Miwa","Shibuzoh.","K. Hoshiba","Emi Yoshida","Asuka Iwashita","otumami","Satoshi Ohta","hatachu","Hiroki Asanuma","sadaji","PLANETA Igarashi","Big Mama\" Tagawa\"","so-taro","kanahei","Nobuyuki Fujimoto","miki kudo","Eri Yamaki","Saya Tsuruta","aky CG Works","M. Akiyama","Imakuni?","Kouji Tajima","K. Utsunomiya","Mikio Menjo","Aimi Tomita","Zu-Ka","T. Honda","Hideki Kazama","Atsuko Ujiie","Illus.&Direc.The Pokémon Company Art Team","Ryota Murayama","Emi Ando","take","AKIRA EGAWA","Christopher Rush","Kunihiko Yuyama","Shinji Higuchi","Craig Turvey","James Turner","Junsei Kuninobu","Nabana Kensaku","PLANETA Tsuji","K. Hoshiba","K Hoshiba","Tokumi Akabane","Yosuke Da Silva","Shinji Higuchi + Sachiko Eba/樋口真嗣 + 江場左知子","Etsuya Hattori","Benimaru Itoh","Gakuji Nomoto","Shinji Higuchi + Sachiko Eba/樋口真嗣+江場左知子","KEIICHIRO ITO","Ryuta Fuse","MikiTanaka","Yasuki Watanabe","Masakazu\nFukuda","ConceptLab","Hiroyuki Yamamoto","Kent Kanetsuna/Direc. Shinji Higuchi","Tomohiro Kitakaze","Mitsuhiro\nArita","Keiko Moritsugu","Ken Ikugi","PLANETA Otani","2017 Pikachu Project","MPC Film","Uta","Framestore","inose yukie","Ken Sugimori\nYusuke Ohmura","Sakiko Maeda","Noriko Uono","Dr.Ooyama","Illus.&Direc.The Pokémon Company Art-team","Shinji Higuchi + Sachiko Eba 樋口 真嗣 + 江場 左知子","Shinji Higuchi + Noriko Takaya 樋口 真嗣 + 高屋 法子","Shinji Higuchi + Sachiko Eba/樋口 真嗣 + 江場 左知子","Ken Sugimori Yusuke Ohmura","Tomomi Kaneko","Misaki Hashimoto","Huang Tzu En","Fumie Kittaka","Avec Yoko"]
|
30
package.json
Normal file
30
package.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "tcgdex-compiler",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"repository": "git@git.delta-wings.net:tcgdex/compiler.git",
|
||||||
|
"author": "Avior <florian.bouillon@delta-wings.net>",
|
||||||
|
"license": "MIT",
|
||||||
|
"private": false,
|
||||||
|
"scripts": {
|
||||||
|
"gen:all": "yarn gen:types && yarn gen:illustrators && yarn gen:hp && yarn gen:tags && yarn gen:retreat && yarn gen:categories && yarn gen:rarities && yarn gen:cards && yarn gen:expansions",
|
||||||
|
"gen:types": "ts-node web/types/generator.ts",
|
||||||
|
"gen:illustrators": "ts-node web/illustrators/generator.ts",
|
||||||
|
"gen:hp": "ts-node web/hp/generator.ts",
|
||||||
|
"gen:tags": "ts-node web/tags/generator.ts",
|
||||||
|
"gen:retreat": "ts-node web/retreat/generator.ts",
|
||||||
|
"gen:categories": "ts-node web/categories/generator.ts",
|
||||||
|
"gen:rarities": "ts-node web/rarities/generator.ts",
|
||||||
|
"gen:cards": "ts-node web/cards/generator.ts",
|
||||||
|
"gen:expansions": "ts-node web/expansions/generator.ts",
|
||||||
|
"cards:test": "tsc --noEmit --project tsconfig-cards.json",
|
||||||
|
"cards:compile": "tsc --project tsconfig-cards.json"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@types/glob": "^7.1.1",
|
||||||
|
"@types/node": "^13.7.0",
|
||||||
|
"glob": "^7.1.6",
|
||||||
|
"ts-node": "^8.6.2",
|
||||||
|
"typescript": "^3.7.5"
|
||||||
|
}
|
||||||
|
}
|
1
sdk
Submodule
1
sdk
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 02b6d5332a79f3e6d5fc446485e864ea8b7e54ec
|
9
tsconfig-cards.json
Normal file
9
tsconfig-cards.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"include": ["db/cards/**/**/*.ts"],
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es5",
|
||||||
|
"module": "commonjs",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"forceConsistentCasingInFileNames": true
|
||||||
|
}
|
||||||
|
}
|
153
yarn.lock
Normal file
153
yarn.lock
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@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==
|
||||||
|
|
||||||
|
"@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==
|
||||||
|
dependencies:
|
||||||
|
"@types/events" "*"
|
||||||
|
"@types/minimatch" "*"
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/minimatch@*":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||||
|
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||||
|
|
||||||
|
"@types/node@*", "@types/node@^13.7.0":
|
||||||
|
version "13.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.1.tgz#238eb34a66431b71d2aaddeaa7db166f25971a0d"
|
||||||
|
integrity sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==
|
||||||
|
|
||||||
|
arg@^4.1.0:
|
||||||
|
version "4.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
||||||
|
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
||||||
|
|
||||||
|
balanced-match@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
|
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||||
|
|
||||||
|
brace-expansion@^1.1.7:
|
||||||
|
version "1.1.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
buffer-from@^1.0.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||||
|
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
||||||
|
|
||||||
|
concat-map@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||||
|
|
||||||
|
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==
|
||||||
|
|
||||||
|
fs.realpath@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
|
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||||
|
|
||||||
|
glob@^7.1.6:
|
||||||
|
version "7.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||||
|
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
inflight@^1.0.4:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||||
|
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
|
||||||
|
dependencies:
|
||||||
|
once "^1.3.0"
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
inherits@2:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
|
|
||||||
|
make-error@^1.1.1:
|
||||||
|
version "1.3.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
|
||||||
|
integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
|
||||||
|
|
||||||
|
minimatch@^3.0.4:
|
||||||
|
version "3.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||||
|
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
|
once@^1.3.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
|
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||||
|
dependencies:
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
path-is-absolute@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
|
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||||
|
|
||||||
|
source-map-support@^0.5.6:
|
||||||
|
version "0.5.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
|
||||||
|
integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
|
||||||
|
dependencies:
|
||||||
|
buffer-from "^1.0.0"
|
||||||
|
source-map "^0.6.0"
|
||||||
|
|
||||||
|
source-map@^0.6.0:
|
||||||
|
version "0.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||||
|
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||||
|
|
||||||
|
ts-node@^8.6.2:
|
||||||
|
version "8.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35"
|
||||||
|
integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==
|
||||||
|
dependencies:
|
||||||
|
arg "^4.1.0"
|
||||||
|
diff "^4.0.1"
|
||||||
|
make-error "^1.1.1"
|
||||||
|
source-map-support "^0.5.6"
|
||||||
|
yn "3.1.1"
|
||||||
|
|
||||||
|
typescript@^3.7.5:
|
||||||
|
version "3.7.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
|
||||||
|
integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
|
||||||
|
|
||||||
|
wrappy@1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
|
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||||
|
|
||||||
|
yn@3.1.1:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
|
||||||
|
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
|
Loading…
x
Reference in New Issue
Block a user