UNPKG

contensis-delivery-api

Version:

Client for retrieving content using the read-only Contensis Delivery API

62 lines (61 loc) 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ListResolver = void 0; const contensis_core_api_1 = require("contensis-core-api"); const DeferredEntry_1 = require("./DeferredEntry"); const entry_resolver_1 = require("./entry-resolver"); class ListResolver { constructor(entries, paths, versionStatus, search) { this.entries = entries; this.paths = paths; this.versionStatus = versionStatus; this.search = search; this.deferredEntries = []; } resolve() { this.deferredEntries = []; let promises = this.entries.map(entry => { let resolver = new entry_resolver_1.EntryResolver(entry, this.paths, (id, language) => this.getEntry(id, language)); return resolver.resolve(); }); return this.nestedSearch().then(_ => { return Promise.all(promises).then(_ => { return this.entries; }); }); } getEntry(id, language) { let deferredEntry = new DeferredEntry_1.DeferredEntry({ id, language }, this.versionStatus); this.deferredEntries.push(deferredEntry); return deferredEntry.promise; } nestedSearch() { let expressions = this.deferredEntries.map(g => g.expression); let query = new contensis_core_api_1.Query(contensis_core_api_1.Op.or(...expressions)); query.pageIndex = 0; query.pageSize = expressions.length; return this.search(query).then((list) => { let allDeferredEntries = this.deferredEntries; this.deferredEntries = []; let promises = []; for (let item of list.items) { let deferredEntries = allDeferredEntries.filter(deferredEntry => deferredEntry.is(item.sys)); for (let deferredEntry of deferredEntries) { deferredEntry.resolve(item); promises.push(deferredEntry.promise); } } if (promises.length === 0) { for (let deferredEntry of allDeferredEntries) { deferredEntry.resolve(null); } return Promise.resolve(list); } return Promise.all(promises).then(() => Promise.resolve(list)); }) .then(value => { return (this.deferredEntries.length > 0) ? this.nestedSearch() : value; }); } } exports.ListResolver = ListResolver;