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.
@@ -37,68 +37,12 @@ async function debounce() {
37
37
  }
38
38
  }
39
39
  function createDebounceFetcher(fetcher2 = fetch) {
40
- return async function debounceFetcher(...args) {
40
+ return async function debounceFetcher(...arguments_) {
41
41
  await debounce();
42
- return fetcher2(...args);
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({ maxAttempts = 3, canRetry = defaultCanRetry } = {}, fetcher2 = fetch) {
56
+ function createRetryFetcher({ canRetry = defaultCanRetry, maxAttempts = 3 } = {}, fetcher2 = fetch) {
113
57
  let retries = 0;
114
- return async function retryFetcher(...args) {
58
+ return async function retryFetcher(...arguments_) {
115
59
  retries++;
116
- const response = await fetcher2(...args);
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(...args);
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/index.ts
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
- if (DATE_REGEXP.test(value)) {
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, params, body) {
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 (params) {
163
- Object.entries(params).forEach(([key, value]) => {
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, `${value}`);
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 (e) {
183
- if (e instanceof ScryfallError) {
184
- if (e.warnings) {
185
- console.warn(e.warnings);
124
+ } catch (error) {
125
+ if (error instanceof ScryfallError) {
126
+ if (error.warnings) {
127
+ console.warn(error.warnings);
186
128
  }
187
- if (e.code === "not_found" || e.code === "bad_request") {
129
+ if (error.code === "not_found" || error.code === "bad_request") {
188
130
  return void 0;
189
131
  }
190
132
  }
191
- throw e;
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 i = 0; i < identifiers.length; i += 75) {
261
- const collectionSection = { identifiers: identifiers.slice(i, i + 75) };
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: `${collectorNumber}`, set: set2 };
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
- return (await fetcher("catalog/artifact-types"))?.data ?? [];
313
+ const response = await fetcher("catalog/artifact-types");
314
+ return response?.data ?? [];
322
315
  }
323
316
  async artistNames() {
324
- return (await fetcher("catalog/artist-names"))?.data ?? [];
317
+ const response = await fetcher("catalog/artist-names");
318
+ return response?.data ?? [];
325
319
  }
326
320
  async cardNames() {
327
- return (await fetcher("catalog/card-names"))?.data ?? [];
321
+ const response = await fetcher("catalog/card-names");
322
+ return response?.data ?? [];
328
323
  }
329
324
  async creatureTypes() {
330
- return (await fetcher("catalog/creature-types"))?.data ?? [];
325
+ const response = await fetcher("catalog/creature-types");
326
+ return response?.data ?? [];
331
327
  }
332
328
  async enchantmentTypes() {
333
- return (await fetcher("catalog/enchantment-types"))?.data ?? [];
329
+ const response = await fetcher("catalog/enchantment-types");
330
+ return response?.data ?? [];
334
331
  }
335
332
  async landTypes() {
336
- return (await fetcher("catalog/land-types"))?.data ?? [];
333
+ const response = await fetcher("catalog/land-types");
334
+ return response?.data ?? [];
337
335
  }
338
336
  async loyalties() {
339
- return (await fetcher("catalog/loyalties"))?.data ?? [];
337
+ const response = await fetcher("catalog/loyalties");
338
+ return response?.data ?? [];
340
339
  }
341
340
  async planeswalkerTypes() {
342
- return (await fetcher("catalog/planeswalker-types"))?.data ?? [];
341
+ const response = await fetcher("catalog/planeswalker-types");
342
+ return response?.data ?? [];
343
343
  }
344
344
  async powers() {
345
- return (await fetcher("catalog/powers"))?.data ?? [];
345
+ const response = await fetcher("catalog/powers");
346
+ return response?.data ?? [];
346
347
  }
347
348
  async spellTypes() {
348
- return (await fetcher("catalog/spell-types"))?.data ?? [];
349
+ const response = await fetcher("catalog/spell-types");
350
+ return response?.data ?? [];
349
351
  }
350
352
  async toughnesses() {
351
- return (await fetcher("catalog/toughnesses"))?.data ?? [];
353
+ const response = await fetcher("catalog/toughnesses");
354
+ return response?.data ?? [];
352
355
  }
353
356
  async watermarks() {
354
- return (await fetcher("catalog/watermarks"))?.data ?? [];
357
+ const response = await fetcher("catalog/watermarks");
358
+ return response?.data ?? [];
355
359
  }
356
360
  async wordBank() {
357
- return (await fetcher("catalog/word-bank"))?.data ?? [];
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
- return (await fetcher(["cards/arena", id, "rulings"]))?.data ?? [];
371
+ const response = await fetcher(["cards/arena", id, "rulings"]);
372
+ return response?.data ?? [];
370
373
  }
371
374
  async byId(id) {
372
- return (await fetcher(["cards", id, "rulings"]))?.data ?? [];
375
+ const response = await fetcher(["cards", id, "rulings"]);
376
+ return response?.data ?? [];
373
377
  }
374
378
  async byMtgoId(id) {
375
- return (await fetcher(["cards/mtgo", id, "rulings"]))?.data ?? [];
379
+ const response = await fetcher(["cards/mtgo", id, "rulings"]);
380
+ return response?.data ?? [];
376
381
  }
377
382
  async byMultiverseId(id) {
378
- return (await fetcher(["cards/multiverse", id, "rulings"]))?.data ?? [];
383
+ const response = await fetcher(["cards/multiverse", id, "rulings"]);
384
+ return response?.data ?? [];
379
385
  }
380
386
  async bySet(setCode, collectorNumber) {
381
- return (await fetcher(["cards", setCode, `${collectorNumber}`, "rulings"]))?.data ?? [];
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
- card_identifier_default as CardIdentifierBuilder,
443
- card_default as Cards,
444
- catalog_default as Catalogs,
440
+ CardIdentifierApi as CardIdentifierBuilder,
441
+ card_api_default as Cards,
442
+ catalog_api_default as Catalogs,
445
443
  InvalidScryfallArgumentError,
446
444
  MagicPageResult,
447
- ruling_default as Rulings,
445
+ ruling_api_default as Rulings,
448
446
  ScryfallError,
449
- set_default as Sets,
450
- symbology_default as SymbologyApi,
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 Q=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var U=(a,e)=>{for(var t in e)b(a,t,{get:e[t],enumerable:!0})},B=(a,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of z(e))!A.call(a,o)&&o!==t&&b(a,o,{get:()=>e[o],enumerable:!(s=Q(e,o))||s.enumerable});return a};var G=a=>B(b({},"__esModule",{value:!0}),a);var se={};U(se,{CardIdentifierBuilder:()=>_,Cards:()=>N,Catalogs:()=>j,InvalidScryfallArgumentError:()=>p,MagicPageResult:()=>d,Rulings:()=>q,ScryfallError:()=>u,Sets:()=>$,SymbologyApi:()=>D,UnknownScryfallError:()=>l});module.exports=G(se);var p=class extends Error{};var u=class extends Error{constructor(t,s,o,n,c){super(s);this.code=t;this.status=o;this.type=n;this.warnings=c}};var l=class extends Error{};var h=100,L=100;async function J(a=0){return new Promise(e=>{setTimeout(e,a)})}async function V(){let a=Date.now(),e=a-h;if(e>=L)h=a;else{let t=L-e;h+=t,await J(t)}}function w(a=fetch){return async function(...t){return await V(),a(...t)}}var d=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 s=await this.next();if(t.push(...s),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??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=async a=>{let e=await a.json(),t="status"in e?Number(e.status):void 0;if(t&&t>=500)return!0;let s="code"in e&&typeof e.code=="string"?e.code:void 0;return s!=="not_found"&&s!=="bad_request"};function x({maxAttempts:a=3,canRetry:e=X}={},t=fetch){let s=0;return async function o(...n){s++;let c=await t(...n);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,S="type"in i&&typeof i.type=="string"?i.type:void 0,F="warnings"in i&&Array.isArray(i.warnings)?i.warnings:void 0;if(s>=a)throw f&&g&&y?new u(f,g,y,S,F):new l(`Request failed with status ${c.status}`);if(e(c))return o(...n);throw f&&g&&y?new u(f,g,y,S,F):new l(`Request failed with status ${c.status}`)}}var H=w(x()),K="https://api.scryfall.com",W=/^\d{4}-\d{2}-\d{2}?$/,Y=(a,e)=>typeof e=="string"&&W.test(e)?new Date(e):e;async function r(a,e,t){let s="";typeof a=="number"||typeof a=="string"?s=a:a&&(s=a.join("/"));let o=new URL(`${K}/${s}`);e&&Object.entries(e).forEach(([n,c])=>{c!==void 0&&o.searchParams.append(n,`${c}`)});try{let n={method:t?"POST":"GET"};t&&(n.body=JSON.stringify(t),n.headers={"Content-Type":"application/json"});let i=await(await H(o,n)).text();return JSON.parse(i,Y)}catch(n){if(n instanceof u&&(n.warnings&&console.warn(n.warnings),n.code==="not_found"||n.code==="bad_request"))return;throw n}}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,s=!1){let o=s,n=t;return typeof t=="boolean"&&(o=t,n=void 0),r("cards/named",{[o?"fuzzy":"exact"]:e,set:n})}async bySet(e,t,s){let o=["cards",e,t];return s&&o.push(s),r(o)}async byTcgPlayerId(e){return r(["cards/tcgplayer",e])}async collection(...e){let t=[];for(let s=0;s<e.length;s+=75){let o={identifiers:e.slice(s,s+75)},n=await r("cards/collection",void 0,o);t.push(...n?.data??[])}return t}async random(){return r("cards/random")}search(e,t){return new d("cards/search",{q:e,...typeof t=="number"?{page:t}:{...t,page:t?.page??1}})}},Z=new C,M=Z;var N=M;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:`${t}`,set:e}}};var _=m;var P=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??[]}},ee=new P,E=ee;var j=E;var R=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,`${t}`,"rulings"]))?.data??[]}},te=new R,k=te;var q=k;var T=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])}},re=new T,O=re;var $=O;var I=class{async all(){return(await r("symbology"))?.data??[]}async parseMana(e){if(!e||typeof e!="string")throw new p("shorthand must be a string");return await r("symbology/parse-mana",{cost:e})??{cost:"",colors:[],cmc:0,colorless:!1,monocolored:!1,multicolored:!1,object:"mana_cost"}}},ae=new I,v=ae;var D=v;0&&(module.exports={CardIdentifierBuilder,Cards,Catalogs,InvalidScryfallArgumentError,MagicPageResult,Rulings,ScryfallError,Sets,SymbologyApi,UnknownScryfallError});
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});
@@ -1 +1 @@
1
- var p=class extends Error{};var u=class extends Error{constructor(t,s,i,n,c){super(s);this.code=t;this.status=i;this.type=n;this.warnings=c}};var l=class extends Error{};var b=100,F=100;async function j(a=0){return new Promise(e=>{setTimeout(e,a)})}async function k(){let a=Date.now(),e=a-b;if(e>=F)b=a;else{let t=F-e;b+=t,await j(t)}}function h(a=fetch){return async function(...t){return await k(),a(...t)}}var d=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 s=await this.next();if(t.push(...s),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??0}`,10),this.#e&&this.setNextPage(),e?.data??[]}async page(e){return this.query.page=e,this.next()}setNextPage(){this.query.page+=1}};var q=async a=>{let e=await a.json(),t="status"in e?Number(e.status):void 0;if(t&&t>=500)return!0;let s="code"in e&&typeof e.code=="string"?e.code:void 0;return s!=="not_found"&&s!=="bad_request"};function w({maxAttempts:a=3,canRetry:e=q}={},t=fetch){let s=0;return async function i(...n){s++;let c=await t(...n);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(s>=a)throw f&&g&&y?new u(f,g,y,I,S):new l(`Request failed with status ${c.status}`);if(e(c))return i(...n);throw f&&g&&y?new u(f,g,y,I,S):new l(`Request failed with status ${c.status}`)}}var O=h(w()),$="https://api.scryfall.com",v=/^\d{4}-\d{2}-\d{2}?$/,D=(a,e)=>typeof e=="string"&&v.test(e)?new Date(e):e;async function r(a,e,t){let s="";typeof a=="number"||typeof a=="string"?s=a:a&&(s=a.join("/"));let i=new URL(`${$}/${s}`);e&&Object.entries(e).forEach(([n,c])=>{c!==void 0&&i.searchParams.append(n,`${c}`)});try{let n={method:t?"POST":"GET"};t&&(n.body=JSON.stringify(t),n.headers={"Content-Type":"application/json"});let o=await(await O(i,n)).text();return JSON.parse(o,D)}catch(n){if(n instanceof u&&(n.warnings&&console.warn(n.warnings),n.code==="not_found"||n.code==="bad_request"))return;throw n}}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,s=!1){let i=s,n=t;return typeof t=="boolean"&&(i=t,n=void 0),r("cards/named",{[i?"fuzzy":"exact"]:e,set:n})}async bySet(e,t,s){let i=["cards",e,t];return s&&i.push(s),r(i)}async byTcgPlayerId(e){return r(["cards/tcgplayer",e])}async collection(...e){let t=[];for(let s=0;s<e.length;s+=75){let i={identifiers:e.slice(s,s+75)},n=await r("cards/collection",void 0,i);t.push(...n?.data??[])}return t}async random(){return r("cards/random")}search(e,t){return new d("cards/search",{q:e,...typeof t=="number"?{page:t}:{...t,page:t?.page??1}})}},Q=new x,L=Q;var z=L;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:`${t}`,set:e}}};var A=m;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??[]}},U=new C,M=U;var B=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,`${t}`,"rulings"]))?.data??[]}},G=new P,N=G;var J=N;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])}},V=new R,_=V;var X=_;var T=class{async all(){return(await r("symbology"))?.data??[]}async parseMana(e){if(!e||typeof e!="string")throw new p("shorthand must be a string");return await r("symbology/parse-mana",{cost:e})??{cost:"",colors:[],cmc:0,colorless:!1,monocolored:!1,multicolored:!1,object:"mana_cost"}}},H=new T,E=H;var K=E;export{A as CardIdentifierBuilder,z as Cards,B as Catalogs,p as InvalidScryfallArgumentError,d as MagicPageResult,J as Rulings,u as ScryfallError,X as Sets,K as SymbologyApi,l as UnknownScryfallError};
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.0-beta.2",
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
- "type": "module",
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
- "types": "./dist/scryfall-api.d.ts",
36
- "require": "./dist/scryfall-api.cjs",
37
- "import": "./dist/scryfall-api.js",
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.1",
51
- "@hexatool/eslint-config": "2.3.0",
52
- "@hexatool/tsconfig": "20.0.1",
53
- "@types/bun": "1.1.2",
54
- "eslint": "8.57.0",
55
- "tsup": "8.0.2",
56
- "typescript": "5.4.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
  }