UNPKG

@firestone-hs/replay-parser

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.

66 lines 11.6 kB
import { BlockType, GameTag, Zone } from '@firestone-hs/reference-data'; 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: [...(previousAction.deadMinions ?? []), ...(currentAction.deadMinions ?? [])].filter((id, index, self) => self.indexOf(id) === index), }, this.allCards); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW9uLWRlYXRoLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vbWluaW9uLWRlYXRoLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUd4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUM3QixZQUFvQixRQUF5QjtRQUF6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUFHLENBQUM7SUFFMUMsT0FBTyxDQUFDLElBQWlCO1FBQy9CLE9BQU8sSUFBSSxZQUFZLGlCQUFpQixJQUFJLElBQUksWUFBWSxvQkFBb0IsQ0FBQztJQUNsRixDQUFDO0lBRU0sS0FBSyxDQUNYLElBQThDLEVBQzlDLFdBQW1CLEVBQ25CLG9CQUF5QyxFQUN6QyxPQUErQjtRQUUvQixJQUFJLElBQUksWUFBWSxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUM3RCxPQUFPO2FBQ1A7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNqQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7d0JBQzdELE9BQU87NEJBQ04saUJBQWlCLENBQUMsTUFBTSxDQUN2QjtnQ0FDQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0NBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQ0FDakIsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQzs2QkFDekIsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiO3lCQUNELENBQUM7cUJBQ0Y7aUJBQ0Q7YUFDRDtTQUNEO1FBQ0QsSUFBSSxJQUFJLFlBQVksb0JBQW9CLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZFLE9BQU87YUFDUDtZQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQzVDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLENBQUM7WUFDekYsaUZBQWlGO1lBQ2pGLHVFQUF1RTtZQUN2RSxJQUNDLENBQUMsWUFBWTtnQkFDYixDQUFDLENBQUMsWUFBWSxZQUFZLGlCQUFpQixDQUFDO2dCQUM1QyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFDL0Q7Z0JBQ0QsT0FBTzthQUNQO1lBQ0QsT0FBTztnQkFDTixpQkFBaUIsQ0FBQyxNQUFNLENBQ3ZCO29CQUNDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztpQkFDOUIsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiO2FBQ0QsQ0FBQztTQUNGO0lBQ0YsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUEwQjtRQUN2QyxPQUFPLFlBQVksQ0FBQyxjQUFjLENBQ2pDLE9BQU8sRUFDUCxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLFFBQVEsWUFBWSxpQkFBaUIsSUFBSSxPQUFPLFlBQVksaUJBQWlCLEVBQ3BHLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQzNELENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLGNBQWlDLEVBQUUsYUFBZ0M7UUFDdkYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQzlCO1lBQ0MsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztZQUMzQixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDaEMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ2hHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUMvQztTQUNELEVBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FDYixDQUFDO0lBQ0gsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvY2tUeXBlLCBHYW1lVGFnLCBab25lIH0gZnJvbSAnQGZpcmVzdG9uZS1ocy9yZWZlcmVuY2UtZGF0YSc7XHJcbmltcG9ydCB7IE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vYWN0aW9uJztcclxuaW1wb3J0IHsgTWluaW9uRGVhdGhBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL21pbmlvbi1kZWF0aC1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2FtZS9lbnRpdHknO1xyXG5pbXBvcnQgeyBBY3Rpb25IaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2FjdGlvbi1oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2hpc3RvcnktaXRlbSc7XHJcbmltcG9ydCB7IFRhZ0NoYW5nZUhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpc3RvcnkvdGFnLWNoYW5nZS1oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBBbGxDYXJkc1NlcnZpY2UgfSBmcm9tICcuLi9hbGwtY2FyZHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGlvbkhlbHBlciB9IGZyb20gJy4vYWN0aW9uLWhlbHBlcic7XHJcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJy4vcGFyc2VyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNaW5pb25EZWF0aFBhcnNlciBpbXBsZW1lbnRzIFBhcnNlciB7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBhbGxDYXJkczogQWxsQ2FyZHNTZXJ2aWNlKSB7fVxyXG5cclxuXHRwdWJsaWMgYXBwbGllcyhpdGVtOiBIaXN0b3J5SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25IaXN0b3J5SXRlbSB8fCBpdGVtIGluc3RhbmNlb2YgVGFnQ2hhbmdlSGlzdG9yeUl0ZW07XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcGFyc2UoXHJcblx0XHRpdGVtOiBBY3Rpb25IaXN0b3J5SXRlbSB8IFRhZ0NoYW5nZUhpc3RvcnlJdGVtLFxyXG5cdFx0Y3VycmVudFR1cm46IG51bWJlcixcclxuXHRcdGVudGl0aWVzQmVmb3JlQWN0aW9uOiBNYXA8bnVtYmVyLCBFbnRpdHk+LFxyXG5cdFx0aGlzdG9yeTogcmVhZG9ubHkgSGlzdG9yeUl0ZW1bXSxcclxuXHQpOiBBY3Rpb25bXSB7XHJcblx0XHRpZiAoaXRlbSBpbnN0YW5jZW9mIEFjdGlvbkhpc3RvcnlJdGVtKSB7XHJcblx0XHRcdGlmIChwYXJzZUludChpdGVtLm5vZGUuYXR0cmlidXRlcy50eXBlKSAhPT0gQmxvY2tUeXBlLkRFQVRIUykge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaXRlbS5ub2RlLnRhZ3MpIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiBpdGVtLm5vZGUudGFncykge1xyXG5cdFx0XHRcdFx0aWYgKHRhZy50YWcgPT09IEdhbWVUYWcuWk9ORSAmJiB0YWcudmFsdWUgPT09IFpvbmUuR1JBVkVZQVJEKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0XHRcdFx0TWluaW9uRGVhdGhBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVhZE1pbmlvbnM6IFt0YWcuZW50aXR5XSxcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoaXRlbSBpbnN0YW5jZW9mIFRhZ0NoYW5nZUhpc3RvcnlJdGVtKSB7XHJcblx0XHRcdGlmIChpdGVtLnRhZy50YWcgIT09IEdhbWVUYWcuWk9ORSB8fCBpdGVtLnRhZy52YWx1ZSAhPT0gWm9uZS5HUkFWRVlBUkQpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgcGFyZW50QWN0aW9uSWQgPSBpdGVtLnRhZy5wYXJlbnRJbmRleDtcclxuXHRcdFx0Y29uc3QgcGFyZW50QWN0aW9uID0gaGlzdG9yeS5maW5kKChoaXN0b3J5SXRlbSkgPT4gaGlzdG9yeUl0ZW0uaW5kZXggPT09IHBhcmVudEFjdGlvbklkKTtcclxuXHRcdFx0Ly8gV2UgbWFrZSBzdXJlIHRoZSBkZWF0aCBvY2N1cnMgZHVyaW5nIGEgREVBVEggcGhhc2UsIHNvIHRoYXQgd2UgZG9uJ3QgY291bnQgdGhlXHJcblx0XHRcdC8vIFwiZGVhZCBzcGVsbHNcIiwgaWUgc3BlbGxzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgYW5kIGdvIHRvIHRoZSBncmF2ZXlhcmRcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdCFwYXJlbnRBY3Rpb24gfHxcclxuXHRcdFx0XHQhKHBhcmVudEFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkhpc3RvcnlJdGVtKSB8fFxyXG5cdFx0XHRcdHBhcnNlSW50KHBhcmVudEFjdGlvbi5ub2RlLmF0dHJpYnV0ZXMudHlwZSkgIT09IEJsb2NrVHlwZS5ERUFUSFNcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0TWluaW9uRGVhdGhBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHR0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG5cdFx0XHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdFx0XHRcdFx0ZGVhZE1pbmlvbnM6IFtpdGVtLnRhZy5lbnRpdHldLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZWR1Y2UoYWN0aW9uczogcmVhZG9ubHkgQWN0aW9uW10pOiByZWFkb25seSBBY3Rpb25bXSB7XHJcblx0XHRyZXR1cm4gQWN0aW9uSGVscGVyLmNvbWJpbmVBY3Rpb25zPE1pbmlvbkRlYXRoQWN0aW9uPihcclxuXHRcdFx0YWN0aW9ucyxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cyBpbnN0YW5jZW9mIE1pbmlvbkRlYXRoQWN0aW9uICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBNaW5pb25EZWF0aEFjdGlvbixcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLm1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtZXJnZUFjdGlvbnMocHJldmlvdXNBY3Rpb246IE1pbmlvbkRlYXRoQWN0aW9uLCBjdXJyZW50QWN0aW9uOiBNaW5pb25EZWF0aEFjdGlvbik6IE1pbmlvbkRlYXRoQWN0aW9uIHtcclxuXHRcdHJldHVybiBNaW5pb25EZWF0aEFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0aW1lc3RhbXA6IHByZXZpb3VzQWN0aW9uLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRpbmRleDogcHJldmlvdXNBY3Rpb24uaW5kZXgsXHJcblx0XHRcdFx0ZW50aXRpZXM6IGN1cnJlbnRBY3Rpb24uZW50aXRpZXMsXHJcblx0XHRcdFx0ZGVhZE1pbmlvbnM6IFsuLi4ocHJldmlvdXNBY3Rpb24uZGVhZE1pbmlvbnMgPz8gW10pLCAuLi4oY3VycmVudEFjdGlvbi5kZWFkTWluaW9ucyA/PyBbXSldLmZpbHRlcihcclxuXHRcdFx0XHRcdChpZCwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZihpZCkgPT09IGluZGV4LFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iXX0=