@sigil-sifter/magic 1.0.1 → 1.1.0

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 (98) hide show
  1. package/LICENSE +7 -7
  2. package/README.md +95 -95
  3. package/package.json +1 -1
  4. package/src/core/MagicCard.js +254 -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 -30
  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/TagKeyword.js +11 -0
  96. package/src/keywords/ToughnessKeyword.js +29 -29
  97. package/src/keywords/WatermarkKeyword.js +16 -16
  98. package/src/keywords/index.js +67 -65
@@ -1,250 +1,254 @@
1
- import { NotImplementedError } from 'sigil-sifter/core';
2
-
3
- const permanentTypes = [
4
- 'land', 'creature', 'artifact', 'enchantment',
5
- 'planeswalker', 'battle', 'summon', 'eaturecray'
6
- ];
7
-
8
- const spellTypes = [
9
- 'instant', 'sorcery', 'creature', 'artifact', 'enchantment',
10
- 'planeswalker', 'battle', 'summon', 'eaturecray'
11
- ];
12
-
13
- const historicTypes = ['artifact', 'saga', 'legendary'];
14
- const partyTypes = ['wizard', 'rogue', 'warrior', 'cleric', 'rogue'];
15
-
16
- export default class MagicCard {
17
- constructor(sifter, card) {
18
- this.sifter = sifter;
19
- this.card = card;
20
- this._cache = {};
21
- }
22
-
23
- cache(key, initFn) {
24
- if (!this._cache.hasOwnProperty(key))
25
- this._cache[key] = initFn();
26
- return this._cache[key];
27
- }
28
-
29
- get artists() {
30
- throw new NotImplementedError();
31
- }
32
-
33
- get banned() {
34
- throw new NotImplementedError();
35
- }
36
-
37
- get border() {
38
- throw new NotImplementedError();
39
- }
40
-
41
- get collectorNumber() {
42
- throw new NotImplementedError();
43
- }
44
-
45
- get colors() {
46
- throw new NotImplementedError();
47
- }
48
-
49
- get colorIdentity() {
50
- throw new NotImplementedError();
51
- }
52
-
53
- get flavorTexts() {
54
- throw new NotImplementedError();
55
- }
56
-
57
- get formats() {
58
- throw new NotImplementedError();
59
- }
60
-
61
- get frame() {
62
- throw new NotImplementedError();
63
- }
64
-
65
- get frameEffects() {
66
- throw new NotImplementedError();
67
- }
68
-
69
- get game() {
70
- throw new NotImplementedError();
71
- }
72
-
73
- get keywords() {
74
- throw new NotImplementedError();
75
- }
76
-
77
- get loyalty() {
78
- throw new NotImplementedError();
79
- }
80
-
81
- get manaValues() {
82
- throw new NotImplementedError();
83
- }
84
-
85
- get produces() {
86
- throw new NotImplementedError();
87
- }
88
-
89
- get pts() {
90
- throw new NotImplementedError();
91
- }
92
-
93
- get rarity() {
94
- throw new NotImplementedError();
95
- }
96
-
97
- get restricted() {
98
- throw new NotImplementedError();
99
- }
100
-
101
- get rulesTexts() {
102
- throw new NotImplementedError();
103
- }
104
-
105
- get set() {
106
- throw new NotImplementedError();
107
- }
108
-
109
- get setType() {
110
- throw new NotImplementedError();
111
- }
112
-
113
- get stamp() {
114
- throw new NotImplementedError();
115
- }
116
-
117
- get typeLines() {
118
- throw new NotImplementedError();
119
- }
120
-
121
- get typeParts() {
122
- return this.typeLines.flatMap(typeLine => {
123
- return typeLine.toLowerCase().split(/\s+/);
124
- });
125
- }
126
-
127
- get watermarks() {
128
- throw new NotImplementedError();
129
- }
130
-
131
- get hasIndicator() {
132
- throw new NotImplementedError();
133
- }
134
-
135
- get hasWatermark() {
136
- return this.watermarks.length > 0;
137
- }
138
-
139
- get isBooster() {
140
- throw new NotImplementedError();
141
- }
142
-
143
- get isDFC() {
144
- throw new NotImplementedError();
145
- }
146
-
147
- get isEtched() {
148
- throw new NotImplementedError();
149
- }
150
-
151
- get isFlip() {
152
- throw new NotImplementedError();
153
- }
154
-
155
- get isFoil() {
156
- throw new NotImplementedError();
157
- }
158
-
159
- get isFrenchVanilla() {
160
- throw new NotImplementedError();
161
- }
162
-
163
- get isFullArt() {
164
- throw new NotImplementedError();
165
- }
166
-
167
- get isGlossy() {
168
- throw new NotImplementedError();
169
- }
170
-
171
- get isHistoric() {
172
- return this.typeParts.some(part => historicTypes.includes(part));
173
- }
174
-
175
- get isHybrid() {
176
- throw new NotImplementedError();
177
- }
178
-
179
- get isLeveler() {
180
- return this.keywords.includes('level up');
181
- }
182
-
183
- get isMDFC() {
184
- throw new NotImplementedError();
185
- }
186
-
187
- get isMeld() {
188
- throw new NotImplementedError();
189
- }
190
-
191
- get isModal() {
192
- throw new NotImplementedError();
193
- }
194
-
195
- get isNonFoil() {
196
- throw new NotImplementedError();
197
- }
198
-
199
- get isParty() {
200
- return this.typeParts.some(part => partyTypes.includes(part));
201
- }
202
-
203
- get isPermanent() {
204
- return this.typeParts.some(part => permanentTypes.includes(part));
205
- }
206
-
207
- get isPhyrexian() {
208
- throw new NotImplementedError();
209
- }
210
-
211
- get isPromo() {
212
- throw new NotImplementedError();
213
- }
214
-
215
- get isReprint() {
216
- throw new NotImplementedError();
217
- }
218
-
219
- get isReserved() {
220
- throw new NotImplementedError();
221
- }
222
-
223
- get isSpell() {
224
- return this.typeParts.some(part => spellTypes.includes(part));
225
- }
226
-
227
- get isSplit() {
228
- throw new NotImplementedError();
229
- }
230
-
231
- get isSpotlight() {
232
- throw new NotImplementedError();
233
- }
234
-
235
- get isTextless() {
236
- throw new NotImplementedError();
237
- }
238
-
239
- get isTransform() {
240
- throw new NotImplementedError();
241
- }
242
-
243
- get isUniversesBeyond() {
244
- throw new NotImplementedError();
245
- }
246
-
247
- get isVanilla() {
248
- return this.rulesTexts.some(rt => rt === '');
249
- }
250
- }
1
+ import { NotImplementedError } from 'sigil-sifter/core';
2
+
3
+ const permanentTypes = [
4
+ 'land', 'creature', 'artifact', 'enchantment',
5
+ 'planeswalker', 'battle', 'summon', 'eaturecray'
6
+ ];
7
+
8
+ const spellTypes = [
9
+ 'instant', 'sorcery', 'creature', 'artifact', 'enchantment',
10
+ 'planeswalker', 'battle', 'summon', 'eaturecray'
11
+ ];
12
+
13
+ const historicTypes = ['artifact', 'saga', 'legendary'];
14
+ const partyTypes = ['wizard', 'rogue', 'warrior', 'cleric', 'rogue'];
15
+
16
+ export default class MagicCard {
17
+ constructor(sifter, card) {
18
+ this.sifter = sifter;
19
+ this.card = card;
20
+ this._cache = {};
21
+ }
22
+
23
+ cache(key, initFn) {
24
+ if (!this._cache.hasOwnProperty(key))
25
+ this._cache[key] = initFn();
26
+ return this._cache[key];
27
+ }
28
+
29
+ get artists() {
30
+ throw new NotImplementedError();
31
+ }
32
+
33
+ get banned() {
34
+ throw new NotImplementedError();
35
+ }
36
+
37
+ get border() {
38
+ throw new NotImplementedError();
39
+ }
40
+
41
+ get collectorNumber() {
42
+ throw new NotImplementedError();
43
+ }
44
+
45
+ get colors() {
46
+ throw new NotImplementedError();
47
+ }
48
+
49
+ get colorIdentity() {
50
+ throw new NotImplementedError();
51
+ }
52
+
53
+ get flavorTexts() {
54
+ throw new NotImplementedError();
55
+ }
56
+
57
+ get formats() {
58
+ throw new NotImplementedError();
59
+ }
60
+
61
+ get frame() {
62
+ throw new NotImplementedError();
63
+ }
64
+
65
+ get frameEffects() {
66
+ throw new NotImplementedError();
67
+ }
68
+
69
+ get game() {
70
+ throw new NotImplementedError();
71
+ }
72
+
73
+ get keywords() {
74
+ throw new NotImplementedError();
75
+ }
76
+
77
+ get loyalty() {
78
+ throw new NotImplementedError();
79
+ }
80
+
81
+ get manaValues() {
82
+ throw new NotImplementedError();
83
+ }
84
+
85
+ get produces() {
86
+ throw new NotImplementedError();
87
+ }
88
+
89
+ get pts() {
90
+ throw new NotImplementedError();
91
+ }
92
+
93
+ get rarity() {
94
+ throw new NotImplementedError();
95
+ }
96
+
97
+ get restricted() {
98
+ throw new NotImplementedError();
99
+ }
100
+
101
+ get rulesTexts() {
102
+ throw new NotImplementedError();
103
+ }
104
+
105
+ get set() {
106
+ throw new NotImplementedError();
107
+ }
108
+
109
+ get setType() {
110
+ throw new NotImplementedError();
111
+ }
112
+
113
+ get stamp() {
114
+ throw new NotImplementedError();
115
+ }
116
+
117
+ get tags() {
118
+ throw new NotImplementedError();
119
+ }
120
+
121
+ get typeLines() {
122
+ throw new NotImplementedError();
123
+ }
124
+
125
+ get typeParts() {
126
+ return this.typeLines.flatMap(typeLine => {
127
+ return typeLine.toLowerCase().split(/\s+/);
128
+ });
129
+ }
130
+
131
+ get watermarks() {
132
+ throw new NotImplementedError();
133
+ }
134
+
135
+ get hasIndicator() {
136
+ throw new NotImplementedError();
137
+ }
138
+
139
+ get hasWatermark() {
140
+ return this.watermarks.length > 0;
141
+ }
142
+
143
+ get isBooster() {
144
+ throw new NotImplementedError();
145
+ }
146
+
147
+ get isDFC() {
148
+ throw new NotImplementedError();
149
+ }
150
+
151
+ get isEtched() {
152
+ throw new NotImplementedError();
153
+ }
154
+
155
+ get isFlip() {
156
+ throw new NotImplementedError();
157
+ }
158
+
159
+ get isFoil() {
160
+ throw new NotImplementedError();
161
+ }
162
+
163
+ get isFrenchVanilla() {
164
+ throw new NotImplementedError();
165
+ }
166
+
167
+ get isFullArt() {
168
+ throw new NotImplementedError();
169
+ }
170
+
171
+ get isGlossy() {
172
+ throw new NotImplementedError();
173
+ }
174
+
175
+ get isHistoric() {
176
+ return this.typeParts.some(part => historicTypes.includes(part));
177
+ }
178
+
179
+ get isHybrid() {
180
+ throw new NotImplementedError();
181
+ }
182
+
183
+ get isLeveler() {
184
+ return this.keywords.includes('level up');
185
+ }
186
+
187
+ get isMDFC() {
188
+ throw new NotImplementedError();
189
+ }
190
+
191
+ get isMeld() {
192
+ throw new NotImplementedError();
193
+ }
194
+
195
+ get isModal() {
196
+ throw new NotImplementedError();
197
+ }
198
+
199
+ get isNonFoil() {
200
+ throw new NotImplementedError();
201
+ }
202
+
203
+ get isParty() {
204
+ return this.typeParts.some(part => partyTypes.includes(part));
205
+ }
206
+
207
+ get isPermanent() {
208
+ return this.typeParts.some(part => permanentTypes.includes(part));
209
+ }
210
+
211
+ get isPhyrexian() {
212
+ throw new NotImplementedError();
213
+ }
214
+
215
+ get isPromo() {
216
+ throw new NotImplementedError();
217
+ }
218
+
219
+ get isReprint() {
220
+ throw new NotImplementedError();
221
+ }
222
+
223
+ get isReserved() {
224
+ throw new NotImplementedError();
225
+ }
226
+
227
+ get isSpell() {
228
+ return this.typeParts.some(part => spellTypes.includes(part));
229
+ }
230
+
231
+ get isSplit() {
232
+ throw new NotImplementedError();
233
+ }
234
+
235
+ get isSpotlight() {
236
+ throw new NotImplementedError();
237
+ }
238
+
239
+ get isTextless() {
240
+ throw new NotImplementedError();
241
+ }
242
+
243
+ get isTransform() {
244
+ throw new NotImplementedError();
245
+ }
246
+
247
+ get isUniversesBeyond() {
248
+ throw new NotImplementedError();
249
+ }
250
+
251
+ get isVanilla() {
252
+ return this.rulesTexts.some(rt => rt === '');
253
+ }
254
+ }
@@ -1,6 +1,6 @@
1
- import PowTouExpression from '../expressions/PowTouExpression.js';
2
-
3
- export function comparingPtAgainst(expression, mode) {
4
- return expression.constructor === PowTouExpression
5
- && expression.mode === mode;
6
- }
1
+ import PowTouExpression from '../expressions/PowTouExpression.js';
2
+
3
+ export function comparingPtAgainst(expression, mode) {
4
+ return expression.constructor === PowTouExpression
5
+ && expression.mode === mode;
6
+ }
package/src/core/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import MagicCard from './MagicCard.js';
2
-
3
- export { MagicCard };
1
+ import MagicCard from './MagicCard.js';
2
+
3
+ export { MagicCard };
@@ -1,66 +1,66 @@
1
- export default [
2
- "Eerie",
3
- "Battalion",
4
- "Bloodrush",
5
- "Channel",
6
- "Chroma",
7
- "Cohort",
8
- "Constellation",
9
- "Converge",
10
- "Delirium",
11
- "Domain",
12
- "Fateful hour",
13
- "Ferocious",
14
- "Formidable",
15
- "Grandeur",
16
- "Hellbent",
17
- "Heroic",
18
- "Imprint",
19
- "Inspired",
20
- "Join forces",
21
- "Kinship",
22
- "Landfall",
23
- "Lieutenant",
24
- "Metalcraft",
25
- "Morbid",
26
- "Parley",
27
- "Radiance",
28
- "Raid",
29
- "Rally",
30
- "Spell mastery",
31
- "Strive",
32
- "Sweep",
33
- "Tempting offer",
34
- "Threshold",
35
- "Will of the council",
36
- "Adamant",
37
- "Addendum",
38
- "Council's dilemma",
39
- "Eminence",
40
- "Enrage",
41
- "Hero's Reward",
42
- "Kinfall",
43
- "Landship",
44
- "Legacy",
45
- "Revolt",
46
- "Underdog",
47
- "Undergrowth",
48
- "Void",
49
- "Descend",
50
- "Fathomless descent",
51
- "Magecraft",
52
- "Teamwork",
53
- "Pack tactics",
54
- "Coven",
55
- "Alliance",
56
- "Corrupted",
57
- "Secret council",
58
- "Celebration",
59
- "Paradox",
60
- "Will of the Planeswalkers",
61
- "Survival",
62
- "Flurry",
63
- "Valiant",
64
- "Start your engines!",
65
- "Renew"
66
- ];
1
+ export default [
2
+ "Eerie",
3
+ "Battalion",
4
+ "Bloodrush",
5
+ "Channel",
6
+ "Chroma",
7
+ "Cohort",
8
+ "Constellation",
9
+ "Converge",
10
+ "Delirium",
11
+ "Domain",
12
+ "Fateful hour",
13
+ "Ferocious",
14
+ "Formidable",
15
+ "Grandeur",
16
+ "Hellbent",
17
+ "Heroic",
18
+ "Imprint",
19
+ "Inspired",
20
+ "Join forces",
21
+ "Kinship",
22
+ "Landfall",
23
+ "Lieutenant",
24
+ "Metalcraft",
25
+ "Morbid",
26
+ "Parley",
27
+ "Radiance",
28
+ "Raid",
29
+ "Rally",
30
+ "Spell mastery",
31
+ "Strive",
32
+ "Sweep",
33
+ "Tempting offer",
34
+ "Threshold",
35
+ "Will of the council",
36
+ "Adamant",
37
+ "Addendum",
38
+ "Council's dilemma",
39
+ "Eminence",
40
+ "Enrage",
41
+ "Hero's Reward",
42
+ "Kinfall",
43
+ "Landship",
44
+ "Legacy",
45
+ "Revolt",
46
+ "Underdog",
47
+ "Undergrowth",
48
+ "Void",
49
+ "Descend",
50
+ "Fathomless descent",
51
+ "Magecraft",
52
+ "Teamwork",
53
+ "Pack tactics",
54
+ "Coven",
55
+ "Alliance",
56
+ "Corrupted",
57
+ "Secret council",
58
+ "Celebration",
59
+ "Paradox",
60
+ "Will of the Planeswalkers",
61
+ "Survival",
62
+ "Flurry",
63
+ "Valiant",
64
+ "Start your engines!",
65
+ "Renew"
66
+ ];
@@ -1,15 +1,15 @@
1
- const color = (id, name) => ({
2
- id,
3
- name,
4
- expr: new RegExp('^' + name + '$', 'i'),
5
- colorChars: [id]
6
- });
7
-
8
- export default [
9
- color('W', 'White'),
10
- color('U', 'Blue'),
11
- color('B', 'Black'),
12
- color('R', 'Red'),
13
- color('G', 'Green'),
14
- color('C', 'Colorless'),
15
- ];
1
+ const color = (id, name) => ({
2
+ id,
3
+ name,
4
+ expr: new RegExp('^' + name + '$', 'i'),
5
+ colorChars: [id]
6
+ });
7
+
8
+ export default [
9
+ color('W', 'White'),
10
+ color('U', 'Blue'),
11
+ color('B', 'Black'),
12
+ color('R', 'Red'),
13
+ color('G', 'Green'),
14
+ color('C', 'Colorless'),
15
+ ];