@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
52 lines • 9.93 kB
JavaScript
import { GameTag, MetaTags } from '@firestone-hs/reference-data';
import { CardBurnAction } from '../../models/action/card-burn-action';
import { MetadataHistoryItem } from '../../models/history/metadata-history-item';
import { ActionHelper } from './action-helper';
export class CardBurnParser {
constructor(allCards) {
this.allCards = allCards;
}
applies(item) {
return (item instanceof MetadataHistoryItem &&
item.meta.meta === MetaTags[MetaTags.BURNED_CARD]);
}
parse(item, currentTurn, entitiesBeforeAction, history) {
return item.meta.info.map((info) => this.buildBurnAction(item, info, entitiesBeforeAction));
}
buildBurnAction(item, info, entitiesBeforeAction) {
const controller = entitiesBeforeAction.get(info.entity).getTag(GameTag.CONTROLLER);
if (!controller) {
console.warn('[card-burn-parser] empty controller', info, entitiesBeforeAction.get(info.entity));
return null;
}
return CardBurnAction.create({
timestamp: item.timestamp,
index: item.index,
controller,
burnedCardIds: [info.entity],
}, this.allCards);
}
reduce(actions) {
return ActionHelper.combineActions(actions, (previous, current) => this.shouldMergeActions(previous, current), (previous, current) => this.mergeActions(previous, current));
}
shouldMergeActions(previous, current) {
if (!(previous instanceof CardBurnAction && current instanceof CardBurnAction)) {
return false;
}
if (previous.controller === undefined || current.controller === undefined) {
console.warn('[card-burn-parser] Empty controller for burn action', previous, current);
return false;
}
return previous.controller === current.controller;
}
mergeActions(previousAction, currentAction) {
return CardBurnAction.create({
timestamp: previousAction.timestamp,
index: currentAction.index,
entities: currentAction.entities,
controller: currentAction.controller,
burnedCardIds: [...(previousAction.burnedCardIds ?? []), ...(currentAction.burnedCardIds ?? [])].filter((id, index, self) => self.indexOf(id) === index),
}, this.allCards);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1idXJuLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vY2FyZC1idXJuLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUd0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUdqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsTUFBTSxPQUFPLGNBQWM7SUFDMUIsWUFBb0IsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7SUFBRyxDQUFDO0lBRTFDLE9BQU8sQ0FBQyxJQUFpQjtRQUMvQixPQUFPLENBQ04sSUFBSSxZQUFZLG1CQUFtQjtZQUNsQyxJQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDMUUsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQ1gsSUFBeUIsRUFDekIsV0FBbUIsRUFDbkIsb0JBQXlDLEVBQ3pDLE9BQStCO1FBRS9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBeUIsRUFBRSxJQUFVLEVBQUUsb0JBQXlDO1FBQ3ZHLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNqRyxPQUFPLElBQUksQ0FBQztTQUNaO1FBQ0QsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUMzQjtZQUNDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsVUFBVTtZQUNWLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiLENBQUM7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQTBCO1FBQ3ZDLE9BQU8sWUFBWSxDQUFDLGNBQWMsQ0FDakMsT0FBTyxFQUNQLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFDakUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FDM0QsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLE9BQWU7UUFDM0QsSUFBSSxDQUFDLENBQUMsUUFBUSxZQUFZLGNBQWMsSUFBSSxPQUFPLFlBQVksY0FBYyxDQUFDLEVBQUU7WUFDL0UsT0FBTyxLQUFLLENBQUM7U0FDYjtRQUNELElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDMUUsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkYsT0FBTyxLQUFLLENBQUM7U0FDYjtRQUNELE9BQU8sUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25ELENBQUM7SUFFTyxZQUFZLENBQUMsY0FBOEIsRUFBRSxhQUE2QjtRQUNqRixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQzNCO1lBQ0MsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztZQUMxQixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDaEMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO1lBQ3BDLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUN0RyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FDL0M7U0FDRCxFQUNELElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztJQUNILENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVUYWcsIE1ldGFUYWdzIH0gZnJvbSAnQGZpcmVzdG9uZS1ocy9yZWZlcmVuY2UtZGF0YSc7XHJcbmltcG9ydCB7IE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vYWN0aW9uJztcclxuaW1wb3J0IHsgQ2FyZEJ1cm5BY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2NhcmQtYnVybi1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2FtZS9lbnRpdHknO1xyXG5pbXBvcnQgeyBIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2hpc3RvcnktaXRlbSc7XHJcbmltcG9ydCB7IE1ldGFkYXRhSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9tZXRhZGF0YS1oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BhcnNlci9pbmZvJztcclxuaW1wb3J0IHsgQWxsQ2FyZHNTZXJ2aWNlIH0gZnJvbSAnLi4vYWxsLWNhcmRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25IZWxwZXIgfSBmcm9tICcuL2FjdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FyZEJ1cm5QYXJzZXIgaW1wbGVtZW50cyBQYXJzZXIge1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWxsQ2FyZHM6IEFsbENhcmRzU2VydmljZSkge31cclxuXHJcblx0cHVibGljIGFwcGxpZXMoaXRlbTogSGlzdG9yeUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGl0ZW0gaW5zdGFuY2VvZiBNZXRhZGF0YUhpc3RvcnlJdGVtICYmXHJcblx0XHRcdChpdGVtIGFzIE1ldGFkYXRhSGlzdG9yeUl0ZW0pLm1ldGEubWV0YSA9PT0gTWV0YVRhZ3NbTWV0YVRhZ3MuQlVSTkVEX0NBUkRdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHBhcnNlKFxyXG5cdFx0aXRlbTogTWV0YWRhdGFIaXN0b3J5SXRlbSxcclxuXHRcdGN1cnJlbnRUdXJuOiBudW1iZXIsXHJcblx0XHRlbnRpdGllc0JlZm9yZUFjdGlvbjogTWFwPG51bWJlciwgRW50aXR5PixcclxuXHRcdGhpc3Rvcnk6IHJlYWRvbmx5IEhpc3RvcnlJdGVtW10sXHJcblx0KTogQWN0aW9uW10ge1xyXG5cdFx0cmV0dXJuIGl0ZW0ubWV0YS5pbmZvLm1hcCgoaW5mbykgPT4gdGhpcy5idWlsZEJ1cm5BY3Rpb24oaXRlbSwgaW5mbywgZW50aXRpZXNCZWZvcmVBY3Rpb24pKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYnVpbGRCdXJuQWN0aW9uKGl0ZW06IE1ldGFkYXRhSGlzdG9yeUl0ZW0sIGluZm86IEluZm8sIGVudGl0aWVzQmVmb3JlQWN0aW9uOiBNYXA8bnVtYmVyLCBFbnRpdHk+KTogQWN0aW9uIHtcclxuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSBlbnRpdGllc0JlZm9yZUFjdGlvbi5nZXQoaW5mby5lbnRpdHkpLmdldFRhZyhHYW1lVGFnLkNPTlRST0xMRVIpO1xyXG5cdFx0aWYgKCFjb250cm9sbGVyKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignW2NhcmQtYnVybi1wYXJzZXJdIGVtcHR5IGNvbnRyb2xsZXInLCBpbmZvLCBlbnRpdGllc0JlZm9yZUFjdGlvbi5nZXQoaW5mby5lbnRpdHkpKTtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gQ2FyZEJ1cm5BY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdFx0XHRjb250cm9sbGVyLFxyXG5cdFx0XHRcdGJ1cm5lZENhcmRJZHM6IFtpbmZvLmVudGl0eV0sXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHJlZHVjZShhY3Rpb25zOiByZWFkb25seSBBY3Rpb25bXSk6IHJlYWRvbmx5IEFjdGlvbltdIHtcclxuXHRcdHJldHVybiBBY3Rpb25IZWxwZXIuY29tYmluZUFjdGlvbnM8Q2FyZEJ1cm5BY3Rpb24+KFxyXG5cdFx0XHRhY3Rpb25zLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMuc2hvdWxkTWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLm1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzaG91bGRNZXJnZUFjdGlvbnMocHJldmlvdXM6IEFjdGlvbiwgY3VycmVudDogQWN0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIShwcmV2aW91cyBpbnN0YW5jZW9mIENhcmRCdXJuQWN0aW9uICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBDYXJkQnVybkFjdGlvbikpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHByZXZpb3VzLmNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50LmNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1tjYXJkLWJ1cm4tcGFyc2VyXSBFbXB0eSBjb250cm9sbGVyIGZvciBidXJuIGFjdGlvbicsIHByZXZpb3VzLCBjdXJyZW50KTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByZXZpb3VzLmNvbnRyb2xsZXIgPT09IGN1cnJlbnQuY29udHJvbGxlcjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWVyZ2VBY3Rpb25zKHByZXZpb3VzQWN0aW9uOiBDYXJkQnVybkFjdGlvbiwgY3VycmVudEFjdGlvbjogQ2FyZEJ1cm5BY3Rpb24pOiBDYXJkQnVybkFjdGlvbiB7XHJcblx0XHRyZXR1cm4gQ2FyZEJ1cm5BY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dGltZXN0YW1wOiBwcmV2aW91c0FjdGlvbi50aW1lc3RhbXAsXHJcblx0XHRcdFx0aW5kZXg6IGN1cnJlbnRBY3Rpb24uaW5kZXgsXHJcblx0XHRcdFx0ZW50aXRpZXM6IGN1cnJlbnRBY3Rpb24uZW50aXRpZXMsXHJcblx0XHRcdFx0Y29udHJvbGxlcjogY3VycmVudEFjdGlvbi5jb250cm9sbGVyLFxyXG5cdFx0XHRcdGJ1cm5lZENhcmRJZHM6IFsuLi4ocHJldmlvdXNBY3Rpb24uYnVybmVkQ2FyZElkcyA/PyBbXSksIC4uLihjdXJyZW50QWN0aW9uLmJ1cm5lZENhcmRJZHMgPz8gW10pXS5maWx0ZXIoXHJcblx0XHRcdFx0XHQoaWQsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YoaWQpID09PSBpbmRleCxcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19