UNPKG

igir

Version:

🕹 A zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.

45 lines (44 loc) • 1.57 kB
import moment from 'moment'; import Package from '../../globals/package.js'; import ArrayPoly from '../../polyfill/arrayPoly.js'; import Header from '../../types/dats/logiqx/header.js'; import LogiqxDAT from '../../types/dats/logiqx/logiqxDat.js'; import Module from '../module.js'; /** * Combine every {@link DAT} into a single {@link DAT}. */ export default class DATCombiner extends Module { constructor(progressBar) { super(progressBar, DATCombiner.name); } /** * Combine the DATs. */ combine(dats) { this.progressBar.logTrace(`combining ${dats.length} DAT${dats.length === 1 ? '' : 's'}`); const newDat = new LogiqxDAT({ header: DATCombiner.generateHeader(dats), games: dats .flatMap((dat) => dat.getGames()) .filter(ArrayPoly.filterUniqueMapped((game) => game.hashCode())), }); this.progressBar.logTrace(`done combining ${dats.length} DAT${dats.length === 1 ? '' : 's'}`); return newDat; } static generateHeader(dats) { const datName = 'igir combined'; const date = moment().format('YYYYMMDD-HHmmss'); return new Header({ name: datName, description: datName, version: date, date, author: Package.NAME, url: Package.HOMEPAGE, comment: [ `Combined DAT generated by ${Package.NAME} v${Package.VERSION}`, ...dats.map((dat) => dat.getName()), ].join('\n'), }); } }