@@ -8,6 +8,66 @@ import { DB_PATH, cardIsLegal, fetchRemoteFile, getDataFolder, getLastEdit, reso
88import { objectMap , objectPick } from '@dzeio/object-util'
99import { variant_detailed } from "../../public/v2/api" ;
1010
11+ /**
12+ * Post-processes compiled cards to enhance Trainer legality based on reprints.
13+ * If any reprint of a Trainer card is legal, all cards with the same English name are marked as legal.
14+ */
15+ export function enhanceTrainerLegality (
16+ compiledCards : Array < CardSingle > ,
17+ originalCards : Array < [ string , Card ] >
18+ ) : Array < CardSingle > {
19+ const originalCardMap = new Map < string , Card > ( )
20+ for ( const [ localId , card ] of originalCards ) {
21+ const cardId = `${ card . set . id } -${ localId } `
22+ originalCardMap . set ( cardId , card )
23+ }
24+
25+ const trainerCardsByName = new Map < string , Array < { compiled : CardSingle ; original : Card ; localId : string } > > ( )
26+
27+ for ( const compiledCard of compiledCards ) {
28+ const originalCard = originalCardMap . get ( compiledCard . id )
29+ if ( ! originalCard || originalCard . category !== 'Trainer' ) {
30+ continue
31+ }
32+
33+ const cardNameEn = originalCard . name . en
34+ if ( ! cardNameEn ) {
35+ continue
36+ }
37+
38+ if ( ! trainerCardsByName . has ( cardNameEn ) ) {
39+ trainerCardsByName . set ( cardNameEn , [ ] )
40+ }
41+
42+ trainerCardsByName . get ( cardNameEn ) ! . push ( {
43+ compiled : compiledCard ,
44+ original : originalCard ,
45+ localId : compiledCard . localId
46+ } )
47+ }
48+
49+ for ( const [ cardNameEn , cardsWithName ] of trainerCardsByName ) {
50+ let hasLegalStandard = false
51+ let hasLegalExpanded = false
52+
53+ for ( const { compiled } of cardsWithName ) {
54+ if ( compiled . legal . standard ) {
55+ hasLegalStandard = true
56+ }
57+ if ( compiled . legal . expanded ) {
58+ hasLegalExpanded = true
59+ }
60+ }
61+
62+ for ( const { compiled } of cardsWithName ) {
63+ compiled . legal . standard = hasLegalStandard || compiled . legal . standard
64+ compiled . legal . expanded = hasLegalExpanded || compiled . legal . expanded
65+ }
66+ }
67+
68+ return compiledCards
69+ }
70+
1171export async function getCardPictures ( cardId : string , card : Card , lang : SupportedLanguages ) : Promise < string | undefined > {
1272 try {
1373 const file = await fetchRemoteFile ( 'https://assets.tcgdex.net/datas.json' )
@@ -76,8 +136,7 @@ function variantsToVariantsDetailed(variants: CardSingle['variants'],lang: Suppo
76136export async function cardToCardSingle (
77137 localId : string ,
78138 card : Card ,
79- lang : SupportedLanguages ,
80- trainerCache ?: { [ cardName : string ] : { standard : boolean ; expanded : boolean } }
139+ lang : SupportedLanguages
81140) : Promise < CardSingle > {
82141 const image = await getCardPictures ( localId , card , lang )
83142
@@ -162,39 +221,10 @@ export async function cardToCardSingle(
162221 energyType : translate ( 'energyType' , card . energyType , lang ) as any ,
163222 regulationMark : card . regulationMark ,
164223
165- legal : ( ( ) => {
166- // For Trainer cards, check if there's already a compiled card with the same name that is legal
167- // Use English name as key to optimize cache size
168- if ( card . category === 'Trainer' && trainerCache ) {
169- const cardNameEn = card . name . en
170- if ( cardNameEn && trainerCache [ cardNameEn ] ) {
171- // If a card with the same name is already legal, mark this card as legal too
172- const cachedLegal = trainerCache [ cardNameEn ]
173- const normalStandard = cardIsLegal ( 'standard' , card , localId )
174- const normalExpanded = cardIsLegal ( 'expanded' , card , localId )
175- const finalStandard = cachedLegal . standard ? true : normalStandard
176- const finalExpanded = cachedLegal . expanded ? true : normalExpanded
177-
178- // Debug: log when cache is used and changes the result
179- if ( cachedLegal . standard && ! normalStandard ) {
180- console . log ( `[DEBUG] Trainer cache override: ${ cardNameEn } (${ card . set . id } -${ localId } ) - standard: ${ normalStandard } -> ${ finalStandard } ` )
181- }
182- if ( cachedLegal . expanded && ! normalExpanded ) {
183- console . log ( `[DEBUG] Trainer cache override: ${ cardNameEn } (${ card . set . id } -${ localId } ) - expanded: ${ normalExpanded } -> ${ finalExpanded } ` )
184- }
185-
186- return {
187- standard : finalStandard ,
188- expanded : finalExpanded
189- }
190- }
191- }
192- // Default behavior for non-Trainer cards or if no cache match
193- return {
194- standard : cardIsLegal ( 'standard' , card , localId ) ,
195- expanded : cardIsLegal ( 'expanded' , card , localId )
196- }
197- } ) ( ) ,
224+ legal : {
225+ standard : cardIsLegal ( 'standard' , card , localId ) ,
226+ expanded : cardIsLegal ( 'expanded' , card , localId )
227+ } ,
198228 boosters : card . boosters ? objectMap ( objectPick ( card . set . boosters , ...card . boosters ) , ( booster , id ) => ( {
199229 id : `boo_${ card . set . id } -${ id } ` ,
200230 name : resolveText ( booster . name , lang ) ,
0 commit comments