UNPKG

@firestone-hs/replay-parser

Version:

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

61 lines 10.6 kB
import { GameTag, Zone } from '@firestone-hs/reference-data'; 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: [...(previousAction.data ?? []), ...(currentAction.data ?? [])].filter((id, index, self) => self.indexOf(id) === index), }, this.allCards); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1kaXNjYXJkLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vY2FyZC1kaXNjYXJkLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxNQUFNLE9BQU8saUJBQWlCO0lBQzdCLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO0lBQUcsQ0FBQztJQUUxQyxPQUFPLENBQUMsSUFBaUI7UUFDL0IsT0FBTyxDQUNOLElBQUksWUFBWSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQ3pHLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUNYLElBQTBCLEVBQzFCLFdBQW1CLEVBQ25CLG9CQUF5QyxFQUN6QyxPQUErQjtRQUUvQixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTztTQUNQO1FBRUQsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNaLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9CLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsT0FBTyxJQUFJLENBQUM7YUFDWjtZQUNELE9BQU87Z0JBQ04saUJBQWlCLENBQUMsTUFBTSxDQUN2QjtvQkFDQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsVUFBVTtvQkFDVixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztpQkFDdkIsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiO2FBQ0QsQ0FBQztTQUNGO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQTBCO1FBQ3ZDLE9BQU8sWUFBWSxDQUFDLGNBQWMsQ0FDakMsT0FBTyxFQUNQLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFDakUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FDM0QsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLE9BQWU7UUFDM0QsSUFBSSxDQUFDLENBQUMsUUFBUSxZQUFZLGlCQUFpQixJQUFJLE9BQU8sWUFBWSxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3JGLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFGLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuRCxDQUFDO0lBRU8sWUFBWSxDQUFDLGNBQWlDLEVBQUUsYUFBZ0M7UUFDdkYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQzlCO1lBQ0MsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztZQUMxQixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDaEMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO1lBQ3BDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMzRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FDL0M7U0FDRCxFQUNELElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztJQUNILENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVUYWcsIFpvbmUgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9hY3Rpb24nO1xyXG5pbXBvcnQgeyBDYXJkRGlzY2FyZEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vY2FyZC1kaXNjYXJkLWFjdGlvbic7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9nYW1lL2VudGl0eSc7XHJcbmltcG9ydCB7IEhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpc3RvcnkvaGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgVGFnQ2hhbmdlSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS90YWctY2hhbmdlLWhpc3RvcnktaXRlbSc7XHJcbmltcG9ydCB7IEFsbENhcmRzU2VydmljZSB9IGZyb20gJy4uL2FsbC1jYXJkcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aW9uSGVscGVyIH0gZnJvbSAnLi9hY3Rpb24taGVscGVyJztcclxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi9wYXJzZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIENhcmREaXNjYXJkUGFyc2VyIGltcGxlbWVudHMgUGFyc2VyIHtcclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGFsbENhcmRzOiBBbGxDYXJkc1NlcnZpY2UpIHt9XHJcblxyXG5cdHB1YmxpYyBhcHBsaWVzKGl0ZW06IEhpc3RvcnlJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRpdGVtIGluc3RhbmNlb2YgVGFnQ2hhbmdlSGlzdG9yeUl0ZW0gJiYgaXRlbS50YWcudGFnID09PSBHYW1lVGFnLlpPTkUgJiYgaXRlbS50YWcudmFsdWUgPT09IFpvbmUuU0VUQVNJREVcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcGFyc2UoXHJcblx0XHRpdGVtOiBUYWdDaGFuZ2VIaXN0b3J5SXRlbSxcclxuXHRcdGN1cnJlbnRUdXJuOiBudW1iZXIsXHJcblx0XHRlbnRpdGllc0JlZm9yZUFjdGlvbjogTWFwPG51bWJlciwgRW50aXR5PixcclxuXHRcdGhpc3Rvcnk6IHJlYWRvbmx5IEhpc3RvcnlJdGVtW10sXHJcblx0KTogQWN0aW9uW10ge1xyXG5cdFx0aWYgKGN1cnJlbnRUdXJuID09PSAwKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBlbnRpdHkgPSBlbnRpdGllc0JlZm9yZUFjdGlvbi5nZXQoaXRlbS50YWcuZW50aXR5KTtcclxuXHRcdGlmICghZW50aXR5KSB7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcmV2aW91c1pvbmUgPSBlbnRpdHkuZ2V0VGFnKEdhbWVUYWcuWk9ORSk7XHJcblx0XHRpZiAocHJldmlvdXNab25lID09PSBab25lLkhBTkQpIHtcclxuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IGVudGl0aWVzQmVmb3JlQWN0aW9uLmdldChpdGVtLnRhZy5lbnRpdHkpLmdldFRhZyhHYW1lVGFnLkNPTlRST0xMRVIpO1xyXG5cdFx0XHRpZiAoIWNvbnRyb2xsZXIpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1tjYXJkLWRpc2NhcmQtcGFyc2VyXSBlbXB0eSBjb250cm9sbGVyJywgaXRlbSwgZW50aXRpZXNCZWZvcmVBY3Rpb24uZ2V0KGl0ZW0udGFnLmVudGl0eSkpO1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0Q2FyZERpc2NhcmRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHR0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG5cdFx0XHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcclxuXHRcdFx0XHRcdFx0ZGF0YTogW2l0ZW0udGFnLmVudGl0eV0sXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbXTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZWR1Y2UoYWN0aW9uczogcmVhZG9ubHkgQWN0aW9uW10pOiByZWFkb25seSBBY3Rpb25bXSB7XHJcblx0XHRyZXR1cm4gQWN0aW9uSGVscGVyLmNvbWJpbmVBY3Rpb25zPENhcmREaXNjYXJkQWN0aW9uPihcclxuXHRcdFx0YWN0aW9ucyxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLnNob3VsZE1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHRcdChwcmV2aW91cywgY3VycmVudCkgPT4gdGhpcy5tZXJnZUFjdGlvbnMocHJldmlvdXMsIGN1cnJlbnQpLFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2hvdWxkTWVyZ2VBY3Rpb25zKHByZXZpb3VzOiBBY3Rpb24sIGN1cnJlbnQ6IEFjdGlvbik6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCEocHJldmlvdXMgaW5zdGFuY2VvZiBDYXJkRGlzY2FyZEFjdGlvbiAmJiBjdXJyZW50IGluc3RhbmNlb2YgQ2FyZERpc2NhcmRBY3Rpb24pKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGlmIChwcmV2aW91cy5jb250cm9sbGVyID09PSB1bmRlZmluZWQgfHwgY3VycmVudC5jb250cm9sbGVyID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdbY2FyZC1kaXNjYXJkLXBhcnNlcl0gRW1wdHkgY29udHJvbGxlciBmb3IgZHJhdyBhY3Rpb24nLCBwcmV2aW91cywgY3VycmVudCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBwcmV2aW91cy5jb250cm9sbGVyID09PSBjdXJyZW50LmNvbnRyb2xsZXI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1lcmdlQWN0aW9ucyhwcmV2aW91c0FjdGlvbjogQ2FyZERpc2NhcmRBY3Rpb24sIGN1cnJlbnRBY3Rpb246IENhcmREaXNjYXJkQWN0aW9uKTogQ2FyZERpc2NhcmRBY3Rpb24ge1xyXG5cdFx0cmV0dXJuIENhcmREaXNjYXJkQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHRpbWVzdGFtcDogcHJldmlvdXNBY3Rpb24udGltZXN0YW1wLFxyXG5cdFx0XHRcdGluZGV4OiBjdXJyZW50QWN0aW9uLmluZGV4LFxyXG5cdFx0XHRcdGVudGl0aWVzOiBjdXJyZW50QWN0aW9uLmVudGl0aWVzLFxyXG5cdFx0XHRcdGNvbnRyb2xsZXI6IGN1cnJlbnRBY3Rpb24uY29udHJvbGxlcixcclxuXHRcdFx0XHRkYXRhOiBbLi4uKHByZXZpb3VzQWN0aW9uLmRhdGEgPz8gW10pLCAuLi4oY3VycmVudEFjdGlvbi5kYXRhID8/IFtdKV0uZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGlkLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKGlkKSA9PT0gaW5kZXgsXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiJdfQ==