diff --git a/data/Diamond & Pearl/DP Black Star Promos/DP05.ts b/data/Diamond & Pearl/DP Black Star Promos/DP05.ts index 5710be6601..5a8f56b071 100644 --- a/data/Diamond & Pearl/DP Black Star Promos/DP05.ts +++ b/data/Diamond & Pearl/DP Black Star Promos/DP05.ts @@ -21,31 +21,52 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["worlds-2007"], + stamp: [{ + stamp: "worlds", + year: 2007 + }], }, { type: "normal", - stamp: ["worlds-2007","finalist"], + stamp: [{ + stamp: "worlds", + year: 2007 + }, "finalist"], }, { type: "normal", - stamp: ["worlds-2007","quarter-finalist"], + stamp: [{ + stamp: "worlds", + year: 2007 + }, "quarter-finalist"], }, { type: "normal", - stamp: ["worlds-2007","semi-finalist"], + stamp: [{ + stamp: "worlds", + year: 2007 + }, "semi-finalist"], }, { type: "normal", - stamp: ["worlds-2007","staff"], + stamp: [{ + stamp: "worlds", + year: 2007 + }, "staff"], }, { type: "normal", - stamp: ["worlds-2007","top-sixteen"], + stamp: [{ + stamp: "worlds", + year: 2007 + }, "top-sixteen"], }, { type: "normal", - stamp: ["worlds-2007","top-thirty-two"], + stamp: [{ + stamp: "worlds", + year: 2007 + }, "top-thirty-two"], }, ], } diff --git a/data/Diamond & Pearl/DP Black Star Promos/DP25.ts b/data/Diamond & Pearl/DP Black Star Promos/DP25.ts index 82eeaa56af..6d7f97b7cf 100644 --- a/data/Diamond & Pearl/DP Black Star Promos/DP25.ts +++ b/data/Diamond & Pearl/DP Black Star Promos/DP25.ts @@ -21,31 +21,52 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["worlds-2008"], + stamp: [{ + stamp: "worlds", + year: 2008 + }], }, { type: "normal", - stamp: ["worlds-2008","finalist"], + stamp: [{ + stamp: "worlds", + year: 2008 + }, "finalist"], }, { type: "normal", - stamp: ["worlds-2008","quarter-finalist"], + stamp: [{ + stamp: "worlds", + year: 2008 + }, "quarter-finalist"], }, { type: "normal", - stamp: ["worlds-2008","semi-finalist"], + stamp: [{ + stamp: "worlds", + year: 2008 + }, "semi-finalist"], }, { type: "normal", - stamp: ["worlds-2008","staff"], + stamp: [{ + stamp: "worlds", + year: 2008 + }, "staff"], }, { type: "normal", - stamp: ["worlds-2008","top-sixteen"], + stamp: [{ + stamp: "worlds", + year: 2008 + }, "top-sixteen"], }, { type: "normal", - stamp: ["worlds-2008","top-thirty-two"], + stamp: [{ + stamp: "worlds", + year: 2008 + }, "top-thirty-two"], }, ], } diff --git a/data/Diamond & Pearl/DP Black Star Promos/DP48.ts b/data/Diamond & Pearl/DP Black Star Promos/DP48.ts index cea9cf79bd..a724d9824c 100644 --- a/data/Diamond & Pearl/DP Black Star Promos/DP48.ts +++ b/data/Diamond & Pearl/DP Black Star Promos/DP48.ts @@ -21,31 +21,52 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["worlds-2009"], + stamp: [{ + stamp: "worlds", + year: 2009 + }], }, { type: "normal", - stamp: ["worlds-2009","finalist"], + stamp: [{ + stamp: "worlds", + year: 2009 + }, "finalist"], }, { type: "normal", - stamp: ["worlds-2009","quarter-finalist"], + stamp: [{ + stamp: "worlds", + year: 2009 + }, "quarter-finalist"], }, { type: "normal", - stamp: ["worlds-2009","semi-finalist"], + stamp: [{ + stamp: "worlds", + year: 2009 + }, "semi-finalist"], }, { type: "normal", - stamp: ["worlds-2009","staff"], + stamp: [{ + stamp: "worlds", + year: 2009 + }, "staff"], }, { type: "normal", - stamp: ["worlds-2009","top-sixteen"], + stamp: [{ + stamp: "worlds", + year: 2009 + }, "top-sixteen"], }, { type: "normal", - stamp: ["worlds-2009","top-thirty-two"], + stamp: [{ + stamp: "worlds", + year: 2009 + }, "top-thirty-two"], }, ], } diff --git a/data/Diamond & Pearl/Secret Wonders/106.ts b/data/Diamond & Pearl/Secret Wonders/106.ts index 9f863df457..cc36001835 100644 --- a/data/Diamond & Pearl/Secret Wonders/106.ts +++ b/data/Diamond & Pearl/Secret Wonders/106.ts @@ -80,11 +80,17 @@ const card: Card = { }, { type: "normal", - stamp: ["origins-2008"] + stamp: [{ + stamp: "origins", + year: 2008 + }] }, { type: "normal", - stamp: ["origins-2008","staff"] + stamp: [{ + stamp: "origins", + year: 2008 + }, "staff"] } ] } diff --git a/data/HeartGold & SoulSilver/HGSS Black Star Promos/HGSS18.ts b/data/HeartGold & SoulSilver/HGSS Black Star Promos/HGSS18.ts index 4f8b3a23e5..3753c73906 100644 --- a/data/HeartGold & SoulSilver/HGSS Black Star Promos/HGSS18.ts +++ b/data/HeartGold & SoulSilver/HGSS Black Star Promos/HGSS18.ts @@ -23,31 +23,52 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["worlds-2010"] + stamp: [{ + stamp: "worlds", + year: 2010 + }] }, { type: "normal", - stamp: ["worlds-2010","staff"] + stamp: [{ + stamp: "worlds", + year: 2010 + }, "staff"] }, { type: "normal", - stamp: ["worlds-2010","finalist"] + stamp: [{ + stamp: "worlds", + year: 2010 + }, "finalist"] }, { type: "normal", - stamp: ["worlds-2010","quarter-finalist"] + stamp: [{ + stamp: "worlds", + year: 2010 + }, "quarter-finalist"] }, { type: "normal", - stamp: ["worlds-2010", "semi-finalist"] + stamp: [{ + stamp: "worlds", + year: 2010 + }, "semi-finalist"] }, { type: "normal", - stamp: ["worlds-2010", "top-sixteen"] + stamp: [{ + stamp: "worlds", + year: 2010 + }, "top-sixteen"] }, { type: "normal", - stamp: ["worlds-2010", "top-thirty-two"] + stamp: [{ + stamp: "worlds", + year: 2010 + }, "top-thirty-two"] }, ] diff --git a/data/Scarlet & Violet/SVP Black Star Promos/213.ts b/data/Scarlet & Violet/SVP Black Star Promos/213.ts index 6f65cf3c06..444ac6cf38 100644 --- a/data/Scarlet & Violet/SVP Black Star Promos/213.ts +++ b/data/Scarlet & Violet/SVP Black Star Promos/213.ts @@ -25,7 +25,7 @@ const card: Card = { attacks: [ { - cost: ["Water","Water","Water","Colorless"], + cost: ["Water", "Water", "Water", "Colorless"], name: { en: "Deep Submergence", }, @@ -50,7 +50,10 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["illustration-contest-2024"] + stamp: [{ + stamp: "illustration-contest", + year: 2024 + }] }, ] } diff --git a/data/Scarlet & Violet/SVP Black Star Promos/214.ts b/data/Scarlet & Violet/SVP Black Star Promos/214.ts index 25f2157055..e7cf02f822 100644 --- a/data/Scarlet & Violet/SVP Black Star Promos/214.ts +++ b/data/Scarlet & Violet/SVP Black Star Promos/214.ts @@ -40,7 +40,10 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["illustration-contest-2024"] + stamp: [{ + stamp: "illustration-contest", + year: 2024 + }] }, ] } diff --git a/data/Scarlet & Violet/SVP Black Star Promos/215.ts b/data/Scarlet & Violet/SVP Black Star Promos/215.ts index c2ad1c04e8..665fe40804 100644 --- a/data/Scarlet & Violet/SVP Black Star Promos/215.ts +++ b/data/Scarlet & Violet/SVP Black Star Promos/215.ts @@ -51,7 +51,10 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["illustration-contest-2024"] + stamp: [{ + stamp: "illustration-contest", + year: 2024 + }] }, ] } diff --git a/data/Scarlet & Violet/SVP Black Star Promos/224.ts b/data/Scarlet & Violet/SVP Black Star Promos/224.ts index 3623f91611..3aa003b31f 100644 --- a/data/Scarlet & Violet/SVP Black Star Promos/224.ts +++ b/data/Scarlet & Violet/SVP Black Star Promos/224.ts @@ -22,31 +22,52 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["worlds-2025"] + stamp: [{ + stamp: "worlds", + year: 2025 + }] }, { type: "normal", - stamp: ["worlds-2025","staff"] + stamp: [{ + stamp: "worlds", + year: 2025 + }, "staff"] }, { type: "normal", - stamp: ["worlds-2025","top-thirty-two"] + stamp: [{ + stamp: "worlds", + year: 2025 + }, "top-thirty-two"] }, { type: "normal", - stamp: ["worlds-2025","top-sixteen"] + stamp: [{ + stamp: "worlds", + year: 2025 + }, "top-sixteen"] }, { type: "normal", - stamp: ["worlds-2025","top-eight"] + stamp: [{ + stamp: "worlds", + year: 2025 + }, "top-eight"] }, { type: "normal", - stamp: ["worlds-2025","semi-finalist"] + stamp: [{ + stamp: "worlds", + year: 2025 + }, "semi-finalist"] }, { type: "normal", - stamp: ["worlds-2025","finalist"] + stamp: [{ + stamp: "worlds", + year: 2025 + }, "finalist"] }, ] } diff --git a/data/Scarlet & Violet/SVP Black Star Promos/225.ts b/data/Scarlet & Violet/SVP Black Star Promos/225.ts index 768b7fa27a..b4621ae7db 100644 --- a/data/Scarlet & Violet/SVP Black Star Promos/225.ts +++ b/data/Scarlet & Violet/SVP Black Star Promos/225.ts @@ -44,7 +44,10 @@ const card: Card = { variants: [ { type: "normal", - stamp: ["worlds-2025"] + stamp: [{ + stamp: "worlds", + year: 2025 + }] }, { type: "reverse", diff --git a/interfaces.d.ts b/interfaces.d.ts index 03406bf0c7..40e2b7fc92 100644 --- a/interfaces.d.ts +++ b/interfaces.d.ts @@ -6,6 +6,24 @@ export type SupportedLanguages = export type Languages = Partial> + +export type Stamps = '1st-edition' | 'w-promo' | 'pre-release' | 'pokemon-center' | 'set-logo' | 'staff' | 'pikachu-tail' + | 'wotc' | 'd-edition-error' | '1st-edition-scratch-error' | "1st-edition-error" | '1st-movie' | '1st-movie-inverted' + | 'pokemon-4-ever' | 'pokemon-center-ny' | "winner" | '25th-celebration' | 'chris-fulop' | 'tsuguyoshi-yamato' + | 'reed-weichler' | 'kevin-nguyen' | 'professor-program' | 'takashi-yoneda' | 'michael-gonzalez' | 'curran-hill' + | 'jeremy-maron' | 'jimmy-ballard' | 'miska-saari' | 'hiroki-yano' | 'jason-klaczynski' | 'state-championships' + | 'national-championships' | 'gym-challenge' | 'city-championships' | 'jeremy-scharff-kim' | 'destiny-deoxys' + | 'pokemon-day' | 'regional-championships' | 'stadium-challenge' | '10th-anniversary' | 'wizard-world-philadelphia' + | 'wizard-world-chicago' | 'comic-con' | 'nintendo-world' | 'gen-con' | 'akira-miyazaki' | 'tom-roos' + | 'pokemon-rocks-america' | 'jun-hasebe' | 'origins' | 'games-expo' | 'kraze-club' | 'dylan-lefavour' + | 'tristan-robinson' | 'paul-atanassov' | 'david-cohen' | 'tsubasa-nakamura' | 'worlds' | 'finalist' + | 'quarter-finalist' | 'semi-finalist' | 'top-sixteen' | 'top-thirty-two' + | 'countdown-calendar' | 'michael-pramawat' | 'distributor-meeting' | 'mychael-bryan' | "stephen-silvestro" + | 'yuka-furusawa' | 'jason-martinez' | 'yuta-komatsuda' | 'platinum' + | 'ross-cawthorn' | 'gustavo-wada' | 'christopher-kan' | 'player-rewards-program' | 'igor-costa' + | 'zachary-bokhari' | 'shuto-itagaki' | 'snowflake' | 'trick-or-trade' | 'horizons' | 'gamestop' | 'eb-games' + | 'illustration-contest' | 'top-eight' + export interface Serie { id: string name: Languages @@ -16,7 +34,14 @@ export interface Serie { energies?: Array } -interface variant_detailed { +interface StampDetail { + stamp: Stamps + detail?: number | '' + year?: number + positioning?: 'left' | 'right' +} + +export interface variant_detailed { /** * define the variant type * - normal: no holographic elements @@ -56,24 +81,7 @@ interface variant_detailed { * - snowflake: a card that is stamped with a snowflake, available in the yearly advent calendar * - trick-or-trade: a card that is stamped with a pikachu-pumpkin, available in the yearly halloween/trick-or-trade boosters */ - stamp?: Array<'1st-edition' | 'w-promo' | 'pre-release' | 'pokemon-center' | 'set-logo' | 'staff' | 'pikachu-tail' - | 'wotc' | 'd-edition-error' | '1st-edition-scratch-error' | "1st-edition-error" | '1st-movie' | '1st-movie-inverted' - | 'pokemon-4-ever' | 'pokemon-center-ny' | "winner" | '25th-celebration' | 'chris-fulop' | 'tsuguyoshi-yamato' - | 'reed-weichler' | 'kevin-nguyen' | 'professor-program' | 'takashi-yoneda' | 'michael-gonzalez' | 'curran-hill' - | 'jeremy-maron' | 'jimmy-ballard' | 'miska-saari' | 'hiroki-yano' | 'jason-klaczynski' | 'state-championships' - | 'national-championships' | 'gym-challenge' | 'city-championships' | 'jeremy-scharff-kim' | 'destiny-deoxys' - | 'pokemon-day' | 'regional-championships' | 'international-championships' | 'stadium-challenge' | '10th-anniversary' | 'wizard-world-philadelphia' - | 'wizard-world-chicago' | 'comic-con' | 'nintendo-world' | 'gen-con' | 'akira-miyazaki' | 'tom-roos' - | 'pokemon-rocks-america' | 'jun-hasebe' | 'origins' | 'games-expo' | 'kraze-club' | 'dylan-lefavour' - | 'tristan-robinson' | 'paul-atanassov' | 'david-cohen' | 'tsubasa-nakamura' | 'worlds-2007' | 'finalist' - | 'quarter-finalist' | 'semi-finalist' | 'top-sixteen' | 'top-thirty-two' | 'worlds-2008' | 'worlds-2009' - | 'countdown-calendar' | 'michael-pramawat' | 'distributor-meeting' | 'mychael-bryan' | "stephen-silvestro" - | 'yuka-furusawa' | 'jason-martinez' | 'yuta-komatsuda' | 'origins-2008' | 'platinum' | 'worlds-2010' - | 'ross-cawthorn' | 'gustavo-wada' | 'christopher-kan' | 'player-rewards-program' | 'igor-costa' - | 'zachary-bokhari' | 'shuto-itagaki' | 'snowflake' | 'trick-or-trade' | 'horizons' | 'gamestop' | 'eb-games' - | 'illustration-contest-2024' | 'worlds-2025' | 'top-eight' | "champion" | "master-ball-league" | "ultra-ball-league" | "judge" | "asia-promo" - | "international-championship-europe" | "international-championship-latin-america" | "international-championship-north-america" - > + stamp?: Array /** * for the holo & reverse, **optional** indicate which foil is used on the card */ diff --git a/meta/translations/de.json b/meta/translations/de.json index 41d996d22f..00fc080159 100644 --- a/meta/translations/de.json +++ b/meta/translations/de.json @@ -180,7 +180,6 @@ "tom-roos": "tom-roos", "pokemon-rocks-america": "pokemon-rocks-america", "jun-hasebe": "jun-hasebe", - "origins": "origins", "games-expo": "games-expo", "kraze-club": "kraze-club", "dylan-lefavour": "dylan-lefavour", @@ -188,14 +187,14 @@ "paul-atanassov": "paul-atanassov", "david-cohen": "david-cohen", "tsubasa-nakamura": "tsubasa-nakamura", - "worlds-2007": "worlds-2007", + "worlds": "worlds", + "illustration-contest": "ilustration-contest", + "origins": "origins", "finalist": "finalist", "quarter-finalist": "quarter-finalist", "semi-finalist": "semi-finalist", "top-sixteen": "top-sixteen", "top-thirty-two": "top-thirty-two", - "worlds-2008": "worlds-2008", - "worlds-2009": "worlds-2009", "countdown-calendar": "countdown-calendar", "michael-pramawat": "michael-pramawat", "distributor-meeting": "distributor-meeting", @@ -204,9 +203,7 @@ "yuka-furusawa": "yuka-furusawa", "jason-martinez": "jason-martinez", "yuta-komatsuda": "yuta-komatsuda", - "origins-2008": "origins-2008", "platinum": "platinum", - "worlds-2010": "worlds-2010", "ross-cawthorn": "ross-cawthorn", "gustavo-wada": "gustavo-wada", "christopher-kan": "christopher-kan", @@ -218,9 +215,8 @@ "eb-games": "EB Games", "snowflake": "Schneeflocke", "horizons": "horizons", - "illustration-contest-2024": "illustration-contest-2024", - "worlds-2025": "worlds-2025", "top-eight": "top-eight", + "illustration-contest-2024": "illustration-contest-2024", "trick-or-trade": "trick-or-trade", "champion": "champion", "master-ball-league": "master-ball-league", diff --git a/meta/translations/es.json b/meta/translations/es.json index 2a9ac0e3d7..3ce5a85ef4 100644 --- a/meta/translations/es.json +++ b/meta/translations/es.json @@ -188,14 +188,13 @@ "paul-atanassov": "paul-atanassov", "david-cohen": "david-cohen", "tsubasa-nakamura": "tsubasa-nakamura", - "worlds-2007": "worlds-2007", + "worlds": "worlds", + "illustration-contest": "ilustration-contest", "finalist": "finalist", "quarter-finalist": "quarter-finalist", "semi-finalist": "semi-finalist", "top-sixteen": "top-sixteen", "top-thirty-two": "top-thirty-two", - "worlds-2008": "worlds-2008", - "worlds-2009": "worlds-2009", "countdown-calendar": "countdown-calendar", "michael-pramawat": "michael-pramawat", "distributor-meeting": "distributor-meeting", @@ -204,9 +203,7 @@ "yuka-furusawa": "yuka-furusawa", "jason-martinez": "jason-martinez", "yuta-komatsuda": "yuta-komatsuda", - "origins-2008": "origins-2008", "platinum": "platinum", - "worlds-2010": "worlds-2010", "ross-cawthorn": "ross-cawthorn", "gustavo-wada": "gustavo-wada", "snowflake": "snowflake", diff --git a/meta/translations/fr.json b/meta/translations/fr.json index 63e949309f..7331937720 100644 --- a/meta/translations/fr.json +++ b/meta/translations/fr.json @@ -187,14 +187,13 @@ "paul-atanassov": "paul-atanassov", "david-cohen": "david-cohen", "tsubasa-nakamura": "tsubasa-nakamura", - "worlds-2007": "worlds-2007", + "worlds": "worlds", + "illustration-contest": "ilustration-contest", "finalist": "finalist", "quarter-finalist": "quarter-finalist", "semi-finalist": "semi-finalist", "top-sixteen": "top-sixteen", "top-thirty-two": "top-thirty-two", - "worlds-2008": "worlds-2008", - "worlds-2009": "worlds-2009", "countdown-calendar": "countdown-calendar", "michael-pramawat": "michael-pramawat", "distributor-meeting": "distributor-meeting", @@ -203,9 +202,7 @@ "yuka-furusawa": "yuka-furusawa", "jason-martinez": "jason-martinez", "yuta-komatsuda": "yuta-komatsuda", - "origins-2008": "origins-2008", "platinum": "platinum", - "worlds-2010": "worlds-2010", "ross-cawthorn": "ross-cawthorn", "gustavo-wada": "gustavo-wada", "snowflake": "snowflake", diff --git a/meta/translations/it.json b/meta/translations/it.json index 971f50c612..a4bfb9ed45 100644 --- a/meta/translations/it.json +++ b/meta/translations/it.json @@ -188,14 +188,13 @@ "paul-atanassov": "paul-atanassov", "david-cohen": "david-cohen", "tsubasa-nakamura": "tsubasa-nakamura", - "worlds-2007": "worlds-2007", + "worlds": "worlds", + "illustration-contest": "ilustration-contest", "finalist": "finalist", "quarter-finalist": "quarter-finalist", "semi-finalist": "semi-finalist", "top-sixteen": "top-sixteen", "top-thirty-two": "top-thirty-two", - "worlds-2008": "worlds-2008", - "worlds-2009": "worlds-2009", "countdown-calendar": "countdown-calendar", "michael-pramawat": "michael-pramawat", "distributor-meeting": "distributor-meeting", @@ -204,9 +203,7 @@ "yuka-furusawa": "yuka-furusawa", "jason-martinez": "jason-martinez", "yuta-komatsuda": "yuta-komatsuda", - "origins-2008": "origins-2008", "platinum": "platinum", - "worlds-2010": "worlds-2010", "ross-cawthorn": "ross-cawthorn", "gustavo-wada": "gustavo-wada", "snowflake": "snowflake", diff --git a/meta/translations/pt.json b/meta/translations/pt.json index 9556abdb6b..7bb361bafb 100644 --- a/meta/translations/pt.json +++ b/meta/translations/pt.json @@ -187,14 +187,13 @@ "paul-atanassov": "paul-atanassov", "david-cohen": "david-cohen", "tsubasa-nakamura": "tsubasa-nakamura", - "worlds-2007": "worlds-2007", + "worlds": "worlds", + "illustration-contest": "ilustration-contest", "finalist": "finalist", "quarter-finalist": "quarter-finalist", "semi-finalist": "semi-finalist", "top-sixteen": "top-sixteen", "top-thirty-two": "top-thirty-two", - "worlds-2008": "worlds-2008", - "worlds-2009": "worlds-2009", "countdown-calendar": "countdown-calendar", "michael-pramawat": "michael-pramawat", "distributor-meeting": "distributor-meeting", @@ -203,9 +202,7 @@ "yuka-furusawa": "yuka-furusawa", "jason-martinez": "jason-martinez", "yuta-komatsuda": "yuta-komatsuda", - "origins-2008": "origins-2008", "platinum": "platinum", - "worlds-2010": "worlds-2010", "ross-cawthorn": "ross-cawthorn", "gustavo-wada": "gustavo-wada", "snowflake": "snowflake", diff --git a/server/compiler/utils/cardUtil.ts b/server/compiler/utils/cardUtil.ts index 50a8e942ba..6333ec32a5 100644 --- a/server/compiler/utils/cardUtil.ts +++ b/server/compiler/utils/cardUtil.ts @@ -1,12 +1,12 @@ /* eslint-disable sort-keys */ import pathLib from 'node:path' -import { Card, Set, SupportedLanguages, Types } from '../../../interfaces' +import { Card, Set, SupportedLanguages, Types, Stamps, variant_detailed, StampDetail } from '../../../interfaces' import { CardResume, Card as CardSingle } from '../../../meta/definitions/api' import { getSet, setToSetSimple } from './setUtil' import translate from './translationUtil' import { DB_PATH, cardIsLegal, fetchRemoteFile, getDataFolder, getLastEdit, resolveText, smartGlob } from './util' import { objectMap, objectPick } from '@dzeio/object-util' -import { variant_detailed } from "../../public/v2/api"; +import { variant_detailed as api_variant_detailed } from "../../public/v2/api"; export async function getCardPictures(cardId: string, card: Card, lang: SupportedLanguages): Promise { try { @@ -37,16 +37,41 @@ export async function cardToCardSimple(id: string, card: Card, lang: SupportedLa function variantsDetailedToVariants(variants_detailed: Array): CardSingle['variants'] { return { - firstEdition: variants_detailed?.some((variant) => variant.stamp?.some((stamp) => stamp === '1st-edition')) ?? false, + firstEdition: variants_detailed?.some((variant) => variant.stamp?.some((stamp) => { + if (typeof stamp === 'string') { + return stamp === '1st-edition' + } else { + return stamp.stamp === '1st-edition' + } + })) ?? false, holo: variants_detailed?.some((variant) => variant.type === 'holo') ?? false, normal: variants_detailed?.some((variant) => variant.type === 'normal') ?? false, reverse: variants_detailed?.some((variant) => variant.type === 'reverse') ?? false, - wPromo: variants_detailed?.some((variant) => variant.stamp?.some((stamp) => stamp === 'w-Promo')) ?? false + wPromo: variants_detailed?.some((variant) => variant.stamp?.some((stamp) => { + if (typeof stamp === 'string') { + return stamp === 'w-promo' + } else { + return stamp.stamp === 'w-promo' + } + })) ?? false + } +} + +function createStampString(stamp: Stamps | StampDetail, lang: SupportedLanguages): string { + if(typeof stamp === "string") { + return translate('variantStamp', stamp, lang) } + + return [ + translate('variantStamp', stamp.stamp, lang), + stamp.year ? `-${stamp.year}` : '', + stamp.detail ? `-${stamp.detail}` : '', + stamp.positioning ? `_${stamp.positioning}` : '' + ].filter(Boolean).join(''); } -function variantsToVariantsDetailed(variants: CardSingle['variants'],lang: SupportedLanguages): Array { - const result: Array = []; +function variantsToVariantsDetailed(variants: CardSingle['variants'],lang: SupportedLanguages): Array { + const result: Array = []; const addVariant = (type: string, stamps: string[] = []) => { result.push({ type, @@ -107,7 +132,7 @@ export async function cardToCardSingle(localId: string, card: Card, lang: Suppor // only include size when it's not standard size: variant.size && variant.size !== 'standard' ? translate('variantSize', variant.size, lang) as any : translate('variantSize', "standard", lang) as any, stamp: variant.stamp ? variant.stamp.map((stamp) => { - return translate('variantStamp', stamp, lang) + return createStampString(stamp, lang) }) : undefined, foil: variant.foil ? translate('variantFoil', variant.foil, lang) : undefined }