scryfall-api 4.0.0-beta.2 → 4.0.1
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.
- package/README.md +8 -3
- package/dist/scryfall-api.cjs +126 -128
- package/dist/scryfall-api.d.cts +424 -0
- package/dist/scryfall-api.d.ts +24 -24
- package/dist/scryfall-api.js +126 -128
- package/dist/scryfall-api.min.cjs +1 -1
- package/dist/scryfall-api.min.js +1 -1
- package/package.json +22 -16
package/dist/scryfall-api.js
CHANGED
|
@@ -37,68 +37,12 @@ async function debounce() {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
function createDebounceFetcher(fetcher2 = fetch) {
|
|
40
|
-
return async function debounceFetcher(...
|
|
40
|
+
return async function debounceFetcher(...arguments_) {
|
|
41
41
|
await debounce();
|
|
42
|
-
return fetcher2(...
|
|
42
|
+
return fetcher2(...arguments_);
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
// src/fetcher/page.result.ts
|
|
47
|
-
var MagicPageResult = class {
|
|
48
|
-
constructor(apiPath, query) {
|
|
49
|
-
this.apiPath = apiPath;
|
|
50
|
-
this.query = query;
|
|
51
|
-
this.#hasMore = true;
|
|
52
|
-
this.#count = 0;
|
|
53
|
-
}
|
|
54
|
-
#count;
|
|
55
|
-
#hasMore;
|
|
56
|
-
get count() {
|
|
57
|
-
return this.#count;
|
|
58
|
-
}
|
|
59
|
-
get hasMore() {
|
|
60
|
-
return this.#hasMore;
|
|
61
|
-
}
|
|
62
|
-
async all() {
|
|
63
|
-
const r = [];
|
|
64
|
-
while (this.#hasMore) {
|
|
65
|
-
const result = await this.next();
|
|
66
|
-
r.push(...result);
|
|
67
|
-
}
|
|
68
|
-
return r;
|
|
69
|
-
}
|
|
70
|
-
async get(limit) {
|
|
71
|
-
const r = [];
|
|
72
|
-
while (this.#hasMore) {
|
|
73
|
-
const result = await this.next();
|
|
74
|
-
r.push(...result);
|
|
75
|
-
if (r.length === limit) {
|
|
76
|
-
return r;
|
|
77
|
-
}
|
|
78
|
-
if (r.length > limit) {
|
|
79
|
-
return r.slice(0, limit);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return r;
|
|
83
|
-
}
|
|
84
|
-
async next() {
|
|
85
|
-
const results = await fetcher(this.apiPath, this.query);
|
|
86
|
-
this.#hasMore = results?.has_more ?? false;
|
|
87
|
-
this.#count = Number.parseInt(`${results?.total_cards ?? 0}`, 10);
|
|
88
|
-
if (this.#hasMore) {
|
|
89
|
-
this.setNextPage();
|
|
90
|
-
}
|
|
91
|
-
return results?.data ?? [];
|
|
92
|
-
}
|
|
93
|
-
async page(page) {
|
|
94
|
-
this.query.page = page;
|
|
95
|
-
return this.next();
|
|
96
|
-
}
|
|
97
|
-
setNextPage() {
|
|
98
|
-
this.query.page += 1;
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
46
|
// src/fetcher/retry.fetcher.ts
|
|
103
47
|
var defaultCanRetry = async (response) => {
|
|
104
48
|
const object = await response.json();
|
|
@@ -109,11 +53,11 @@ var defaultCanRetry = async (response) => {
|
|
|
109
53
|
const code = "code" in object && typeof object.code === "string" ? object.code : void 0;
|
|
110
54
|
return code !== "not_found" && code !== "bad_request";
|
|
111
55
|
};
|
|
112
|
-
function createRetryFetcher({
|
|
56
|
+
function createRetryFetcher({ canRetry = defaultCanRetry, maxAttempts = 3 } = {}, fetcher2 = fetch) {
|
|
113
57
|
let retries = 0;
|
|
114
|
-
return async function retryFetcher(...
|
|
58
|
+
return async function retryFetcher(...arguments_) {
|
|
115
59
|
retries++;
|
|
116
|
-
const response = await fetcher2(...
|
|
60
|
+
const response = await fetcher2(...arguments_);
|
|
117
61
|
if (response.ok) {
|
|
118
62
|
return response;
|
|
119
63
|
}
|
|
@@ -127,44 +71,42 @@ function createRetryFetcher({ maxAttempts = 3, canRetry = defaultCanRetry } = {}
|
|
|
127
71
|
if (code && details && status) {
|
|
128
72
|
throw new ScryfallError(code, details, status, type, warnings);
|
|
129
73
|
}
|
|
130
|
-
throw new UnknownScryfallError(`Request failed with status ${response.status}`);
|
|
74
|
+
throw new UnknownScryfallError(`Request failed with status ${response.status.toFixed(0)}`);
|
|
131
75
|
}
|
|
132
76
|
if (canRetry(response)) {
|
|
133
|
-
return retryFetcher(...
|
|
77
|
+
return retryFetcher(...arguments_);
|
|
134
78
|
}
|
|
135
79
|
if (code && details && status) {
|
|
136
80
|
throw new ScryfallError(code, details, status, type, warnings);
|
|
137
81
|
}
|
|
138
|
-
throw new UnknownScryfallError(`Request failed with status ${response.status}`);
|
|
82
|
+
throw new UnknownScryfallError(`Request failed with status ${response.status.toFixed(0)}`);
|
|
139
83
|
};
|
|
140
84
|
}
|
|
141
85
|
|
|
142
|
-
// src/fetcher/
|
|
86
|
+
// src/fetcher/fetcher.ts
|
|
143
87
|
var simpleFetcher = createDebounceFetcher(createRetryFetcher());
|
|
144
88
|
var endpoint = "https://api.scryfall.com";
|
|
145
89
|
var DATE_REGEXP = /^\d{4}-\d{2}-\d{2}?$/;
|
|
146
90
|
var dateParser = (_key, value) => {
|
|
147
|
-
if (typeof value === "string") {
|
|
148
|
-
|
|
149
|
-
return new Date(value);
|
|
150
|
-
}
|
|
91
|
+
if (typeof value === "string" && DATE_REGEXP.test(value)) {
|
|
92
|
+
return new Date(value);
|
|
151
93
|
}
|
|
152
94
|
return value;
|
|
153
95
|
};
|
|
154
|
-
async function fetcher(apiPath,
|
|
96
|
+
async function fetcher(apiPath, parameters, body) {
|
|
155
97
|
let path = "";
|
|
156
98
|
if (typeof apiPath === "number" || typeof apiPath === "string") {
|
|
157
99
|
path = apiPath;
|
|
158
100
|
} else if (apiPath) {
|
|
159
101
|
path = apiPath.join("/");
|
|
160
102
|
}
|
|
161
|
-
const url = new URL(`${endpoint}/${path}`);
|
|
162
|
-
if (
|
|
163
|
-
|
|
103
|
+
const url = new URL(`${endpoint}/${String(path)}`);
|
|
104
|
+
if (parameters) {
|
|
105
|
+
for (const [key, value] of Object.entries(parameters)) {
|
|
164
106
|
if (value !== void 0) {
|
|
165
|
-
url.searchParams.append(key,
|
|
107
|
+
url.searchParams.append(key, value.toString());
|
|
166
108
|
}
|
|
167
|
-
}
|
|
109
|
+
}
|
|
168
110
|
}
|
|
169
111
|
try {
|
|
170
112
|
const init = {
|
|
@@ -179,19 +121,75 @@ async function fetcher(apiPath, params, body) {
|
|
|
179
121
|
const response = await simpleFetcher(url, init);
|
|
180
122
|
const content = await response.text();
|
|
181
123
|
return JSON.parse(content, dateParser);
|
|
182
|
-
} catch (
|
|
183
|
-
if (
|
|
184
|
-
if (
|
|
185
|
-
console.warn(
|
|
124
|
+
} catch (error) {
|
|
125
|
+
if (error instanceof ScryfallError) {
|
|
126
|
+
if (error.warnings) {
|
|
127
|
+
console.warn(error.warnings);
|
|
186
128
|
}
|
|
187
|
-
if (
|
|
129
|
+
if (error.code === "not_found" || error.code === "bad_request") {
|
|
188
130
|
return void 0;
|
|
189
131
|
}
|
|
190
132
|
}
|
|
191
|
-
throw
|
|
133
|
+
throw error;
|
|
192
134
|
}
|
|
193
135
|
}
|
|
194
136
|
|
|
137
|
+
// src/fetcher/page.result.ts
|
|
138
|
+
var MagicPageResult = class {
|
|
139
|
+
constructor(apiPath, query) {
|
|
140
|
+
this.apiPath = apiPath;
|
|
141
|
+
this.query = query;
|
|
142
|
+
this.#hasMore = true;
|
|
143
|
+
this.#count = 0;
|
|
144
|
+
}
|
|
145
|
+
#count;
|
|
146
|
+
#hasMore;
|
|
147
|
+
get count() {
|
|
148
|
+
return this.#count;
|
|
149
|
+
}
|
|
150
|
+
get hasMore() {
|
|
151
|
+
return this.#hasMore;
|
|
152
|
+
}
|
|
153
|
+
async all() {
|
|
154
|
+
const r = [];
|
|
155
|
+
while (this.#hasMore) {
|
|
156
|
+
const result = await this.next();
|
|
157
|
+
r.push(...result);
|
|
158
|
+
}
|
|
159
|
+
return r;
|
|
160
|
+
}
|
|
161
|
+
async get(limit) {
|
|
162
|
+
const r = [];
|
|
163
|
+
while (this.#hasMore) {
|
|
164
|
+
const result = await this.next();
|
|
165
|
+
r.push(...result);
|
|
166
|
+
if (r.length === limit) {
|
|
167
|
+
return r;
|
|
168
|
+
}
|
|
169
|
+
if (r.length > limit) {
|
|
170
|
+
return r.slice(0, limit);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return r;
|
|
174
|
+
}
|
|
175
|
+
async next() {
|
|
176
|
+
const results = await fetcher(this.apiPath, this.query);
|
|
177
|
+
this.#hasMore = results?.has_more ?? false;
|
|
178
|
+
this.#count = Number.parseInt(results?.total_cards?.toFixed(0) ?? "0", 10);
|
|
179
|
+
if (this.#hasMore) {
|
|
180
|
+
this.setNextPage();
|
|
181
|
+
}
|
|
182
|
+
return results?.data ?? [];
|
|
183
|
+
}
|
|
184
|
+
async page(page) {
|
|
185
|
+
this.query.page = page;
|
|
186
|
+
return this.next();
|
|
187
|
+
}
|
|
188
|
+
setNextPage() {
|
|
189
|
+
this.query.page += 1;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
195
193
|
// src/api/card/card.api.ts
|
|
196
194
|
var CardApi = class {
|
|
197
195
|
/*
|
|
@@ -257,8 +255,8 @@ var CardApi = class {
|
|
|
257
255
|
}
|
|
258
256
|
async collection(...identifiers) {
|
|
259
257
|
const cards2 = [];
|
|
260
|
-
for (let
|
|
261
|
-
const collectionSection = { identifiers: identifiers.slice(
|
|
258
|
+
for (let index = 0; index < identifiers.length; index += 75) {
|
|
259
|
+
const collectionSection = { identifiers: identifiers.slice(index, index + 75) };
|
|
262
260
|
const result = await fetcher(
|
|
263
261
|
"cards/collection",
|
|
264
262
|
void 0,
|
|
@@ -281,9 +279,6 @@ var CardApi = class {
|
|
|
281
279
|
var cards = new CardApi();
|
|
282
280
|
var card_api_default = cards;
|
|
283
281
|
|
|
284
|
-
// src/api/card/index.ts
|
|
285
|
-
var card_default = card_api_default;
|
|
286
|
-
|
|
287
282
|
// src/api/card-identifier/card-identifier.api.ts
|
|
288
283
|
var CardIdentifierApi = class {
|
|
289
284
|
static byId(id) {
|
|
@@ -308,85 +303,94 @@ var CardIdentifierApi = class {
|
|
|
308
303
|
return { oracle_id: id };
|
|
309
304
|
}
|
|
310
305
|
static bySet(set2, collectorNumber) {
|
|
311
|
-
return { collector_number:
|
|
306
|
+
return { collector_number: String(collectorNumber), set: set2 };
|
|
312
307
|
}
|
|
313
308
|
};
|
|
314
309
|
|
|
315
|
-
// src/api/card-identifier/index.ts
|
|
316
|
-
var card_identifier_default = CardIdentifierApi;
|
|
317
|
-
|
|
318
310
|
// src/api/catalog/catalog.api.ts
|
|
319
311
|
var CatalogApi = class {
|
|
320
312
|
async artifactTypes() {
|
|
321
|
-
|
|
313
|
+
const response = await fetcher("catalog/artifact-types");
|
|
314
|
+
return response?.data ?? [];
|
|
322
315
|
}
|
|
323
316
|
async artistNames() {
|
|
324
|
-
|
|
317
|
+
const response = await fetcher("catalog/artist-names");
|
|
318
|
+
return response?.data ?? [];
|
|
325
319
|
}
|
|
326
320
|
async cardNames() {
|
|
327
|
-
|
|
321
|
+
const response = await fetcher("catalog/card-names");
|
|
322
|
+
return response?.data ?? [];
|
|
328
323
|
}
|
|
329
324
|
async creatureTypes() {
|
|
330
|
-
|
|
325
|
+
const response = await fetcher("catalog/creature-types");
|
|
326
|
+
return response?.data ?? [];
|
|
331
327
|
}
|
|
332
328
|
async enchantmentTypes() {
|
|
333
|
-
|
|
329
|
+
const response = await fetcher("catalog/enchantment-types");
|
|
330
|
+
return response?.data ?? [];
|
|
334
331
|
}
|
|
335
332
|
async landTypes() {
|
|
336
|
-
|
|
333
|
+
const response = await fetcher("catalog/land-types");
|
|
334
|
+
return response?.data ?? [];
|
|
337
335
|
}
|
|
338
336
|
async loyalties() {
|
|
339
|
-
|
|
337
|
+
const response = await fetcher("catalog/loyalties");
|
|
338
|
+
return response?.data ?? [];
|
|
340
339
|
}
|
|
341
340
|
async planeswalkerTypes() {
|
|
342
|
-
|
|
341
|
+
const response = await fetcher("catalog/planeswalker-types");
|
|
342
|
+
return response?.data ?? [];
|
|
343
343
|
}
|
|
344
344
|
async powers() {
|
|
345
|
-
|
|
345
|
+
const response = await fetcher("catalog/powers");
|
|
346
|
+
return response?.data ?? [];
|
|
346
347
|
}
|
|
347
348
|
async spellTypes() {
|
|
348
|
-
|
|
349
|
+
const response = await fetcher("catalog/spell-types");
|
|
350
|
+
return response?.data ?? [];
|
|
349
351
|
}
|
|
350
352
|
async toughnesses() {
|
|
351
|
-
|
|
353
|
+
const response = await fetcher("catalog/toughnesses");
|
|
354
|
+
return response?.data ?? [];
|
|
352
355
|
}
|
|
353
356
|
async watermarks() {
|
|
354
|
-
|
|
357
|
+
const response = await fetcher("catalog/watermarks");
|
|
358
|
+
return response?.data ?? [];
|
|
355
359
|
}
|
|
356
360
|
async wordBank() {
|
|
357
|
-
|
|
361
|
+
const response = await fetcher("catalog/word-bank");
|
|
362
|
+
return response?.data ?? [];
|
|
358
363
|
}
|
|
359
364
|
};
|
|
360
365
|
var catalog = new CatalogApi();
|
|
361
366
|
var catalog_api_default = catalog;
|
|
362
367
|
|
|
363
|
-
// src/api/catalog/index.ts
|
|
364
|
-
var catalog_default = catalog_api_default;
|
|
365
|
-
|
|
366
368
|
// src/api/ruling/ruling.api.ts
|
|
367
369
|
var RulingApi = class {
|
|
368
370
|
async byArenaId(id) {
|
|
369
|
-
|
|
371
|
+
const response = await fetcher(["cards/arena", id, "rulings"]);
|
|
372
|
+
return response?.data ?? [];
|
|
370
373
|
}
|
|
371
374
|
async byId(id) {
|
|
372
|
-
|
|
375
|
+
const response = await fetcher(["cards", id, "rulings"]);
|
|
376
|
+
return response?.data ?? [];
|
|
373
377
|
}
|
|
374
378
|
async byMtgoId(id) {
|
|
375
|
-
|
|
379
|
+
const response = await fetcher(["cards/mtgo", id, "rulings"]);
|
|
380
|
+
return response?.data ?? [];
|
|
376
381
|
}
|
|
377
382
|
async byMultiverseId(id) {
|
|
378
|
-
|
|
383
|
+
const response = await fetcher(["cards/multiverse", id, "rulings"]);
|
|
384
|
+
return response?.data ?? [];
|
|
379
385
|
}
|
|
380
386
|
async bySet(setCode, collectorNumber) {
|
|
381
|
-
|
|
387
|
+
const response = await fetcher(["cards", setCode, String(collectorNumber), "rulings"]);
|
|
388
|
+
return response?.data ?? [];
|
|
382
389
|
}
|
|
383
390
|
};
|
|
384
391
|
var rulings = new RulingApi();
|
|
385
392
|
var ruling_api_default = rulings;
|
|
386
393
|
|
|
387
|
-
// src/api/ruling/index.ts
|
|
388
|
-
var ruling_default = ruling_api_default;
|
|
389
|
-
|
|
390
394
|
// src/api/set/set.api.ts
|
|
391
395
|
var SetApi = class {
|
|
392
396
|
async all() {
|
|
@@ -406,9 +410,6 @@ var SetApi = class {
|
|
|
406
410
|
var set = new SetApi();
|
|
407
411
|
var set_api_default = set;
|
|
408
412
|
|
|
409
|
-
// src/api/set/index.ts
|
|
410
|
-
var set_default = set_api_default;
|
|
411
|
-
|
|
412
413
|
// src/api/symbology/symbology.api.ts
|
|
413
414
|
var SymbologyApi = class {
|
|
414
415
|
async all() {
|
|
@@ -423,10 +424,10 @@ var SymbologyApi = class {
|
|
|
423
424
|
cost: shorthand
|
|
424
425
|
});
|
|
425
426
|
return cost ?? {
|
|
426
|
-
cost: "",
|
|
427
|
-
colors: [],
|
|
428
427
|
cmc: 0,
|
|
429
428
|
colorless: false,
|
|
429
|
+
colors: [],
|
|
430
|
+
cost: "",
|
|
430
431
|
monocolored: false,
|
|
431
432
|
multicolored: false,
|
|
432
433
|
object: "mana_cost"
|
|
@@ -435,18 +436,15 @@ var SymbologyApi = class {
|
|
|
435
436
|
};
|
|
436
437
|
var symbology = new SymbologyApi();
|
|
437
438
|
var symbology_api_default = symbology;
|
|
438
|
-
|
|
439
|
-
// src/api/symbology/index.ts
|
|
440
|
-
var symbology_default = symbology_api_default;
|
|
441
439
|
export {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
440
|
+
CardIdentifierApi as CardIdentifierBuilder,
|
|
441
|
+
card_api_default as Cards,
|
|
442
|
+
catalog_api_default as Catalogs,
|
|
445
443
|
InvalidScryfallArgumentError,
|
|
446
444
|
MagicPageResult,
|
|
447
|
-
|
|
445
|
+
ruling_api_default as Rulings,
|
|
448
446
|
ScryfallError,
|
|
449
|
-
|
|
450
|
-
|
|
447
|
+
set_api_default as Sets,
|
|
448
|
+
symbology_api_default as SymbologyApi,
|
|
451
449
|
UnknownScryfallError
|
|
452
450
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var b=Object.defineProperty;var
|
|
1
|
+
"use strict";var b=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var v=(s,e)=>{for(var t in e)b(s,t,{get:e[t],enumerable:!0})},D=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of E(e))!O.call(s,o)&&o!==t&&b(s,o,{get:()=>e[o],enumerable:!(n=q(e,o))||n.enumerable});return s};var Q=s=>D(b({},"__esModule",{value:!0}),s);var Y={};v(Y,{CardIdentifierBuilder:()=>m,Cards:()=>P,Catalogs:()=>T,InvalidScryfallArgumentError:()=>d,MagicPageResult:()=>l,Rulings:()=>S,ScryfallError:()=>u,Sets:()=>L,SymbologyApi:()=>N,UnknownScryfallError:()=>p});module.exports=Q(Y);var d=class extends Error{};var u=class extends Error{constructor(t,n,o,a,c){super(n);this.code=t;this.status=o;this.type=a;this.warnings=c}};var p=class extends Error{};var h=100,j=100;async function z(s=0){return new Promise(e=>{setTimeout(e,s)})}async function $(){let s=Date.now(),e=s-h;if(e>=j)h=s;else{let t=j-e;h+=t,await z(t)}}function w(s=fetch){return async function(...t){return await $(),s(...t)}}var A=async s=>{let e=await s.json(),t="status"in e?Number(e.status):void 0;if(t&&t>=500)return!0;let n="code"in e&&typeof e.code=="string"?e.code:void 0;return n!=="not_found"&&n!=="bad_request"};function x({canRetry:s=A,maxAttempts:e=3}={},t=fetch){let n=0;return async function o(...a){n++;let c=await t(...a);if(c.ok)return c;let i=await c.json(),f="code"in i&&typeof i.code=="string"?i.code:void 0,y="status"in i?Number(i.status):void 0,g="details"in i&&typeof i.details=="string"?i.details:void 0,_="type"in i&&typeof i.type=="string"?i.type:void 0,k="warnings"in i&&Array.isArray(i.warnings)?i.warnings:void 0;if(n>=e)throw f&&g&&y?new u(f,g,y,_,k):new p(`Request failed with status ${c.status.toFixed(0)}`);if(s(c))return o(...a);throw f&&g&&y?new u(f,g,y,_,k):new p(`Request failed with status ${c.status.toFixed(0)}`)}}var U=w(x()),B="https://api.scryfall.com",G=/^\d{4}-\d{2}-\d{2}?$/,J=(s,e)=>typeof e=="string"&&G.test(e)?new Date(e):e;async function r(s,e,t){let n="";typeof s=="number"||typeof s=="string"?n=s:s&&(n=s.join("/"));let o=new URL(`${B}/${String(n)}`);if(e)for(let[a,c]of Object.entries(e))c!==void 0&&o.searchParams.append(a,c.toString());try{let a={method:t?"POST":"GET"};t&&(a.body=JSON.stringify(t),a.headers={"Content-Type":"application/json"});let i=await(await U(o,a)).text();return JSON.parse(i,J)}catch(a){if(a instanceof u&&(a.warnings&&console.warn(a.warnings),a.code==="not_found"||a.code==="bad_request"))return;throw a}}var l=class{constructor(e,t){this.apiPath=e;this.query=t;this.#e=!0,this.#t=0}#t;#e;get count(){return this.#t}get hasMore(){return this.#e}async all(){let e=[];for(;this.#e;){let t=await this.next();e.push(...t)}return e}async get(e){let t=[];for(;this.#e;){let n=await this.next();if(t.push(...n),t.length===e)return t;if(t.length>e)return t.slice(0,e)}return t}async next(){let e=await r(this.apiPath,this.query);return this.#e=e?.has_more??!1,this.#t=Number.parseInt(e?.total_cards?.toFixed(0)??"0",10),this.#e&&this.setNextPage(),e?.data??[]}async page(e){return this.query.page=e,this.next()}setNextPage(){this.query.page+=1}};var C=class{async autoCompleteName(e){return(await r("cards/autocomplete",{q:e}))?.data??[]}async byArenaId(e){return r(["cards/arena",e])}async byId(e){return r(["cards",e])}async byMtgoId(e){return r(["cards/mtgo",e])}async byMultiverseId(e){return r(["cards/multiverse",e])}async byName(e,t,n=!1){let o=n,a=t;return typeof t=="boolean"&&(o=t,a=void 0),r("cards/named",{[o?"fuzzy":"exact"]:e,set:a})}async bySet(e,t,n){let o=["cards",e,t];return n&&o.push(n),r(o)}async byTcgPlayerId(e){return r(["cards/tcgplayer",e])}async collection(...e){let t=[];for(let n=0;n<e.length;n+=75){let o={identifiers:e.slice(n,n+75)},a=await r("cards/collection",void 0,o);t.push(...a?.data??[])}return t}async random(){return r("cards/random")}search(e,t){return new l("cards/search",{q:e,...typeof t=="number"?{page:t}:{...t,page:t?.page??1}})}},V=new C,P=V;var m=class{static byId(e){return{id:e}}static byIllustrationId(e){return{illustration_id:e}}static byMtgoId(e){return{mtgo_id:e}}static byMultiverseId(e){return{multiverse_id:e}}static byName(e,t){return t?{name:e,set:t}:{name:e}}static byOracleId(e){return{oracle_id:e}}static bySet(e,t){return{collector_number:String(t),set:e}}};var R=class{async artifactTypes(){return(await r("catalog/artifact-types"))?.data??[]}async artistNames(){return(await r("catalog/artist-names"))?.data??[]}async cardNames(){return(await r("catalog/card-names"))?.data??[]}async creatureTypes(){return(await r("catalog/creature-types"))?.data??[]}async enchantmentTypes(){return(await r("catalog/enchantment-types"))?.data??[]}async landTypes(){return(await r("catalog/land-types"))?.data??[]}async loyalties(){return(await r("catalog/loyalties"))?.data??[]}async planeswalkerTypes(){return(await r("catalog/planeswalker-types"))?.data??[]}async powers(){return(await r("catalog/powers"))?.data??[]}async spellTypes(){return(await r("catalog/spell-types"))?.data??[]}async toughnesses(){return(await r("catalog/toughnesses"))?.data??[]}async watermarks(){return(await r("catalog/watermarks"))?.data??[]}async wordBank(){return(await r("catalog/word-bank"))?.data??[]}},X=new R,T=X;var I=class{async byArenaId(e){return(await r(["cards/arena",e,"rulings"]))?.data??[]}async byId(e){return(await r(["cards",e,"rulings"]))?.data??[]}async byMtgoId(e){return(await r(["cards/mtgo",e,"rulings"]))?.data??[]}async byMultiverseId(e){return(await r(["cards/multiverse",e,"rulings"]))?.data??[]}async bySet(e,t){return(await r(["cards",e,String(t),"rulings"]))?.data??[]}},H=new I,S=H;var F=class{async all(){return(await r("sets"))?.data??[]}async byCode(e){return await r(["sets",e])}async byId(e){return r(["sets",e])}async byTcgPlayerId(e){return r(["sets/tcgplayer",e])}},K=new F,L=K;var M=class{async all(){return(await r("symbology"))?.data??[]}async parseMana(e){if(!e||typeof e!="string")throw new d("shorthand must be a string");return await r("symbology/parse-mana",{cost:e})??{cmc:0,colorless:!1,colors:[],cost:"",monocolored:!1,multicolored:!1,object:"mana_cost"}}},W=new M,N=W;0&&(module.exports={CardIdentifierBuilder,Cards,Catalogs,InvalidScryfallArgumentError,MagicPageResult,Rulings,ScryfallError,Sets,SymbologyApi,UnknownScryfallError});
|
package/dist/scryfall-api.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var d=class extends Error{};var u=class extends Error{constructor(t,n,i,a,c){super(n);this.code=t;this.status=i;this.type=a;this.warnings=c}};var p=class extends Error{};var b=100,F=100;async function j(s=0){return new Promise(e=>{setTimeout(e,s)})}async function q(){let s=Date.now(),e=s-b;if(e>=F)b=s;else{let t=F-e;b+=t,await j(t)}}function h(s=fetch){return async function(...t){return await q(),s(...t)}}var E=async s=>{let e=await s.json(),t="status"in e?Number(e.status):void 0;if(t&&t>=500)return!0;let n="code"in e&&typeof e.code=="string"?e.code:void 0;return n!=="not_found"&&n!=="bad_request"};function w({canRetry:s=E,maxAttempts:e=3}={},t=fetch){let n=0;return async function i(...a){n++;let c=await t(...a);if(c.ok)return c;let o=await c.json(),f="code"in o&&typeof o.code=="string"?o.code:void 0,y="status"in o?Number(o.status):void 0,g="details"in o&&typeof o.details=="string"?o.details:void 0,I="type"in o&&typeof o.type=="string"?o.type:void 0,S="warnings"in o&&Array.isArray(o.warnings)?o.warnings:void 0;if(n>=e)throw f&&g&&y?new u(f,g,y,I,S):new p(`Request failed with status ${c.status.toFixed(0)}`);if(s(c))return i(...a);throw f&&g&&y?new u(f,g,y,I,S):new p(`Request failed with status ${c.status.toFixed(0)}`)}}var O=h(w()),v="https://api.scryfall.com",D=/^\d{4}-\d{2}-\d{2}?$/,Q=(s,e)=>typeof e=="string"&&D.test(e)?new Date(e):e;async function r(s,e,t){let n="";typeof s=="number"||typeof s=="string"?n=s:s&&(n=s.join("/"));let i=new URL(`${v}/${String(n)}`);if(e)for(let[a,c]of Object.entries(e))c!==void 0&&i.searchParams.append(a,c.toString());try{let a={method:t?"POST":"GET"};t&&(a.body=JSON.stringify(t),a.headers={"Content-Type":"application/json"});let o=await(await O(i,a)).text();return JSON.parse(o,Q)}catch(a){if(a instanceof u&&(a.warnings&&console.warn(a.warnings),a.code==="not_found"||a.code==="bad_request"))return;throw a}}var l=class{constructor(e,t){this.apiPath=e;this.query=t;this.#e=!0,this.#t=0}#t;#e;get count(){return this.#t}get hasMore(){return this.#e}async all(){let e=[];for(;this.#e;){let t=await this.next();e.push(...t)}return e}async get(e){let t=[];for(;this.#e;){let n=await this.next();if(t.push(...n),t.length===e)return t;if(t.length>e)return t.slice(0,e)}return t}async next(){let e=await r(this.apiPath,this.query);return this.#e=e?.has_more??!1,this.#t=Number.parseInt(e?.total_cards?.toFixed(0)??"0",10),this.#e&&this.setNextPage(),e?.data??[]}async page(e){return this.query.page=e,this.next()}setNextPage(){this.query.page+=1}};var x=class{async autoCompleteName(e){return(await r("cards/autocomplete",{q:e}))?.data??[]}async byArenaId(e){return r(["cards/arena",e])}async byId(e){return r(["cards",e])}async byMtgoId(e){return r(["cards/mtgo",e])}async byMultiverseId(e){return r(["cards/multiverse",e])}async byName(e,t,n=!1){let i=n,a=t;return typeof t=="boolean"&&(i=t,a=void 0),r("cards/named",{[i?"fuzzy":"exact"]:e,set:a})}async bySet(e,t,n){let i=["cards",e,t];return n&&i.push(n),r(i)}async byTcgPlayerId(e){return r(["cards/tcgplayer",e])}async collection(...e){let t=[];for(let n=0;n<e.length;n+=75){let i={identifiers:e.slice(n,n+75)},a=await r("cards/collection",void 0,i);t.push(...a?.data??[])}return t}async random(){return r("cards/random")}search(e,t){return new l("cards/search",{q:e,...typeof t=="number"?{page:t}:{...t,page:t?.page??1}})}},z=new x,L=z;var m=class{static byId(e){return{id:e}}static byIllustrationId(e){return{illustration_id:e}}static byMtgoId(e){return{mtgo_id:e}}static byMultiverseId(e){return{multiverse_id:e}}static byName(e,t){return t?{name:e,set:t}:{name:e}}static byOracleId(e){return{oracle_id:e}}static bySet(e,t){return{collector_number:String(t),set:e}}};var C=class{async artifactTypes(){return(await r("catalog/artifact-types"))?.data??[]}async artistNames(){return(await r("catalog/artist-names"))?.data??[]}async cardNames(){return(await r("catalog/card-names"))?.data??[]}async creatureTypes(){return(await r("catalog/creature-types"))?.data??[]}async enchantmentTypes(){return(await r("catalog/enchantment-types"))?.data??[]}async landTypes(){return(await r("catalog/land-types"))?.data??[]}async loyalties(){return(await r("catalog/loyalties"))?.data??[]}async planeswalkerTypes(){return(await r("catalog/planeswalker-types"))?.data??[]}async powers(){return(await r("catalog/powers"))?.data??[]}async spellTypes(){return(await r("catalog/spell-types"))?.data??[]}async toughnesses(){return(await r("catalog/toughnesses"))?.data??[]}async watermarks(){return(await r("catalog/watermarks"))?.data??[]}async wordBank(){return(await r("catalog/word-bank"))?.data??[]}},$=new C,M=$;var P=class{async byArenaId(e){return(await r(["cards/arena",e,"rulings"]))?.data??[]}async byId(e){return(await r(["cards",e,"rulings"]))?.data??[]}async byMtgoId(e){return(await r(["cards/mtgo",e,"rulings"]))?.data??[]}async byMultiverseId(e){return(await r(["cards/multiverse",e,"rulings"]))?.data??[]}async bySet(e,t){return(await r(["cards",e,String(t),"rulings"]))?.data??[]}},A=new P,N=A;var R=class{async all(){return(await r("sets"))?.data??[]}async byCode(e){return await r(["sets",e])}async byId(e){return r(["sets",e])}async byTcgPlayerId(e){return r(["sets/tcgplayer",e])}},U=new R,_=U;var T=class{async all(){return(await r("symbology"))?.data??[]}async parseMana(e){if(!e||typeof e!="string")throw new d("shorthand must be a string");return await r("symbology/parse-mana",{cost:e})??{cmc:0,colorless:!1,colors:[],cost:"",monocolored:!1,multicolored:!1,object:"mana_cost"}}},B=new T,k=B;export{m as CardIdentifierBuilder,L as Cards,M as Catalogs,d as InvalidScryfallArgumentError,l as MagicPageResult,N as Rulings,u as ScryfallError,_ as Sets,k as SymbologyApi,p as UnknownScryfallError};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scryfall-api",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"description": "A Javascript library for https://scryfall.com/docs/api written in Typescript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"magic",
|
|
@@ -15,26 +15,32 @@
|
|
|
15
15
|
"scryfall",
|
|
16
16
|
"scry"
|
|
17
17
|
],
|
|
18
|
-
"homepage": "https://github.com/MarioMH8/scryfall-api",
|
|
19
|
-
"bugs": {
|
|
20
|
-
"url": "https://github.com/MarioMH8/scryfall-api/issues"
|
|
21
|
-
},
|
|
22
18
|
"repository": {
|
|
23
19
|
"type": "git",
|
|
24
20
|
"url": "https://github.com/MarioMH8/scryfall-api"
|
|
25
21
|
},
|
|
22
|
+
"homepage": "https://github.com/MarioMH8/scryfall-api",
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/MarioMH8/scryfall-api/issues"
|
|
25
|
+
},
|
|
26
26
|
"license": "MIT",
|
|
27
|
+
"type": "module",
|
|
27
28
|
"files": [
|
|
28
29
|
"dist"
|
|
29
30
|
],
|
|
30
|
-
"
|
|
31
|
+
"main": "./dist/scryfall-api.js",
|
|
31
32
|
"module": "./dist/scryfall-api.js",
|
|
32
33
|
"types": "./dist/scryfall-api.d.ts",
|
|
33
34
|
"exports": {
|
|
34
35
|
".": {
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
"import": {
|
|
37
|
+
"types": "./dist/scryfall-api.d.ts",
|
|
38
|
+
"default": "./dist/scryfall-api.js"
|
|
39
|
+
},
|
|
40
|
+
"require": {
|
|
41
|
+
"types": "./dist/scryfall-api.d.cts",
|
|
42
|
+
"default": "./dist/scryfall-api.cjs"
|
|
43
|
+
},
|
|
38
44
|
"default": "./dist/scryfall-api.js"
|
|
39
45
|
}
|
|
40
46
|
},
|
|
@@ -47,12 +53,12 @@
|
|
|
47
53
|
"typecheck": "tsc --noEmit"
|
|
48
54
|
},
|
|
49
55
|
"devDependencies": {
|
|
50
|
-
"@changesets/cli": "2.27.
|
|
51
|
-
"@
|
|
52
|
-
"@
|
|
53
|
-
"@types/bun": "1.1.
|
|
54
|
-
"eslint": "
|
|
55
|
-
"tsup": "8.0
|
|
56
|
-
"typescript": "5.
|
|
56
|
+
"@changesets/cli": "2.27.7",
|
|
57
|
+
"@hexadrop/eslint-config": "0.0.1-beta.14",
|
|
58
|
+
"@hexadrop/tsconfig": "0.0.5",
|
|
59
|
+
"@types/bun": "1.1.6",
|
|
60
|
+
"eslint": "9.6.0",
|
|
61
|
+
"tsup": "8.1.0",
|
|
62
|
+
"typescript": "5.5.3"
|
|
57
63
|
}
|
|
58
64
|
}
|