@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
56 lines • 9.91 kB
JavaScript
import { GameTag, MetaTags } from '@firestone-hs/reference-data';
import uniq from 'lodash-es/uniq';
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: uniq([
...uniq(previousAction.burnedCardIds || []),
...uniq(currentAction.burnedCardIds || []),
]),
}, this.allCards);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1idXJuLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vY2FyZC1idXJuLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWpFLE9BQU8sSUFBSSxNQUFNLGdCQUFnQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUd0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUdqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsTUFBTSxPQUFPLGNBQWM7SUFDMUIsWUFBb0IsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7SUFBRyxDQUFDO0lBRTFDLE9BQU8sQ0FBQyxJQUFpQjtRQUMvQixPQUFPLENBQ04sSUFBSSxZQUFZLG1CQUFtQjtZQUNsQyxJQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDMUUsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQ1gsSUFBeUIsRUFDekIsV0FBbUIsRUFDbkIsb0JBQXlDLEVBQ3pDLE9BQStCO1FBRS9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRU8sZUFBZSxDQUFDLElBQXlCLEVBQUUsSUFBVSxFQUFFLG9CQUF5QztRQUN2RyxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakcsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUNELE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FDM0I7WUFDQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFVBQVU7WUFDVixhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzVCLEVBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FDYixDQUFDO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUEwQjtRQUN2QyxPQUFPLFlBQVksQ0FBQyxjQUFjLENBQ2pDLE9BQU8sRUFDUCxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQ2pFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQzNELENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxPQUFlO1FBQzNELElBQUksQ0FBQyxDQUFDLFFBQVEsWUFBWSxjQUFjLElBQUksT0FBTyxZQUFZLGNBQWMsQ0FBQyxFQUFFO1lBQy9FLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzFFLE9BQU8sQ0FBQyxJQUFJLENBQUMscURBQXFELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZGLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuRCxDQUFDO0lBRU8sWUFBWSxDQUFDLGNBQThCLEVBQUUsYUFBNkI7UUFDakYsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUMzQjtZQUNDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUs7WUFDMUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQ2hDLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVTtZQUNwQyxhQUFhLEVBQUUsSUFBSSxDQUFDO2dCQUNuQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7YUFDMUMsQ0FBQztTQUNGLEVBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FDYixDQUFDO0lBQ0gsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2FtZVRhZywgTWV0YVRhZ3MgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLWVzL3VuaXEnO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2FjdGlvbic7XHJcbmltcG9ydCB7IENhcmRCdXJuQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9jYXJkLWJ1cm4tYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dhbWUvZW50aXR5JztcclxuaW1wb3J0IHsgSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBNZXRhZGF0YUhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpc3RvcnkvbWV0YWRhdGEtaGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9wYXJzZXIvaW5mbyc7XHJcbmltcG9ydCB7IEFsbENhcmRzU2VydmljZSB9IGZyb20gJy4uL2FsbC1jYXJkcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aW9uSGVscGVyIH0gZnJvbSAnLi9hY3Rpb24taGVscGVyJztcclxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi9wYXJzZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIENhcmRCdXJuUGFyc2VyIGltcGxlbWVudHMgUGFyc2VyIHtcclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGFsbENhcmRzOiBBbGxDYXJkc1NlcnZpY2UpIHt9XHJcblxyXG5cdHB1YmxpYyBhcHBsaWVzKGl0ZW06IEhpc3RvcnlJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRpdGVtIGluc3RhbmNlb2YgTWV0YWRhdGFIaXN0b3J5SXRlbSAmJlxyXG5cdFx0XHQoaXRlbSBhcyBNZXRhZGF0YUhpc3RvcnlJdGVtKS5tZXRhLm1ldGEgPT09IE1ldGFUYWdzW01ldGFUYWdzLkJVUk5FRF9DQVJEXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBwYXJzZShcclxuXHRcdGl0ZW06IE1ldGFkYXRhSGlzdG9yeUl0ZW0sXHJcblx0XHRjdXJyZW50VHVybjogbnVtYmVyLFxyXG5cdFx0ZW50aXRpZXNCZWZvcmVBY3Rpb246IE1hcDxudW1iZXIsIEVudGl0eT4sXHJcblx0XHRoaXN0b3J5OiByZWFkb25seSBIaXN0b3J5SXRlbVtdLFxyXG5cdCk6IEFjdGlvbltdIHtcclxuXHRcdHJldHVybiBpdGVtLm1ldGEuaW5mby5tYXAoaW5mbyA9PiB0aGlzLmJ1aWxkQnVybkFjdGlvbihpdGVtLCBpbmZvLCBlbnRpdGllc0JlZm9yZUFjdGlvbikpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBidWlsZEJ1cm5BY3Rpb24oaXRlbTogTWV0YWRhdGFIaXN0b3J5SXRlbSwgaW5mbzogSW5mbywgZW50aXRpZXNCZWZvcmVBY3Rpb246IE1hcDxudW1iZXIsIEVudGl0eT4pOiBBY3Rpb24ge1xyXG5cdFx0Y29uc3QgY29udHJvbGxlciA9IGVudGl0aWVzQmVmb3JlQWN0aW9uLmdldChpbmZvLmVudGl0eSkuZ2V0VGFnKEdhbWVUYWcuQ09OVFJPTExFUik7XHJcblx0XHRpZiAoIWNvbnRyb2xsZXIpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdbY2FyZC1idXJuLXBhcnNlcl0gZW1wdHkgY29udHJvbGxlcicsIGluZm8sIGVudGl0aWVzQmVmb3JlQWN0aW9uLmdldChpbmZvLmVudGl0eSkpO1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBDYXJkQnVybkFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG5cdFx0XHRcdGluZGV4OiBpdGVtLmluZGV4LFxyXG5cdFx0XHRcdGNvbnRyb2xsZXIsXHJcblx0XHRcdFx0YnVybmVkQ2FyZElkczogW2luZm8uZW50aXR5XSxcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVkdWNlKGFjdGlvbnM6IHJlYWRvbmx5IEFjdGlvbltdKTogcmVhZG9ubHkgQWN0aW9uW10ge1xyXG5cdFx0cmV0dXJuIEFjdGlvbkhlbHBlci5jb21iaW5lQWN0aW9uczxDYXJkQnVybkFjdGlvbj4oXHJcblx0XHRcdGFjdGlvbnMsXHJcblx0XHRcdChwcmV2aW91cywgY3VycmVudCkgPT4gdGhpcy5zaG91bGRNZXJnZUFjdGlvbnMocHJldmlvdXMsIGN1cnJlbnQpLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMubWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNob3VsZE1lcmdlQWN0aW9ucyhwcmV2aW91czogQWN0aW9uLCBjdXJyZW50OiBBY3Rpb24pOiBib29sZWFuIHtcclxuXHRcdGlmICghKHByZXZpb3VzIGluc3RhbmNlb2YgQ2FyZEJ1cm5BY3Rpb24gJiYgY3VycmVudCBpbnN0YW5jZW9mIENhcmRCdXJuQWN0aW9uKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAocHJldmlvdXMuY29udHJvbGxlciA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnQuY29udHJvbGxlciA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignW2NhcmQtYnVybi1wYXJzZXJdIEVtcHR5IGNvbnRyb2xsZXIgZm9yIGJ1cm4gYWN0aW9uJywgcHJldmlvdXMsIGN1cnJlbnQpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJldmlvdXMuY29udHJvbGxlciA9PT0gY3VycmVudC5jb250cm9sbGVyO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtZXJnZUFjdGlvbnMocHJldmlvdXNBY3Rpb246IENhcmRCdXJuQWN0aW9uLCBjdXJyZW50QWN0aW9uOiBDYXJkQnVybkFjdGlvbik6IENhcmRCdXJuQWN0aW9uIHtcclxuXHRcdHJldHVybiBDYXJkQnVybkFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0aW1lc3RhbXA6IHByZXZpb3VzQWN0aW9uLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRpbmRleDogY3VycmVudEFjdGlvbi5pbmRleCxcclxuXHRcdFx0XHRlbnRpdGllczogY3VycmVudEFjdGlvbi5lbnRpdGllcyxcclxuXHRcdFx0XHRjb250cm9sbGVyOiBjdXJyZW50QWN0aW9uLmNvbnRyb2xsZXIsXHJcblx0XHRcdFx0YnVybmVkQ2FyZElkczogdW5pcShbXHJcblx0XHRcdFx0XHQuLi51bmlxKHByZXZpb3VzQWN0aW9uLmJ1cm5lZENhcmRJZHMgfHwgW10pLFxyXG5cdFx0XHRcdFx0Li4udW5pcShjdXJyZW50QWN0aW9uLmJ1cm5lZENhcmRJZHMgfHwgW10pLFxyXG5cdFx0XHRcdF0pLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19