UNPKG

comic-vine-sdk

Version:

A JS/TS client for the Comic Vine API

54 lines 8.87 kB
export class BaseResource { constructor(httpClient, urlBuilder) { this.httpClient = httpClient; this.urlBuilder = urlBuilder; } async retrieve(id, options) { const url = this.urlBuilder.retrieve(this.resourceType, id, options); const _fieldList = options?.fieldList; const response = await this.httpClient.get(url); return response.results; } async fetchPage(options) { const url = this.urlBuilder.list(this.resourceType, options); const _fieldList = options?.fieldList; const response = await this.httpClient.get(url); return { limit: response.limit, numberOfPageResults: response.numberOfPageResults, numberOfTotalResults: response.numberOfTotalResults, offset: response.offset, data: response.results, }; } list(options) { // Proxy the call to this.fetchPage so that we can close over `this`, allowing access in the iterator const fetchPage = (opts) => this.fetchPage.call(this, opts); const fetchPagePromise = fetchPage(options); const asyncIterator = { async *[Symbol.asyncIterator]() { const defaultPageSize = 100; const limit = options?.limit ?? defaultPageSize; let page = options?.offset ? options.offset / limit + 1 : 1; let hasMoreResults = true; let response = await fetchPagePromise; do { for (const resource of response.data) { yield resource; } hasMoreResults = response.limit + response.offset < response.numberOfTotalResults; if (hasMoreResults) { response = await fetchPage({ limit, offset: response.numberOfPageResults * page++, }); } } while (hasMoreResults); }, }; const promiseWithAsyncIterator = Object.assign(fetchPagePromise, asyncIterator); return promiseWithAsyncIterator; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvYmFzZS1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLE9BQWdCLFlBQVk7SUFHaEMsWUFDVSxVQUFzQixFQUN0QixVQUFzQjtRQUR0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDN0IsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRLENBQ1osRUFBVSxFQUNWLE9BQW1DO1FBSW5DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUM7UUFFdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsQ0FBQztRQUU5RCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTLENBQ3JCLE9BQThEO1FBTTlELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLFNBQVMsQ0FBQztRQUV0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFpQixHQUFHLENBQUMsQ0FBQztRQUVoRSxPQUFPO1lBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxtQkFBbUI7WUFDakQsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLG9CQUFvQjtZQUNuRCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPO1NBQ3ZCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUNGLE9BQThEO1FBRTlELHFHQUFxRztRQUNyRyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQTJDLEVBQUUsRUFBRSxDQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUMsTUFBTSxhQUFhLEdBQUc7WUFDcEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUMzQixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7Z0JBQzVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksZUFBZSxDQUFDO2dCQUNoRCxJQUFJLElBQUksR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDO2dCQUV0QyxHQUFHLENBQUM7b0JBQ0YsS0FBSyxNQUFNLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3JDLE1BQU0sUUFBUSxDQUFDO29CQUNqQixDQUFDO29CQUVELGNBQWM7d0JBQ1osUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztvQkFFbkUsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDbkIsUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDOzRCQUN6QixLQUFLOzRCQUNMLE1BQU0sRUFBRSxRQUFRLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxFQUFFO3lCQUM5QyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDLFFBQVEsY0FBYyxFQUFFO1lBQzNCLENBQUM7U0FDRixDQUFDO1FBRUYsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUM1QyxnQkFBZ0IsRUFDaEIsYUFBYSxDQUNkLENBQUM7UUFFRixPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlVHlwZSB9IGZyb20gJy4vcmVzb3VyY2UtdHlwZS5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJldHJpZXZlT3B0aW9ucyxcbiAgTGlzdE9wdGlvbnMsXG4gIEh0dHBDbGllbnQsXG4gIFVybEJ1aWxkZXIsXG4gIFBpY2tGaWx0ZXJzLFxufSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUmVzb3VyY2U8UmVzb3VyY2UsIFJlc291cmNlTGlzdEl0ZW0+IHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlc291cmNlVHlwZTogUmVzb3VyY2VUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHVybEJ1aWxkZXI6IFVybEJ1aWxkZXIsXG4gICkge31cblxuICBhc3luYyByZXRyaWV2ZTxGaWVsZEtleSBleHRlbmRzIGtleW9mIFJlc291cmNlPihcbiAgICBpZDogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBSZXRyaWV2ZU9wdGlvbnM8RmllbGRLZXk+LFxuICApIHtcbiAgICB0eXBlIFJldHVyblR5cGU8VD4gPSBUIGV4dGVuZHMgb2JqZWN0ID8gUGljazxSZXNvdXJjZSwgRmllbGRLZXk+IDogUmVzb3VyY2U7XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybEJ1aWxkZXIucmV0cmlldmUodGhpcy5yZXNvdXJjZVR5cGUsIGlkLCBvcHRpb25zKTtcbiAgICBjb25zdCBfZmllbGRMaXN0ID0gb3B0aW9ucz8uZmllbGRMaXN0O1xuICAgIHR5cGUgUmVzcG9uc2VUeXBlID0gUmV0dXJuVHlwZTx0eXBlb2YgX2ZpZWxkTGlzdD47XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0PFJlc3BvbnNlVHlwZT4odXJsKTtcblxuICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFBhZ2U8RmllbGRLZXkgZXh0ZW5kcyBrZXlvZiBSZXNvdXJjZUxpc3RJdGVtPihcbiAgICBvcHRpb25zPzogTGlzdE9wdGlvbnM8RmllbGRLZXksIFBpY2tGaWx0ZXJzPFJlc291cmNlTGlzdEl0ZW0+PixcbiAgKSB7XG4gICAgdHlwZSBSZXR1cm5UeXBlPFQ+ID0gVCBleHRlbmRzIG9iamVjdFxuICAgICAgPyBQaWNrPFJlc291cmNlTGlzdEl0ZW0sIEZpZWxkS2V5PlxuICAgICAgOiBSZXNvdXJjZUxpc3RJdGVtO1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy51cmxCdWlsZGVyLmxpc3QodGhpcy5yZXNvdXJjZVR5cGUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IF9maWVsZExpc3QgPSBvcHRpb25zPy5maWVsZExpc3Q7XG4gICAgdHlwZSBSZXNwb25zZVR5cGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBfZmllbGRMaXN0PjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQ8UmVzcG9uc2VUeXBlW10+KHVybCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGltaXQ6IHJlc3BvbnNlLmxpbWl0LFxuICAgICAgbnVtYmVyT2ZQYWdlUmVzdWx0czogcmVzcG9uc2UubnVtYmVyT2ZQYWdlUmVzdWx0cyxcbiAgICAgIG51bWJlck9mVG90YWxSZXN1bHRzOiByZXNwb25zZS5udW1iZXJPZlRvdGFsUmVzdWx0cyxcbiAgICAgIG9mZnNldDogcmVzcG9uc2Uub2Zmc2V0LFxuICAgICAgZGF0YTogcmVzcG9uc2UucmVzdWx0cyxcbiAgICB9O1xuICB9XG5cbiAgbGlzdDxGaWVsZEtleSBleHRlbmRzIGtleW9mIFJlc291cmNlTGlzdEl0ZW0+KFxuICAgIG9wdGlvbnM/OiBMaXN0T3B0aW9uczxGaWVsZEtleSwgUGlja0ZpbHRlcnM8UmVzb3VyY2VMaXN0SXRlbT4+LFxuICApIHtcbiAgICAvLyBQcm94eSB0aGUgY2FsbCB0byB0aGlzLmZldGNoUGFnZSBzbyB0aGF0IHdlIGNhbiBjbG9zZSBvdmVyIGB0aGlzYCwgYWxsb3dpbmcgYWNjZXNzIGluIHRoZSBpdGVyYXRvclxuICAgIGNvbnN0IGZldGNoUGFnZSA9IChvcHRzPzogUGFyYW1ldGVyczx0eXBlb2YgdGhpcy5mZXRjaFBhZ2U+WzBdKSA9PlxuICAgICAgdGhpcy5mZXRjaFBhZ2UuY2FsbCh0aGlzLCBvcHRzKTtcbiAgICBjb25zdCBmZXRjaFBhZ2VQcm9taXNlID0gZmV0Y2hQYWdlKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgYXN5bmNJdGVyYXRvciA9IHtcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0UGFnZVNpemUgPSAxMDA7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucz8ubGltaXQgPz8gZGVmYXVsdFBhZ2VTaXplO1xuICAgICAgICBsZXQgcGFnZSA9IG9wdGlvbnM/Lm9mZnNldCA/IG9wdGlvbnMub2Zmc2V0IC8gbGltaXQgKyAxIDogMTtcbiAgICAgICAgbGV0IGhhc01vcmVSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hQYWdlUHJvbWlzZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICB5aWVsZCByZXNvdXJjZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYXNNb3JlUmVzdWx0cyA9XG4gICAgICAgICAgICByZXNwb25zZS5saW1pdCArIHJlc3BvbnNlLm9mZnNldCA8IHJlc3BvbnNlLm51bWJlck9mVG90YWxSZXN1bHRzO1xuXG4gICAgICAgICAgaWYgKGhhc01vcmVSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoUGFnZSh7XG4gICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICBvZmZzZXQ6IHJlc3BvbnNlLm51bWJlck9mUGFnZVJlc3VsdHMgKiBwYWdlKyssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGhhc01vcmVSZXN1bHRzKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHByb21pc2VXaXRoQXN5bmNJdGVyYXRvciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBmZXRjaFBhZ2VQcm9taXNlLFxuICAgICAgYXN5bmNJdGVyYXRvcixcbiAgICApO1xuXG4gICAgcmV0dXJuIHByb21pc2VXaXRoQXN5bmNJdGVyYXRvcjtcbiAgfVxufVxuIl19