@sigil-sifter/magic 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/LICENSE +7 -7
  2. package/README.md +96 -95
  3. package/package.json +1 -1
  4. package/src/core/MagicCard.js +250 -250
  5. package/src/core/helpers.js +6 -6
  6. package/src/core/index.js +3 -3
  7. package/src/data/abilityWords.js +66 -66
  8. package/src/data/colors.js +15 -15
  9. package/src/data/gameFormats.js +25 -25
  10. package/src/data/games.js +5 -5
  11. package/src/data/guilds.js +33 -33
  12. package/src/data/languages.js +30 -30
  13. package/src/data/rarities.js +25 -25
  14. package/src/expressions/ArrayLengthExpression.js +15 -15
  15. package/src/expressions/ColorExpression.js +40 -40
  16. package/src/expressions/DevotionExpression.js +56 -56
  17. package/src/expressions/EvenOddExpression.js +43 -43
  18. package/src/expressions/ExactStringExpression.js +11 -11
  19. package/src/expressions/FormatExpression.js +19 -19
  20. package/src/expressions/GameExpression.js +19 -19
  21. package/src/expressions/KeywordAbilityExpression.js +33 -33
  22. package/src/expressions/LanguageExpression.js +34 -34
  23. package/src/expressions/ManaExpression.js +36 -36
  24. package/src/expressions/PowTouExpression.js +41 -41
  25. package/src/expressions/ProducesExpression.js +35 -35
  26. package/src/expressions/RarityExpression.js +30 -30
  27. package/src/expressions/has/IndicatorExpression.js +11 -11
  28. package/src/expressions/has/WatermarkExpression.js +11 -11
  29. package/src/expressions/is/BoosterExpression.js +11 -11
  30. package/src/expressions/is/DFCExpression.js +11 -11
  31. package/src/expressions/is/EtchedExpression.js +11 -11
  32. package/src/expressions/is/FlipExpression.js +11 -11
  33. package/src/expressions/is/FoilExpression.js +11 -11
  34. package/src/expressions/is/FrenchVanillaExpression.js +11 -11
  35. package/src/expressions/is/FullArtExpression.js +11 -11
  36. package/src/expressions/is/GlossyExpression.js +11 -11
  37. package/src/expressions/is/HistoricExpression.js +11 -11
  38. package/src/expressions/is/HybridExpression.js +11 -11
  39. package/src/expressions/is/LevelerExpression.js +11 -11
  40. package/src/expressions/is/MDFCExpression.js +11 -11
  41. package/src/expressions/is/MeldExpression.js +11 -11
  42. package/src/expressions/is/ModalExpression.js +11 -11
  43. package/src/expressions/is/NonFoilExpression.js +11 -11
  44. package/src/expressions/is/PartyExpression.js +11 -11
  45. package/src/expressions/is/PermanentExpression.js +11 -11
  46. package/src/expressions/is/PhyrexianExpression.js +11 -11
  47. package/src/expressions/is/PromoExpression.js +11 -11
  48. package/src/expressions/is/ReprintExpression.js +11 -11
  49. package/src/expressions/is/ReservedExpression.js +11 -11
  50. package/src/expressions/is/SpellExpression.js +11 -11
  51. package/src/expressions/is/SplitExpression.js +11 -11
  52. package/src/expressions/is/SpotlightExpression.js +11 -11
  53. package/src/expressions/is/TextlessExpression.js +11 -11
  54. package/src/expressions/is/TransformExpression.js +11 -11
  55. package/src/expressions/is/UniversesBeyondExpression.js +11 -11
  56. package/src/expressions/is/VanillaExpression.js +11 -11
  57. package/src/expressions/is/index.js +59 -59
  58. package/src/extensions/ColorExtension.js +22 -22
  59. package/src/extensions/FormatExtension.js +15 -15
  60. package/src/extensions/GameExtension.js +15 -15
  61. package/src/extensions/KeywordExtension.js +11 -11
  62. package/src/extensions/LanguageExtension.js +15 -15
  63. package/src/extensions/RarityExtension.js +20 -20
  64. package/src/extensions/SetExtension.js +13 -13
  65. package/src/index.js +30 -36
  66. package/src/keywords/AbilityKeyword.js +16 -16
  67. package/src/keywords/ArtistKeyword.js +11 -11
  68. package/src/keywords/BannedKeyword.js +21 -21
  69. package/src/keywords/BorderKeyword.js +21 -21
  70. package/src/keywords/CardTypeKeyword.js +11 -11
  71. package/src/keywords/CollectorNumberKeyword.js +16 -16
  72. package/src/keywords/ColorIdentityKeyword.js +11 -11
  73. package/src/keywords/ColorKeyword.js +17 -17
  74. package/src/keywords/DevotionKeyword.js +21 -21
  75. package/src/keywords/FlavorTextKeyword.js +11 -11
  76. package/src/keywords/FormatKeyword.js +21 -21
  77. package/src/keywords/FrameKeyword.js +22 -22
  78. package/src/keywords/GameKeyword.js +21 -21
  79. package/src/keywords/HasKeyword.js +13 -13
  80. package/src/keywords/IsKeyword.js +17 -17
  81. package/src/keywords/LanguageKeyword.js +16 -16
  82. package/src/keywords/LoyaltyKeyword.js +16 -16
  83. package/src/keywords/ManaCostKeyword.js +20 -20
  84. package/src/keywords/ManaValueKeyword.js +17 -17
  85. package/src/keywords/NameKeyword.js +11 -11
  86. package/src/keywords/NotKeyword.js +21 -21
  87. package/src/keywords/PowerKeyword.js +29 -29
  88. package/src/keywords/ProducesKeyword.js +16 -16
  89. package/src/keywords/RarityKeyword.js +16 -16
  90. package/src/keywords/RestrictedKeyword.js +21 -21
  91. package/src/keywords/RulesTextKeyword.js +11 -11
  92. package/src/keywords/SetKeyword.js +21 -21
  93. package/src/keywords/SetTypeKeyword.js +21 -21
  94. package/src/keywords/StampKeyword.js +21 -21
  95. package/src/keywords/ToughnessKeyword.js +29 -29
  96. package/src/keywords/WatermarkKeyword.js +16 -16
  97. package/src/keywords/index.js +65 -65
@@ -1,15 +1,15 @@
1
- import defaultGameFormats from '../data/gameFormats.js';
2
-
3
- export default class FormatExtension {
4
- constructor(data) {
5
- this.gameFormats = data.gameFormats || defaultGameFormats;
6
- this.gameFormats.forEach(format => {
7
- if (format.expr) return;
8
- format.expr = new RegExp(`^${format.name}$`, 'i')
9
- });
10
- }
11
-
12
- resolveFormat(value) {
13
- return this.gameFormats.find(g => g.expr.test(value));
14
- }
15
- }
1
+ import defaultGameFormats from '../data/gameFormats.js';
2
+
3
+ export default class FormatExtension {
4
+ constructor(data) {
5
+ this.gameFormats = data.gameFormats || defaultGameFormats;
6
+ this.gameFormats.forEach(format => {
7
+ if (format.expr) return;
8
+ format.expr = new RegExp(`^${format.name}$`, 'i')
9
+ });
10
+ }
11
+
12
+ resolveFormat(value) {
13
+ return this.gameFormats.find(g => g.expr.test(value));
14
+ }
15
+ }
@@ -1,15 +1,15 @@
1
- import defaultGames from '../data/games.js';
2
-
3
- export default class GameExtension {
4
- constructor(data) {
5
- this.games = data.games || defaultGames;
6
- this.games.forEach(g => {
7
- if (g.expr) return;
8
- g.expr = new RegExp(`^${g.name}$`, 'i')
9
- });
10
- }
11
-
12
- resolveGame(value) {
13
- return this.games.find(g => g.expr.test(value));
14
- }
15
- }
1
+ import defaultGames from '../data/games.js';
2
+
3
+ export default class GameExtension {
4
+ constructor(data) {
5
+ this.games = data.games || defaultGames;
6
+ this.games.forEach(g => {
7
+ if (g.expr) return;
8
+ g.expr = new RegExp(`^${g.name}$`, 'i')
9
+ });
10
+ }
11
+
12
+ resolveGame(value) {
13
+ return this.games.find(g => g.expr.test(value));
14
+ }
15
+ }
@@ -1,11 +1,11 @@
1
- import defaultAbilityWords from '../data/abilityWords.js';
2
-
3
- export default class KeywordExtension {
4
- constructor(data) {
5
- this.abilityWords = data.abilityWords || defaultAbilityWords;
6
- }
7
-
8
- isAbilityWord(str) {
9
- return this.abilityWords.includes(str);
10
- }
11
- }
1
+ import defaultAbilityWords from '../data/abilityWords.js';
2
+
3
+ export default class KeywordExtension {
4
+ constructor(data) {
5
+ this.abilityWords = data.abilityWords || defaultAbilityWords;
6
+ }
7
+
8
+ isAbilityWord(str) {
9
+ return this.abilityWords.includes(str);
10
+ }
11
+ }
@@ -1,15 +1,15 @@
1
- import defaultLanguages from '../data/languages.js';
2
-
3
- export default class LanguageExtension {
4
- constructor(data) {
5
- this.languages = data.languages || defaultLanguages;
6
- }
7
-
8
- resolveLanguage(str) {
9
- const lcStr = str.toLowerCase();
10
- return this.languages.find(lang => {
11
- return lang.acronyms.includes(lcStr)
12
- || lang.expr.test(str);
13
- });
14
- }
15
- }
1
+ import defaultLanguages from '../data/languages.js';
2
+
3
+ export default class LanguageExtension {
4
+ constructor(data) {
5
+ this.languages = data.languages || defaultLanguages;
6
+ }
7
+
8
+ resolveLanguage(str) {
9
+ const lcStr = str.toLowerCase();
10
+ return this.languages.find(lang => {
11
+ return lang.acronyms.includes(lcStr)
12
+ || lang.expr.test(str);
13
+ });
14
+ }
15
+ }
@@ -1,20 +1,20 @@
1
- import defaultRarities from '../data/rarities.js';
2
-
3
- export default class RarityExtension {
4
- constructor(data) {
5
- this.rarities = data.rarities || defaultRarities;
6
- this.rarities.forEach(r => {
7
- if (r.expr) return;
8
- r.expr = new RegExp(`^(${r.char}|${r.name})$`, 'i')
9
- });
10
- }
11
-
12
- resolveRarity(value) {
13
- return this.rarities.find(r => r.expr.test(value));
14
- }
15
-
16
- get rarityExpr() {
17
- const namesAndChars = this.rarities.flatMap(r => [r.char, r.name]);
18
- return new RegExp(`^(${namesAndChars.join('|')})$`, 'i');
19
- }
20
- }
1
+ import defaultRarities from '../data/rarities.js';
2
+
3
+ export default class RarityExtension {
4
+ constructor(data) {
5
+ this.rarities = data.rarities || defaultRarities;
6
+ this.rarities.forEach(r => {
7
+ if (r.expr) return;
8
+ r.expr = new RegExp(`^(${r.char}|${r.name})$`, 'i')
9
+ });
10
+ }
11
+
12
+ resolveRarity(value) {
13
+ return this.rarities.find(r => r.expr.test(value));
14
+ }
15
+
16
+ get rarityExpr() {
17
+ const namesAndChars = this.rarities.flatMap(r => [r.char, r.name]);
18
+ return new RegExp(`^(${namesAndChars.join('|')})\\b`, 'i');
19
+ }
20
+ }
@@ -1,13 +1,13 @@
1
- export default class SetExtension {
2
- constructor(data) {
3
- this.sets = data.sets || [];
4
- this.sets.forEach(set => {
5
- if (set.expr) return;
6
- set.expr = new RegExp(`^(${set.name}|${set.code})$`, 'i');
7
- });
8
- }
9
-
10
- resolveSet(str) {
11
- return this.sets.find(set => set.expr.test(str));
12
- }
13
- }
1
+ export default class SetExtension {
2
+ constructor(data) {
3
+ this.sets = data.sets || [];
4
+ this.sets.forEach(set => {
5
+ if (set.expr) return;
6
+ set.expr = new RegExp(`^(${set.name}|${set.code})$`, 'i');
7
+ });
8
+ }
9
+
10
+ resolveSet(str) {
11
+ return this.sets.find(set => set.expr.test(str));
12
+ }
13
+ }
package/src/index.js CHANGED
@@ -1,36 +1,30 @@
1
- import MagicCard from './core/MagicCard.js';
2
- import ColorExtension from './extensions/ColorExtension.js';
3
- import FormatExtension from './extensions/FormatExtension.js';
4
- import GameExtension from './extensions/GameExtension.js';
5
- import KeywordExtension from './extensions/KeywordExtension.js';
6
- import LanguageExtension from './extensions/LanguageExtension.js';
7
- import RarityExtension from './extensions/RarityExtension.js';
8
- import SetExtension from './extensions/SetExtension.js';
9
- import * as keywords from './keywords/index.js';
10
-
11
- export default function register(sifter, Card, data = {}) {
12
- if (!Card)
13
- throw new Error('A valid Card class must be provided.');
14
- if (!(Card.prototype instanceof MagicCard))
15
- throw new Error('Card class must inherit from MagicCard');
16
-
17
- sifter.addKeywords(Object.values(keywords));
18
-
19
- sifter.setBaseStringParser((sifter, operator, expression) => {
20
- const keyword = new keywords.NameKeyword(sifter);
21
- keyword.operator = operator;
22
- keyword.expression = expression;
23
- keyword.remainingStr = expression.remainingStr;
24
- return keyword;
25
- });
26
-
27
- sifter.setInputAdapter(Card);
28
-
29
- sifter.extend(ColorExtension, data);
30
- sifter.extend(FormatExtension, data);
31
- sifter.extend(GameExtension, data);
32
- sifter.extend(KeywordExtension, data);
33
- sifter.extend(LanguageExtension, data);
34
- sifter.extend(SetExtension, data);
35
- sifter.extend(RarityExtension, data);
36
- };
1
+ import ColorExtension from './extensions/ColorExtension.js';
2
+ import FormatExtension from './extensions/FormatExtension.js';
3
+ import GameExtension from './extensions/GameExtension.js';
4
+ import KeywordExtension from './extensions/KeywordExtension.js';
5
+ import LanguageExtension from './extensions/LanguageExtension.js';
6
+ import RarityExtension from './extensions/RarityExtension.js';
7
+ import SetExtension from './extensions/SetExtension.js';
8
+ import * as keywords from './keywords/index.js';
9
+
10
+ export default function register(sifter, Card, data = {}) {
11
+ sifter.addKeywords(Object.values(keywords));
12
+
13
+ sifter.setBaseStringParser((sifter, operator, expression) => {
14
+ const keyword = new keywords.NameKeyword(sifter);
15
+ keyword.operator = operator;
16
+ keyword.expression = expression;
17
+ keyword.remainingStr = expression.remainingStr;
18
+ return keyword;
19
+ });
20
+
21
+ if (Card) sifter.setInputAdapter(Card);
22
+
23
+ sifter.extend(ColorExtension, data);
24
+ sifter.extend(FormatExtension, data);
25
+ sifter.extend(GameExtension, data);
26
+ sifter.extend(KeywordExtension, data);
27
+ sifter.extend(LanguageExtension, data);
28
+ sifter.extend(SetExtension, data);
29
+ sifter.extend(RarityExtension, data);
30
+ };
@@ -1,16 +1,16 @@
1
- import { Keyword } from 'sigil-sifter/keywords';
2
- import KeywordAbilityExpression from '../expressions/KeywordAbilityExpression.js';
3
-
4
- export default class AbilityKeyword extends Keyword {
5
- static get keys() {
6
- return ['keyword', 'kw'];
7
- }
8
-
9
- static get supportedExpressions() {
10
- return [KeywordAbilityExpression];
11
- }
12
-
13
- test(card) {
14
- return this.operator.testValue(card.keywords, this.expression);
15
- }
16
- }
1
+ import { Keyword } from 'sigil-sifter/keywords';
2
+ import KeywordAbilityExpression from '../expressions/KeywordAbilityExpression.js';
3
+
4
+ export default class AbilityKeyword extends Keyword {
5
+ static get keys() {
6
+ return ['keyword', 'kw'];
7
+ }
8
+
9
+ static get supportedExpressions() {
10
+ return [KeywordAbilityExpression];
11
+ }
12
+
13
+ test(card) {
14
+ return this.operator.testValue(card.keywords, this.expression);
15
+ }
16
+ }
@@ -1,11 +1,11 @@
1
- import { StringKeyword } from 'sigil-sifter/keywords';
2
-
3
- export default class ArtistKeyword extends StringKeyword {
4
- static get keys() {
5
- return ['artist', 'a'];
6
- }
7
-
8
- test(card) {
9
- return card.artists.some(a => super.test(a));
10
- }
11
- }
1
+ import { StringKeyword } from 'sigil-sifter/keywords';
2
+
3
+ export default class ArtistKeyword extends StringKeyword {
4
+ static get keys() {
5
+ return ['artist', 'a'];
6
+ }
7
+
8
+ test(card) {
9
+ return card.artists.some(a => super.test(a));
10
+ }
11
+ }
@@ -1,21 +1,21 @@
1
- import { Keyword } from 'sigil-sifter/keywords';
2
- import FormatExpression from '../expressions/FormatExpression.js';
3
- import { EqualsOperator, IncludesOperator } from 'sigil-sifter/operators';
4
-
5
- export default class BannedKeyword extends Keyword {
6
- static get keys() {
7
- return ['banned'];
8
- }
9
-
10
- static get supportedOperators() {
11
- return [IncludesOperator, EqualsOperator];
12
- }
13
-
14
- static get supportedExpressions() {
15
- return [FormatExpression];
16
- }
17
-
18
- test(card) {
19
- return card.banned.some(formatName => super.test(formatName));
20
- }
21
- }
1
+ import { Keyword } from 'sigil-sifter/keywords';
2
+ import FormatExpression from '../expressions/FormatExpression.js';
3
+ import { EqualsOperator, IncludesOperator } from 'sigil-sifter/operators';
4
+
5
+ export default class BannedKeyword extends Keyword {
6
+ static get keys() {
7
+ return ['banned'];
8
+ }
9
+
10
+ static get supportedOperators() {
11
+ return [IncludesOperator, EqualsOperator];
12
+ }
13
+
14
+ static get supportedExpressions() {
15
+ return [FormatExpression];
16
+ }
17
+
18
+ test(card) {
19
+ return card.banned.some(formatName => super.test(formatName));
20
+ }
21
+ }
@@ -1,21 +1,21 @@
1
- import { Keyword } from 'sigil-sifter/keywords';
2
- import ExactStringExpression from '../expressions/ExactStringExpression.js';
3
- import { EqualsOperator, IncludesOperator } from 'sigil-sifter/operators';
4
-
5
- export default class BorderKeyword extends Keyword {
6
- static get keys() {
7
- return ['border'];
8
- }
9
-
10
- static get supportedOperators() {
11
- return [IncludesOperator, EqualsOperator];
12
- }
13
-
14
- static get supportedExpressions() {
15
- return [ExactStringExpression];
16
- }
17
-
18
- test(card) {
19
- return super.test(card.border);
20
- }
21
- }
1
+ import { Keyword } from 'sigil-sifter/keywords';
2
+ import ExactStringExpression from '../expressions/ExactStringExpression.js';
3
+ import { EqualsOperator, IncludesOperator } from 'sigil-sifter/operators';
4
+
5
+ export default class BorderKeyword extends Keyword {
6
+ static get keys() {
7
+ return ['border'];
8
+ }
9
+
10
+ static get supportedOperators() {
11
+ return [IncludesOperator, EqualsOperator];
12
+ }
13
+
14
+ static get supportedExpressions() {
15
+ return [ExactStringExpression];
16
+ }
17
+
18
+ test(card) {
19
+ return super.test(card.border);
20
+ }
21
+ }
@@ -1,11 +1,11 @@
1
- import { StringKeyword } from 'sigil-sifter/keywords';
2
-
3
- export default class CardTypeKeyword extends StringKeyword {
4
- static get keys() {
5
- return ['type', 't'];
6
- }
7
-
8
- test(card) {
9
- return card.typeLines.some(t => super.test(t));
10
- }
11
- }
1
+ import { StringKeyword } from 'sigil-sifter/keywords';
2
+
3
+ export default class CardTypeKeyword extends StringKeyword {
4
+ static get keys() {
5
+ return ['type', 't'];
6
+ }
7
+
8
+ test(card) {
9
+ return card.typeLines.some(t => super.test(t));
10
+ }
11
+ }
@@ -1,16 +1,16 @@
1
- import { NumericExpression } from 'sigil-sifter/expressions';
2
- import { Keyword } from 'sigil-sifter/keywords';
3
-
4
- export default class CollectorNumberKeyword extends Keyword {
5
- static get keys() {
6
- return ['number', 'cn'];
7
- }
8
-
9
- static get supportedExpressions() {
10
- return [NumericExpression];
11
- }
12
-
13
- test(card) {
14
- return super.test(card.collectorNumber);
15
- }
16
- }
1
+ import { NumericExpression } from 'sigil-sifter/expressions';
2
+ import { Keyword } from 'sigil-sifter/keywords';
3
+
4
+ export default class CollectorNumberKeyword extends Keyword {
5
+ static get keys() {
6
+ return ['number', 'cn'];
7
+ }
8
+
9
+ static get supportedExpressions() {
10
+ return [NumericExpression];
11
+ }
12
+
13
+ test(card) {
14
+ return super.test(card.collectorNumber);
15
+ }
16
+ }
@@ -1,11 +1,11 @@
1
- import ColorKeyword from './ColorKeyword.js';
2
-
3
- export default class ColorIdentityKeyword extends ColorKeyword {
4
- static get keys() {
5
- return ['identity', 'id'];
6
- }
7
-
8
- test(card) {
9
- return this.operator.testValue(card.colorIdentity, this.expression);
10
- }
11
- }
1
+ import ColorKeyword from './ColorKeyword.js';
2
+
3
+ export default class ColorIdentityKeyword extends ColorKeyword {
4
+ static get keys() {
5
+ return ['identity', 'id'];
6
+ }
7
+
8
+ test(card) {
9
+ return this.operator.testValue(card.colorIdentity, this.expression);
10
+ }
11
+ }
@@ -1,17 +1,17 @@
1
- import { Keyword } from 'sigil-sifter/keywords';
2
- import ColorExpression from '../expressions/ColorExpression.js';
3
- import ArrayLengthExpression from '../expressions/ArrayLengthExpression.js';
4
-
5
- export default class ColorKeyword extends Keyword {
6
- static get keys() {
7
- return ['colors', 'color', 'c'];
8
- }
9
-
10
- static get supportedExpressions() {
11
- return [ColorExpression, ArrayLengthExpression];
12
- }
13
-
14
- test(card) {
15
- return this.operator.testValue(card.colors, this.expression);
16
- }
17
- }
1
+ import { Keyword } from 'sigil-sifter/keywords';
2
+ import ColorExpression from '../expressions/ColorExpression.js';
3
+ import ArrayLengthExpression from '../expressions/ArrayLengthExpression.js';
4
+
5
+ export default class ColorKeyword extends Keyword {
6
+ static get keys() {
7
+ return ['colors', 'color', 'c'];
8
+ }
9
+
10
+ static get supportedExpressions() {
11
+ return [ColorExpression, ArrayLengthExpression];
12
+ }
13
+
14
+ test(card) {
15
+ return this.operator.testValue(card.colors, this.expression);
16
+ }
17
+ }
@@ -1,21 +1,21 @@
1
- import { Keyword } from 'sigil-sifter/keywords';
2
- import { ManaCost } from 'mana-scribe';
3
- import DevotionExpression from '../expressions/DevotionExpression.js';
4
-
5
- export default class DevotionKeyword extends Keyword {
6
- static get keys() {
7
- return ['devotion'];
8
- }
9
-
10
- static get supportedExpressions() {
11
- return [DevotionExpression];
12
- }
13
-
14
- test(card) {
15
- if (!card.isPermanent) return false;
16
- const manaCosts = card.cache('manaCosts', () => {
17
- return card.manaCosts.map(costStr => ManaCost.parse(costStr));
18
- });
19
- return manaCosts.some(manaCost => super.test(manaCost));
20
- }
21
- }
1
+ import { Keyword } from 'sigil-sifter/keywords';
2
+ import { ManaCost } from 'mana-scribe';
3
+ import DevotionExpression from '../expressions/DevotionExpression.js';
4
+
5
+ export default class DevotionKeyword extends Keyword {
6
+ static get keys() {
7
+ return ['devotion'];
8
+ }
9
+
10
+ static get supportedExpressions() {
11
+ return [DevotionExpression];
12
+ }
13
+
14
+ test(card) {
15
+ if (!card.isPermanent) return false;
16
+ const manaCosts = card.cache('manaCosts', () => {
17
+ return card.manaCosts.map(costStr => ManaCost.parse(costStr));
18
+ });
19
+ return manaCosts.some(manaCost => super.test(manaCost));
20
+ }
21
+ }
@@ -1,11 +1,11 @@
1
- import { StringKeyword } from 'sigil-sifter/keywords';
2
-
3
- export default class FlavorTextKeyword extends StringKeyword {
4
- static get keys() {
5
- return ['flavor', 'ft'];
6
- }
7
-
8
- test(card) {
9
- return card.flavorTexts.some(flavorText => super.test(flavorText));
10
- }
11
- }
1
+ import { StringKeyword } from 'sigil-sifter/keywords';
2
+
3
+ export default class FlavorTextKeyword extends StringKeyword {
4
+ static get keys() {
5
+ return ['flavor', 'ft'];
6
+ }
7
+
8
+ test(card) {
9
+ return card.flavorTexts.some(flavorText => super.test(flavorText));
10
+ }
11
+ }
@@ -1,21 +1,21 @@
1
- import { Keyword } from 'sigil-sifter/keywords';
2
- import FormatExpression from '../expressions/FormatExpression.js';
3
- import { EqualsOperator, IncludesOperator } from 'sigil-sifter/operators';
4
-
5
- export default class FormatKeyword extends Keyword {
6
- static get keys() {
7
- return ['format', 'f'];
8
- }
9
-
10
- static get supportedOperators() {
11
- return [IncludesOperator, EqualsOperator];
12
- }
13
-
14
- static get supportedExpressions() {
15
- return [FormatExpression];
16
- }
17
-
18
- test(card) {
19
- return card.formats.some(formatName => super.test(formatName));
20
- }
21
- }
1
+ import { Keyword } from 'sigil-sifter/keywords';
2
+ import FormatExpression from '../expressions/FormatExpression.js';
3
+ import { EqualsOperator, IncludesOperator } from 'sigil-sifter/operators';
4
+
5
+ export default class FormatKeyword extends Keyword {
6
+ static get keys() {
7
+ return ['format', 'f'];
8
+ }
9
+
10
+ static get supportedOperators() {
11
+ return [IncludesOperator, EqualsOperator];
12
+ }
13
+
14
+ static get supportedExpressions() {
15
+ return [FormatExpression];
16
+ }
17
+
18
+ test(card) {
19
+ return card.formats.some(formatName => super.test(formatName));
20
+ }
21
+ }