Initial Compiler

Signed-off-by: Avior <florian.bouillon@delta-wings.net>
This commit is contained in:
Florian Bouillon 2020-03-10 13:02:02 +01:00
commit 552e4b49fa
No known key found for this signature in database
GPG Key ID: B143FF27EF555D16
35 changed files with 817 additions and 0 deletions

39
.drone.yml Normal file
View 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
View 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
View File

@ -0,0 +1 @@
node_modules

10
.gitmodules vendored Normal file
View 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

@ -0,0 +1 @@
Subproject commit be94e712b87623615025eb21c0d363f2ad89a423

1
dist Submodule

@ -0,0 +1 @@
Subproject commit 34f7f45aaef1f1158b987bf8bfaee3dd72a66650

10
endpoints/RarityUtil.ts Normal file
View 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
View 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)
}
}

View File

View File

21
endpoints/abilityUtil.ts Normal file
View 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
View 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
}
}

View File

View File

View File

90
endpoints/cardUtil.ts Normal file
View 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
View 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
View 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()

View 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}`)
}

View File

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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()
}

View File

1
generated/abilities.json Normal file

File diff suppressed because one or more lines are too long

View 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
View 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

@ -0,0 +1 @@
Subproject commit 02b6d5332a79f3e6d5fc446485e864ea8b7e54ec

9
tsconfig-cards.json Normal file
View File

@ -0,0 +1,9 @@
{
"include": ["db/cards/**/**/*.ts"],
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
}
}

153
yarn.lock Normal file
View 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==