Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions data/Sword & Shield/Celebrations/23.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,21 @@ const card: Card = {
},

name: {
en: "Professor's Research",
fr: "Recherches Professorales",
es: "Investigación de Profesores",
it: "Ricerca Accademica",
pt: "Pesquisa de Professores",
de: "Forschung des Professors"
},

description: {
en: "Professor's Research (Professor Oak)",
fr: "Recherches Professorales (Professeur Chen)",
es: "Investigación de Profesores (Profesor Oak)",
it: "Ricerca Accademica (Professor Oak)",
pt: "Pesquisa de Professores",
de: "Forschung des Professors (Prof. Eich)"
pt: "Pesquisa de Professores (Professor Oak)",
de: "Forschung des Professors (Professor Eich)"
},

rarity: "Holo Rare",
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Celebrations/24.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,21 @@ const card: Card = {
},

name: {
en: "Professor's Research",
fr: "Recherches Professorales",
es: "Investigación de Profesores",
it: "Ricerca Accademica",
pt: "Pesquisa de Professores",
de: "Forschung des Professors"
},

description: {
en: "Professor's Research (Professor Oak)",
fr: "Recherches Professorales (Professeur Chen)",
es: "Investigación de Profesores (Profesor Oak)",
it: "Ricerca Accademica (Professor Oak)",
pt: "Pesquisa de Professores",
de: "Forschung des Professors (Prof. Eich)"
pt: "Pesquisa de Professores (Professor Oak)",
de: "Forschung des Professors (Professor Eich)"
},

rarity: "Ultra Rare",
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Rebel Clash/154.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import Set from '../Rebel Clash'

const card: Card = {
name: {
en: "Boss's Orders (Giovanni)",
fr: "Ordres du Boss (Giovanni)",
en: "Boss's Orders",
fr: "Ordres du Boss",
es: "Órdenes de Jefes",
it: "Ordini del Capo",
pt: "Ordem da Chefia",
Expand All @@ -28,6 +28,15 @@ const card: Card = {
trainerType: "Supporter",
regulationMark: "D",

description: {
en: "Boss's Orders (Giovanni)",
fr: "Ordres du Boss (Giovanni)",
es: "Órdenes de Jefes (Giovanni)",
it: "Ordini del Capo (Giovanni)",
pt: "Ordem da Chefia (Giovanni)",
de: "Befehl vom Boss (Giovanni)"
},

variants: {
normal: false,
reverse: true,
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Rebel Clash/189.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,23 @@ import Set from '../Rebel Clash'

const card: Card = {
name: {
en: "Boss's Orders (Giovanni)",
fr: "Ordres du Boss (Giovanni)",
en: "Boss's Orders",
fr: "Ordres du Boss",
es: "Órdenes de Jefes",
it: "Ordini del Capo",
pt: "Ordem da Chefia",
de: "Befehl vom Boss"
},

description: {
en: "Boss's Orders (Giovanni)",
fr: "Ordres du Boss (Giovanni)",
es: "Órdenes de Jefes (Giovanni)",
it: "Ordini del Capo (Giovanni)",
pt: "Ordem da Chefia (Giovanni)",
de: "Befehl vom Boss (Giovanni)"
},

illustrator: "nagimiso",
rarity: "Ultra Rare",
category: "Trainer",
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Rebel Clash/200.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ const card: Card = {
set: Set,

name: {
en: "Boss's Orders (Giovanni)",
fr: "Ordres du Boss (Giovanni)",
en: "Boss's Orders",
fr: "Ordres du Boss",
es: "Órdenes de Jefes",
it: "Ordini del Capo",
pt: "Ordem da Chefia",
Expand All @@ -29,6 +29,15 @@ const card: Card = {
trainerType: "Supporter",
regulationMark: "D",

description: {
en: "Boss's Orders (Giovanni)",
fr: "Ordres du Boss (Giovanni)",
es: "Órdenes de Jefes (Giovanni)",
it: "Ordini del Capo (Giovanni)",
pt: "Ordem da Chefia (Giovanni)",
de: "Befehl vom Boss (Giovanni)"
},

variants: {
normal: false,
reverse: false,
Expand Down
15 changes: 13 additions & 2 deletions data/Sword & Shield/Shining Fates/58.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,25 @@ const card: Card = {
set: Set,

name: {
fr: "Ordres du Boss (Lysandre)",
en: "Boss's Orders (Lysandre)",
en: "Boss's Orders",
fr: "Ordres du Boss",
es: "Órdenes de Jefes",
it: "Ordini del Capo",
pt: "Ordem da Chefia",
de: "Befehl vom Boss"
},

description: {
en: "Boss's Orders (Lysandre)",
fr: "Ordres du Boss (Lysandre)",
es: "Órdenes de Jefes (Lysson)",
'es-mx': "Órdenes de Jefes (Lysandre)",
it: "Ordini del Capo (Elisio)",
pt: "Ordem da Chefia (Lysandre)",
'pt-br': "Ordem da Chefia (Lysandre)",
de: "Befehl vom Boss (Flordelis)"
},

illustrator: "Ryuta Fuse",
rarity: "Rare",
category: "Trainer",
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Shining Fates/60.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ const card: Card = {
set: Set,

name: {
fr: "Recherches Professorales (Professeure Keteleeria)",
en: "Professor's Research (Professor Juniper)",
fr: "Recherches Professorales",
en: "Professor's Research",
es: "Investigación de Profesores",
it: "Ricerca Accademica",
pt: "Pesquisa de Professores",
Expand All @@ -29,6 +29,15 @@ const card: Card = {
trainerType: "Supporter",
regulationMark: "D",

description: {
en: "Professor's Research (Professor Juniper)",
de: "Forschung des Professors (Professor Esche)",
es: "Investigación de Profesores (Profesora Encina)",
fr: "Recherches Professorales (Professeure Keteleeria)",
it: "Ricerca Accademica (Professoressa Aralia)",
pt: "Pesquisa de Professores (Professor Juniper)"
},

variants: {
normal: true,
reverse: true,
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Sword & Shield/178.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import Set from '../Sword & Shield'

const card: Card = {
name: {
en: "Professor's Research (Professor Magnolia)",
fr: "Recherches Professorales (Professeure Magnolia)",
en: "Professor's Research",
fr: "Recherches Professorales",
es: "Investigación de Profesores",
it: "Ricerca Accademica",
pt: "Pesquisa de Professores",
Expand All @@ -28,6 +28,15 @@ const card: Card = {
trainerType: "Supporter",
regulationMark: "D",

description: {
en: "Professor's Research (Professor Magnolia)",
de: "Forschung des Professors (Professor Magnolica)",
es: "Investigación de Profesores (Profesora Magnolia)",
fr: "Recherches Professorales (Professeure Magnolia)",
it: "Ricerca Accademica (Professoressa Flora)",
pt: "Pesquisa de Professores (Professor Juniper)"
},

variants: {
normal: false,
reverse: true,
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Sword & Shield/201.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import Set from '../Sword & Shield'

const card: Card = {
name: {
en: "Professor's Research (Professor Magnolia)",
fr: "Recherches Professorales (Professeure Magnolia)",
en: "Professor's Research",
fr: "Recherches Professorales",
es: "Investigación de Profesores",
it: "Ricerca Accademica",
pt: "Pesquisa de Professores",
Expand All @@ -28,6 +28,15 @@ const card: Card = {
trainerType: "Supporter",
regulationMark: "D",

description: {
en: "Professor's Research (Professor Magnolia)",
de: "Forschung des Professors (Professor Magnolica)",
es: "Investigación de Profesores (Profesora Magnolia)",
fr: "Recherches Professorales (Professeure Magnolia)",
it: "Ricerca Accademica (Professoressa Flora)",
pt: "Pesquisa de Professores (Professor Juniper)"
},

variants: {
normal: false,
reverse: false,
Expand Down
13 changes: 11 additions & 2 deletions data/Sword & Shield/Sword & Shield/209.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import Set from '../Sword & Shield'

const card: Card = {
name: {
en: "Professor's Research (Professor Magnolia)",
fr: "Recherches Professorales (Professeure Magnolia)",
en: "Professor's Research",
fr: "Recherches Professorales",
es: "Investigación de Profesores",
it: "Ricerca Accademica",
pt: "Pesquisa de Professores",
Expand All @@ -28,6 +28,15 @@ const card: Card = {
trainerType: "Supporter",
regulationMark: "D",

description: {
en: "Professor's Research (Professor Magnolia)",
de: "Forschung des Professors (Professor Magnolica)",
es: "Investigación de Profesores (Profesora Magnolia)",
fr: "Recherches Professorales (Professeure Magnolia)",
it: "Ricerca Accademica (Professoressa Flora)",
pt: "Pesquisa de Professores (Professor Juniper)"
},

variants: {
normal: false,
reverse: false,
Expand Down
13 changes: 11 additions & 2 deletions server/compiler/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
/* eslint-disable max-statements */
import { existsSync, promises as fs } from 'fs'
import { promises as fs } from 'fs'
import { SupportedLanguages } from '../../interfaces'
import { FileFunction } from './compilerInterfaces'
import { fetchRemoteFile, loadLastEdits } from './utils/util'
import { enhanceTrainerLegality, getCards } from './utils/cardUtil'
import { Card as CardSingle } from '../../meta/definitions/api'

const LANGS: Array<SupportedLanguages> = [
'en', 'fr', 'es', 'es-mx', 'it', 'pt', 'pt-br', 'pt-pt', 'de', 'nl', 'pl', 'ru',
Expand Down Expand Up @@ -54,7 +56,14 @@ const DIST_FOLDER = './generated'

// Run the function
console.log(' ', 'Compiling', lang, file)
const item = await fn(lang)
let item = await fn(lang)

// Post-process Trainer legality after compilation but before writing JSON
if (file === 'cards.ts' && Array.isArray(item)) {
console.log(' ', 'Post-processing Trainer legality', lang)
const originalCards = await getCards(lang)
item = enhanceTrainerLegality(item as Array<CardSingle>, originalCards)
}

// Write to file
await fs.writeFile(`${folder}/${file.replace('.ts', '')}.json`, JSON.stringify(
Expand Down
60 changes: 60 additions & 0 deletions server/compiler/utils/cardUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,66 @@ import { DB_PATH, cardIsLegal, fetchRemoteFile, getDataFolder, getLastEdit, reso
import { objectMap, objectPick } from '@dzeio/object-util'
import { variant_detailed } from "../../public/v2/api";

/**
* Post-processes compiled cards to enhance Trainer legality based on reprints.
* If any reprint of a Trainer card is legal, all cards with the same English name are marked as legal.
*/
export function enhanceTrainerLegality(
compiledCards: Array<CardSingle>,
originalCards: Array<[string, Card]>
): Array<CardSingle> {
const originalCardMap = new Map<string, Card>()
for (const [localId, card] of originalCards) {
const cardId = `${card.set.id}-${localId}`
originalCardMap.set(cardId, card)
}

const trainerCardsByName = new Map<string, Array<{ compiled: CardSingle; original: Card; localId: string }>>()

for (const compiledCard of compiledCards) {
const originalCard = originalCardMap.get(compiledCard.id)
if (!originalCard || originalCard.category !== 'Trainer') {
continue
}

const cardNameEn = originalCard.name.en
if (!cardNameEn) {
continue
}

if (!trainerCardsByName.has(cardNameEn)) {
trainerCardsByName.set(cardNameEn, [])
}

trainerCardsByName.get(cardNameEn)!.push({
compiled: compiledCard,
original: originalCard,
localId: compiledCard.localId
})
}

for (const [cardNameEn, cardsWithName] of trainerCardsByName) {
let hasLegalStandard = false
let hasLegalExpanded = false

for (const { compiled } of cardsWithName) {
if (compiled.legal.standard) {
hasLegalStandard = true
}
if (compiled.legal.expanded) {
hasLegalExpanded = true
}
}

for (const { compiled } of cardsWithName) {
compiled.legal.standard = hasLegalStandard || compiled.legal.standard
compiled.legal.expanded = hasLegalExpanded || compiled.legal.expanded
}
}

return compiledCards
}

export async function getCardPictures(cardId: string, card: Card, lang: SupportedLanguages): Promise<string | undefined> {
try {
const file = await fetchRemoteFile('https://assets.tcgdex.net/datas.json')
Expand Down