@@ -161,6 +161,7 @@ class Parser {
161161 const result = [ ] ;
162162
163163 const bar = new Progress ( `Parsing ${ category } ` , items . length ) ;
164+
164165 if ( ! items . length ) {
165166 bar ?. interrupt ?. ( `No ${ category } ` ) ;
166167 return [ ] ;
@@ -192,7 +193,7 @@ class Parser {
192193 const result = cloneDeep ( original ) ;
193194
194195 if ( result . rewardName ) result . uniqueName = result . rewardName ;
195- this . addType ( result ) ;
196+ this . addType ( result , data ) ;
196197 this . addDamage ( result ) ;
197198 this . sanitize ( result ) ;
198199 this . addImageName ( result , data . manifest ) ;
@@ -229,7 +230,7 @@ class Parser {
229230 const result = cloneDeep ( original ) ;
230231
231232 if ( result . rewardName ) result . uniqueName = result . rewardName ;
232- this . addType ( result ) ;
233+ this . addType ( result , data ) ;
233234 this . sanitize ( result ) ;
234235 this . addImageName ( result , data . manifest , previous ) ;
235236 this . addCategory ( result , category ) ;
@@ -445,17 +446,25 @@ class Parser {
445446 * saved as /Lotus/Powersuits/*, meaning that Archwing has to be looked for
446447 * first, otherwise it would be considered a Warframe.
447448 * @param {Partial<Item> } item to have type adjusted on
449+ * @param {RawItemData } data raw context data
448450 */
449- addType ( item ) {
451+ addType ( item , data ) {
450452 if ( item . parent ) return ;
451- // eslint-disable-next-line no-restricted-syntax
452- for ( const type of types ) {
453- const contains = type . regex ? new RegExp ( type . id , 'ig' ) . test ( item . uniqueName ) : item . uniqueName . includes ( type . id ) ;
454- if ( contains ) {
455- if ( type . append ) item . type = `${ item . type } ${ type . name } ` ;
456- else item . type = type . name ;
457- // if (item.type !== type.name) console.error(`${item.name} didn't update types`)
458- break ;
453+ const arcane = data . wikia . arcanes . find ( ( entry ) => entry . name === item . name ) ;
454+ if ( arcane ) {
455+ item . type = `${ arcane . type } Arcane` ;
456+ } else {
457+ // eslint-disable-next-line no-restricted-syntax
458+ for ( const type of types ) {
459+ const contains = type . regex
460+ ? new RegExp ( type . id , 'ig' ) . test ( item . uniqueName )
461+ : item . uniqueName . includes ( type . id ) ;
462+ if ( contains ) {
463+ if ( type . append ) item . type = `${ item . type } ${ type . name } ` ;
464+ else item . type = type . name ;
465+ // if (item.type !== type.name) console.error(`${item.name} didn't update types`)
466+ break ;
467+ }
459468 }
460469 }
461470
@@ -917,6 +926,9 @@ class Parser {
917926 case 'upgrades' :
918927 this . addModWikiaData ( item , wikiaItem ) ;
919928 break ;
929+ case 'arcanes' :
930+ this . addArcaneWikiaData ( item , wikiaItem ) ;
931+ break ;
920932 default :
921933 break ;
922934 }
@@ -987,6 +999,19 @@ class Parser {
987999 if ( ! wikiaItem . thumbnail ) warnings . missingWikiThumb . push ( item . name ) ;
9881000 }
9891001
1002+ /**
1003+ * Add additional data for mods from the wiki
1004+ * @param {Item } item mod to append wikia data to
1005+ * @param {WikiaArcane } wikiaItem to pull data from
1006+ */
1007+ addArcaneWikiaData ( item , wikiaItem ) {
1008+ item . wikiaThumbnail = wikiaItem . thumbnail ;
1009+ item . wikiaUrl = wikiaItem . url ;
1010+ item . transmutable = wikiaItem . transmutable ;
1011+ item . type = wikiaItem . type ;
1012+ if ( ! wikiaItem . thumbnail ) warnings . missingWikiThumb . push ( item . name ) ;
1013+ }
1014+
9901015 /**
9911016 * Normalize Ogg vault dates to be technically ISO-8601 dates
9921017 * @param {OggDateStamp } vaultDate vault date to normalize
0 commit comments