@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
70 lines • 11.5 kB
JavaScript
import { BlockType, GameTag, Zone } from '@firestone-hs/reference-data';
import uniq from 'lodash-es/uniq';
import { MinionDeathAction } from '../../models/action/minion-death-action';
import { ActionHistoryItem } from '../../models/history/action-history-item';
import { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';
import { ActionHelper } from './action-helper';
export class MinionDeathParser {
constructor(allCards) {
this.allCards = allCards;
}
applies(item) {
return item instanceof ActionHistoryItem || item instanceof TagChangeHistoryItem;
}
parse(item, currentTurn, entitiesBeforeAction, history) {
if (item instanceof ActionHistoryItem) {
if (parseInt(item.node.attributes.type) !== BlockType.DEATHS) {
return;
}
if (item.node.tags) {
for (const tag of item.node.tags) {
if (tag.tag === GameTag.ZONE && tag.value === Zone.GRAVEYARD) {
return [
MinionDeathAction.create({
timestamp: item.timestamp,
index: item.index,
deadMinions: [tag.entity],
}, this.allCards),
];
}
}
}
}
if (item instanceof TagChangeHistoryItem) {
if (item.tag.tag !== GameTag.ZONE || item.tag.value !== Zone.GRAVEYARD) {
return;
}
const parentActionId = item.tag.parentIndex;
const parentAction = history.find(historyItem => historyItem.index === parentActionId);
// We make sure the death occurs during a DEATH phase, so that we don't count the
// "dead spells", ie spells that have been used and go to the graveyard
if (!parentAction ||
!(parentAction instanceof ActionHistoryItem) ||
parseInt(parentAction.node.attributes.type) !== BlockType.DEATHS) {
return;
}
return [
MinionDeathAction.create({
timestamp: item.timestamp,
index: item.index,
deadMinions: [item.tag.entity],
}, this.allCards),
];
}
}
reduce(actions) {
return ActionHelper.combineActions(actions, (previous, current) => previous instanceof MinionDeathAction && current instanceof MinionDeathAction, (previous, current) => this.mergeActions(previous, current));
}
mergeActions(previousAction, currentAction) {
return MinionDeathAction.create({
timestamp: previousAction.timestamp,
index: previousAction.index,
entities: currentAction.entities,
deadMinions: uniq([
...uniq(previousAction.deadMinions || []),
...uniq(currentAction.deadMinions || []),
]),
}, this.allCards);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW9uLWRlYXRoLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vbWluaW9uLWRlYXRoLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV4RSxPQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUVsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUM3QixZQUFvQixRQUF5QjtRQUF6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUFHLENBQUM7SUFFMUMsT0FBTyxDQUFDLElBQWlCO1FBQy9CLE9BQU8sSUFBSSxZQUFZLGlCQUFpQixJQUFJLElBQUksWUFBWSxvQkFBb0IsQ0FBQztJQUNsRixDQUFDO0lBRU0sS0FBSyxDQUNYLElBQThDLEVBQzlDLFdBQW1CLEVBQ25CLG9CQUF5QyxFQUN6QyxPQUErQjtRQUUvQixJQUFJLElBQUksWUFBWSxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUM3RCxPQUFPO2FBQ1A7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNqQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7d0JBQzdELE9BQU87NEJBQ04saUJBQWlCLENBQUMsTUFBTSxDQUN2QjtnQ0FDQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0NBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQ0FDakIsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQzs2QkFDekIsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiO3lCQUNELENBQUM7cUJBQ0Y7aUJBQ0Q7YUFDRDtTQUNEO1FBQ0QsSUFBSSxJQUFJLFlBQVksb0JBQW9CLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZFLE9BQU87YUFDUDtZQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQzVDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZGLGlGQUFpRjtZQUNqRix1RUFBdUU7WUFDdkUsSUFDQyxDQUFDLFlBQVk7Z0JBQ2IsQ0FBQyxDQUFDLFlBQVksWUFBWSxpQkFBaUIsQ0FBQztnQkFDNUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQy9EO2dCQUNELE9BQU87YUFDUDtZQUNELE9BQU87Z0JBQ04saUJBQWlCLENBQUMsTUFBTSxDQUN2QjtvQkFDQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7aUJBQzlCLEVBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FDYjthQUNELENBQUM7U0FDRjtJQUNGLENBQUM7SUFFTSxNQUFNLENBQUMsT0FBMEI7UUFDdkMsT0FBTyxZQUFZLENBQUMsY0FBYyxDQUNqQyxPQUFPLEVBQ1AsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLFlBQVksaUJBQWlCLElBQUksT0FBTyxZQUFZLGlCQUFpQixFQUNwRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxjQUFpQyxFQUFFLGFBQWdDO1FBQ3ZGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUM5QjtZQUNDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDM0IsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUM7Z0JBQ2pCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2dCQUN6QyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQzthQUN4QyxDQUFDO1NBQ0YsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiLENBQUM7SUFDSCxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbG9ja1R5cGUsIEdhbWVUYWcsIFpvbmUgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLWVzL3VuaXEnO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2FjdGlvbic7XHJcbmltcG9ydCB7IE1pbmlvbkRlYXRoQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9taW5pb24tZGVhdGgtYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dhbWUvZW50aXR5JztcclxuaW1wb3J0IHsgQWN0aW9uSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9hY3Rpb24taGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWdDaGFuZ2VIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L3RhZy1jaGFuZ2UtaGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgQWxsQ2FyZHNTZXJ2aWNlIH0gZnJvbSAnLi4vYWxsLWNhcmRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25IZWxwZXIgfSBmcm9tICcuL2FjdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgTWluaW9uRGVhdGhQYXJzZXIgaW1wbGVtZW50cyBQYXJzZXIge1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWxsQ2FyZHM6IEFsbENhcmRzU2VydmljZSkge31cclxuXHJcblx0cHVibGljIGFwcGxpZXMoaXRlbTogSGlzdG9yeUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBpdGVtIGluc3RhbmNlb2YgQWN0aW9uSGlzdG9yeUl0ZW0gfHwgaXRlbSBpbnN0YW5jZW9mIFRhZ0NoYW5nZUhpc3RvcnlJdGVtO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHBhcnNlKFxyXG5cdFx0aXRlbTogQWN0aW9uSGlzdG9yeUl0ZW0gfCBUYWdDaGFuZ2VIaXN0b3J5SXRlbSxcclxuXHRcdGN1cnJlbnRUdXJuOiBudW1iZXIsXHJcblx0XHRlbnRpdGllc0JlZm9yZUFjdGlvbjogTWFwPG51bWJlciwgRW50aXR5PixcclxuXHRcdGhpc3Rvcnk6IHJlYWRvbmx5IEhpc3RvcnlJdGVtW10sXHJcblx0KTogQWN0aW9uW10ge1xyXG5cdFx0aWYgKGl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25IaXN0b3J5SXRlbSkge1xyXG5cdFx0XHRpZiAocGFyc2VJbnQoaXRlbS5ub2RlLmF0dHJpYnV0ZXMudHlwZSkgIT09IEJsb2NrVHlwZS5ERUFUSFMpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGl0ZW0ubm9kZS50YWdzKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCB0YWcgb2YgaXRlbS5ub2RlLnRhZ3MpIHtcclxuXHRcdFx0XHRcdGlmICh0YWcudGFnID09PSBHYW1lVGFnLlpPTkUgJiYgdGFnLnZhbHVlID09PSBab25lLkdSQVZFWUFSRCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdFx0XHRcdE1pbmlvbkRlYXRoQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg6IGl0ZW0uaW5kZXgsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRlYWRNaW5pb25zOiBbdGFnLmVudGl0eV0sXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGl0ZW0gaW5zdGFuY2VvZiBUYWdDaGFuZ2VIaXN0b3J5SXRlbSkge1xyXG5cdFx0XHRpZiAoaXRlbS50YWcudGFnICE9PSBHYW1lVGFnLlpPTkUgfHwgaXRlbS50YWcudmFsdWUgIT09IFpvbmUuR1JBVkVZQVJEKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHBhcmVudEFjdGlvbklkID0gaXRlbS50YWcucGFyZW50SW5kZXg7XHJcblx0XHRcdGNvbnN0IHBhcmVudEFjdGlvbiA9IGhpc3RvcnkuZmluZChoaXN0b3J5SXRlbSA9PiBoaXN0b3J5SXRlbS5pbmRleCA9PT0gcGFyZW50QWN0aW9uSWQpO1xyXG5cdFx0XHQvLyBXZSBtYWtlIHN1cmUgdGhlIGRlYXRoIG9jY3VycyBkdXJpbmcgYSBERUFUSCBwaGFzZSwgc28gdGhhdCB3ZSBkb24ndCBjb3VudCB0aGVcclxuXHRcdFx0Ly8gXCJkZWFkIHNwZWxsc1wiLCBpZSBzcGVsbHMgdGhhdCBoYXZlIGJlZW4gdXNlZCBhbmQgZ28gdG8gdGhlIGdyYXZleWFyZFxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0IXBhcmVudEFjdGlvbiB8fFxyXG5cdFx0XHRcdCEocGFyZW50QWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uSGlzdG9yeUl0ZW0pIHx8XHJcblx0XHRcdFx0cGFyc2VJbnQocGFyZW50QWN0aW9uLm5vZGUuYXR0cmlidXRlcy50eXBlKSAhPT0gQmxvY2tUeXBlLkRFQVRIU1xyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFtcclxuXHRcdFx0XHRNaW5pb25EZWF0aEFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcblx0XHRcdFx0XHRcdGluZGV4OiBpdGVtLmluZGV4LFxyXG5cdFx0XHRcdFx0XHRkZWFkTWluaW9uczogW2l0ZW0udGFnLmVudGl0eV0sXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIHJlZHVjZShhY3Rpb25zOiByZWFkb25seSBBY3Rpb25bXSk6IHJlYWRvbmx5IEFjdGlvbltdIHtcclxuXHRcdHJldHVybiBBY3Rpb25IZWxwZXIuY29tYmluZUFjdGlvbnM8TWluaW9uRGVhdGhBY3Rpb24+KFxyXG5cdFx0XHRhY3Rpb25zLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzIGluc3RhbmNlb2YgTWluaW9uRGVhdGhBY3Rpb24gJiYgY3VycmVudCBpbnN0YW5jZW9mIE1pbmlvbkRlYXRoQWN0aW9uLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMubWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1lcmdlQWN0aW9ucyhwcmV2aW91c0FjdGlvbjogTWluaW9uRGVhdGhBY3Rpb24sIGN1cnJlbnRBY3Rpb246IE1pbmlvbkRlYXRoQWN0aW9uKTogTWluaW9uRGVhdGhBY3Rpb24ge1xyXG5cdFx0cmV0dXJuIE1pbmlvbkRlYXRoQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHRpbWVzdGFtcDogcHJldmlvdXNBY3Rpb24udGltZXN0YW1wLFxyXG5cdFx0XHRcdGluZGV4OiBwcmV2aW91c0FjdGlvbi5pbmRleCxcclxuXHRcdFx0XHRlbnRpdGllczogY3VycmVudEFjdGlvbi5lbnRpdGllcyxcclxuXHRcdFx0XHRkZWFkTWluaW9uczogdW5pcShbXHJcblx0XHRcdFx0XHQuLi51bmlxKHByZXZpb3VzQWN0aW9uLmRlYWRNaW5pb25zIHx8IFtdKSxcclxuXHRcdFx0XHRcdC4uLnVuaXEoY3VycmVudEFjdGlvbi5kZWFkTWluaW9ucyB8fCBbXSksXHJcblx0XHRcdFx0XSksXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iXX0=