UNPKG

scryfall-sdk

Version:

A Node.js SDK for https://scryfall.com/docs/api written in Typescript.

110 lines (109 loc) 4.66 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; Object.defineProperty(exports, "__esModule", { value: true }); const EventEmitter_1 = require("./EventEmitter"); class MagicEmitter extends EventEmitter_1.default { get ended() { return this._ended; } get cancelled() { return this._cancelled; } get willCancelAfterPage() { return this._willCancelAfterPage; } constructor() { super(); this._ended = false; this._cancelled = false; this._willCancelAfterPage = false; this.mappers = []; this.on("end", () => { this._ended = true; }); this.on("cancel", () => { this._ended = true; }); } on(event, listener) { super.on(event, listener); return this; } emit(event, ...data) { if (event === "data") return super.emit(event, this.mappers.reduce((current, mapper) => mapper(current), data[0])); return super.emit(event, ...data); } emitAll(event, ...data) { for (const item of data) { super.emit(event, event !== "data" ? item : this.mappers.reduce((current, mapper) => mapper(current), item)); if (this._cancelled) break; } } cancel() { this._cancelled = true; this.emit("cancel"); return this; } cancelAfterPage() { this._willCancelAfterPage = true; return this; } waitForAll() { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const results = []; results.not_found = []; this.on("data", result => { results.push(result); }); this.on("not_found", notFound => { results.not_found.push(notFound); }); this.on("done", () => resolve(results)); this.on("error", reject); }); }); } [Symbol.asyncIterator]() { return this.generate("data"); } all() { return this.generate("data"); } notFound() { return this.generate("not_found"); } map(mapper) { this.mappers.push(mapper); return this; } generate(event) { return __asyncGenerator(this, arguments, function* generate_1() { // save the new data on each event const unyielded = []; this.on(event, data => unyielded.push(data)); while (!this._ended) { // wait for the next event before yielding any new data yield __await(new Promise(resolve => this.once(event, resolve))); let data; while (data = unyielded.shift()) yield yield __await(data); } }); } } exports.default = MagicEmitter;