@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
62 lines • 10.5 kB
JavaScript
import { GameTag, Zone } from '@firestone-hs/reference-data';
import uniq from 'lodash-es/uniq';
import { CardDiscardAction } from '../../models/action/card-discard-action';
import { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';
import { ActionHelper } from './action-helper';
export class CardDiscardParser {
constructor(allCards) {
this.allCards = allCards;
}
applies(item) {
return (item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.ZONE && item.tag.value === Zone.SETASIDE);
}
parse(item, currentTurn, entitiesBeforeAction, history) {
if (currentTurn === 0) {
return;
}
const entity = entitiesBeforeAction.get(item.tag.entity);
if (!entity) {
return [];
}
const previousZone = entity.getTag(GameTag.ZONE);
if (previousZone === Zone.HAND) {
const controller = entitiesBeforeAction.get(item.tag.entity).getTag(GameTag.CONTROLLER);
if (!controller) {
console.warn('[card-discard-parser] empty controller', item, entitiesBeforeAction.get(item.tag.entity));
return null;
}
return [
CardDiscardAction.create({
timestamp: item.timestamp,
index: item.index,
controller,
data: [item.tag.entity],
}, this.allCards),
];
}
return [];
}
reduce(actions) {
return ActionHelper.combineActions(actions, (previous, current) => this.shouldMergeActions(previous, current), (previous, current) => this.mergeActions(previous, current));
}
shouldMergeActions(previous, current) {
if (!(previous instanceof CardDiscardAction && current instanceof CardDiscardAction)) {
return false;
}
if (previous.controller === undefined || current.controller === undefined) {
console.warn('[card-discard-parser] Empty controller for draw action', previous, current);
return false;
}
return previous.controller === current.controller;
}
mergeActions(previousAction, currentAction) {
return CardDiscardAction.create({
timestamp: previousAction.timestamp,
index: currentAction.index,
entities: currentAction.entities,
controller: currentAction.controller,
data: uniq([...uniq(previousAction.data || []), ...uniq(currentAction.data || [])]),
}, this.allCards);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1kaXNjYXJkLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vY2FyZC1kaXNjYXJkLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELE9BQU8sSUFBSSxNQUFNLGdCQUFnQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxNQUFNLE9BQU8saUJBQWlCO0lBQzdCLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO0lBQUcsQ0FBQztJQUUxQyxPQUFPLENBQUMsSUFBaUI7UUFDL0IsT0FBTyxDQUNOLElBQUksWUFBWSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQ3pHLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUNYLElBQTBCLEVBQzFCLFdBQW1CLEVBQ25CLG9CQUF5QyxFQUN6QyxPQUErQjtRQUUvQixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTztTQUNQO1FBRUQsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNaLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9CLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsT0FBTyxJQUFJLENBQUM7YUFDWjtZQUNELE9BQU87Z0JBQ04saUJBQWlCLENBQUMsTUFBTSxDQUN2QjtvQkFDQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsVUFBVTtvQkFDVixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztpQkFDdkIsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiO2FBQ0QsQ0FBQztTQUNGO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQTBCO1FBQ3ZDLE9BQU8sWUFBWSxDQUFDLGNBQWMsQ0FDakMsT0FBTyxFQUNQLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFDakUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FDM0QsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLE9BQWU7UUFDM0QsSUFBSSxDQUFDLENBQUMsUUFBUSxZQUFZLGlCQUFpQixJQUFJLE9BQU8sWUFBWSxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3JGLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFGLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuRCxDQUFDO0lBRU8sWUFBWSxDQUFDLGNBQWlDLEVBQUUsYUFBZ0M7UUFDdkYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQzlCO1lBQ0MsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztZQUMxQixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDaEMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO1lBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuRixFQUNELElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztJQUNILENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVUYWcsIFpvbmUgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLWVzL3VuaXEnO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2FjdGlvbic7XHJcbmltcG9ydCB7IENhcmREaXNjYXJkQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9jYXJkLWRpc2NhcmQtYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dhbWUvZW50aXR5JztcclxuaW1wb3J0IHsgSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWdDaGFuZ2VIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L3RhZy1jaGFuZ2UtaGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgQWxsQ2FyZHNTZXJ2aWNlIH0gZnJvbSAnLi4vYWxsLWNhcmRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25IZWxwZXIgfSBmcm9tICcuL2FjdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FyZERpc2NhcmRQYXJzZXIgaW1wbGVtZW50cyBQYXJzZXIge1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWxsQ2FyZHM6IEFsbENhcmRzU2VydmljZSkge31cclxuXHJcblx0cHVibGljIGFwcGxpZXMoaXRlbTogSGlzdG9yeUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGl0ZW0gaW5zdGFuY2VvZiBUYWdDaGFuZ2VIaXN0b3J5SXRlbSAmJiBpdGVtLnRhZy50YWcgPT09IEdhbWVUYWcuWk9ORSAmJiBpdGVtLnRhZy52YWx1ZSA9PT0gWm9uZS5TRVRBU0lERVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBwYXJzZShcclxuXHRcdGl0ZW06IFRhZ0NoYW5nZUhpc3RvcnlJdGVtLFxyXG5cdFx0Y3VycmVudFR1cm46IG51bWJlcixcclxuXHRcdGVudGl0aWVzQmVmb3JlQWN0aW9uOiBNYXA8bnVtYmVyLCBFbnRpdHk+LFxyXG5cdFx0aGlzdG9yeTogcmVhZG9ubHkgSGlzdG9yeUl0ZW1bXSxcclxuXHQpOiBBY3Rpb25bXSB7XHJcblx0XHRpZiAoY3VycmVudFR1cm4gPT09IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGVudGl0eSA9IGVudGl0aWVzQmVmb3JlQWN0aW9uLmdldChpdGVtLnRhZy5lbnRpdHkpO1xyXG5cdFx0aWYgKCFlbnRpdHkpIHtcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByZXZpb3VzWm9uZSA9IGVudGl0eS5nZXRUYWcoR2FtZVRhZy5aT05FKTtcclxuXHRcdGlmIChwcmV2aW91c1pvbmUgPT09IFpvbmUuSEFORCkge1xyXG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gZW50aXRpZXNCZWZvcmVBY3Rpb24uZ2V0KGl0ZW0udGFnLmVudGl0eSkuZ2V0VGFnKEdhbWVUYWcuQ09OVFJPTExFUik7XHJcblx0XHRcdGlmICghY29udHJvbGxlcikge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybignW2NhcmQtZGlzY2FyZC1wYXJzZXJdIGVtcHR5IGNvbnRyb2xsZXInLCBpdGVtLCBlbnRpdGllc0JlZm9yZUFjdGlvbi5nZXQoaXRlbS50YWcuZW50aXR5KSk7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFtcclxuXHRcdFx0XHRDYXJkRGlzY2FyZEFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcblx0XHRcdFx0XHRcdGluZGV4OiBpdGVtLmluZGV4LFxyXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiBbaXRlbS50YWcuZW50aXR5XSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtdO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHJlZHVjZShhY3Rpb25zOiByZWFkb25seSBBY3Rpb25bXSk6IHJlYWRvbmx5IEFjdGlvbltdIHtcclxuXHRcdHJldHVybiBBY3Rpb25IZWxwZXIuY29tYmluZUFjdGlvbnM8Q2FyZERpc2NhcmRBY3Rpb24+KFxyXG5cdFx0XHRhY3Rpb25zLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMuc2hvdWxkTWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLm1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzaG91bGRNZXJnZUFjdGlvbnMocHJldmlvdXM6IEFjdGlvbiwgY3VycmVudDogQWN0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIShwcmV2aW91cyBpbnN0YW5jZW9mIENhcmREaXNjYXJkQWN0aW9uICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBDYXJkRGlzY2FyZEFjdGlvbikpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHByZXZpb3VzLmNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50LmNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1tjYXJkLWRpc2NhcmQtcGFyc2VyXSBFbXB0eSBjb250cm9sbGVyIGZvciBkcmF3IGFjdGlvbicsIHByZXZpb3VzLCBjdXJyZW50KTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByZXZpb3VzLmNvbnRyb2xsZXIgPT09IGN1cnJlbnQuY29udHJvbGxlcjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWVyZ2VBY3Rpb25zKHByZXZpb3VzQWN0aW9uOiBDYXJkRGlzY2FyZEFjdGlvbiwgY3VycmVudEFjdGlvbjogQ2FyZERpc2NhcmRBY3Rpb24pOiBDYXJkRGlzY2FyZEFjdGlvbiB7XHJcblx0XHRyZXR1cm4gQ2FyZERpc2NhcmRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dGltZXN0YW1wOiBwcmV2aW91c0FjdGlvbi50aW1lc3RhbXAsXHJcblx0XHRcdFx0aW5kZXg6IGN1cnJlbnRBY3Rpb24uaW5kZXgsXHJcblx0XHRcdFx0ZW50aXRpZXM6IGN1cnJlbnRBY3Rpb24uZW50aXRpZXMsXHJcblx0XHRcdFx0Y29udHJvbGxlcjogY3VycmVudEFjdGlvbi5jb250cm9sbGVyLFxyXG5cdFx0XHRcdGRhdGE6IHVuaXEoWy4uLnVuaXEocHJldmlvdXNBY3Rpb24uZGF0YSB8fCBbXSksIC4uLnVuaXEoY3VycmVudEFjdGlvbi5kYXRhIHx8IFtdKV0pLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19