UNPKG

@amplience/dc-cli

Version:
201 lines (200 loc) 8.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getContent = exports.fetchContent = exports.tryFetchContent = exports.shouldFacetEnriched = exports.getItemCount = exports.getTotalElements = exports.facetAlwaysMaximum = exports.facetEnrichThreshold = void 0; const paginator_1 = __importDefault(require("../dc-management-sdk-js/paginator")); const facet_1 = require("./facet"); const regex_1 = require("./regex"); const paginate_with_progress_1 = require("../dc-management-sdk-js/paginate-with-progress"); exports.facetEnrichThreshold = 20; exports.facetAlwaysMaximum = 20; const getTotalElements = (page) => { if (page.page == null || page.page.totalElements == null) { return page.getItems().length; } return page.page.totalElements; }; exports.getTotalElements = getTotalElements; const getItemCount = async (client, hub, folderId, repoId, status) => { const options = { status, size: 1 }; if (folderId != null) { const folder = await client.folders.get(folderId); return (0, exports.getTotalElements)(await folder.related.contentItems.list(options)); } else if (repoId != null) { const repo = await client.contentRepositories.get(repoId); return (0, exports.getTotalElements)(await repo.related.contentItems.list(options)); } else { const repos = await (0, paginator_1.default)(hub.related.contentRepositories.list); let result = 0; for (const repo of repos) { const page = await repo.related.contentItems.list(options); result += (0, exports.getTotalElements)(page); } return result; } }; exports.getItemCount = getItemCount; const shouldFacetEnriched = async (client, hub, facetQuery, qString, folderId, repoId, status) => { const facetCount = (0, exports.getTotalElements)(await hub.related.contentItems.facet(facetQuery, { query: qString, size: 1 })); if (facetCount == 0) { return 0; } if (facetCount > exports.facetAlwaysMaximum) { const allCount = await (0, exports.getItemCount)(client, hub, folderId, repoId, status); if (facetCount * exports.facetEnrichThreshold >= allCount) { return false; } } return true; }; exports.shouldFacetEnriched = shouldFacetEnriched; const tryFetchContent = async (client, hub, facet, params) => { const { repoId, folderId, enrichItems, status } = params; const facetQuery = { fields: [], returnEntities: true }; const query = []; const schemaArray = (0, facet_1.tryGetArray)(facet.schema, true); if (schemaArray) { facetQuery.fields.push({ facetAs: 'ENUM', field: 'schema', filter: { type: 'IN', values: schemaArray } }); } const localeArray = (0, facet_1.tryGetArray)(facet.locale, true); if (localeArray) { facetQuery.fields.push({ facetAs: 'ENUM', field: 'locale', filter: { type: 'IN', values: localeArray } }); } if (facet.name) { const names = (0, facet_1.tryGetArray)(facet.name, false); if (names && names.length === 1) { for (const name of names) { query.push(`label:"${name.replace(/"/g, '\\"')}"`); } } } if (facet.lastModifiedDate) { const range = (0, facet_1.parseDateRange)(facet.lastModifiedDate); facetQuery.fields.push({ facetAs: 'DATE', field: 'lastModifiedDate', filter: { type: 'DATE', values: [`${range.end},${range.start}`] }, range }); } if (facetQuery.fields.length === 0 && query.length === 0) { return null; } if (repoId) { query.push(`contentRepositoryId:"${repoId}"`); } if (folderId) { query.push(`folderId:"${folderId}"`); } if (status) { query.push(`status:"${status}"`); } else if (facet.status && !(0, regex_1.isRegexString)(facet.status) && facet.status.indexOf('"') === -1) { query.push(`status:"${facet.status}"`); delete facet.status; } if (enrichItems) { const qString = query.join(''); const should = await (0, exports.shouldFacetEnriched)(client, hub, facetQuery, qString, folderId, repoId, status); if (should === 0) { return []; } else if (!should) { return null; } const items = await (0, paginator_1.default)(options => hub.related.contentItems.facet(facetQuery, { ...options, query: qString })); const enriched = []; for (let i = 0; i < items.length; i++) { enriched.push(await client.contentItems.get(items[i].id)); } return enriched; } else { return (0, paginator_1.default)(options => hub.related.contentItems.facet(facetQuery, { ...options, query: query.join('') })); } }; exports.tryFetchContent = tryFetchContent; const fetchContent = async (client, hub, facetOrString, params) => { const { repoId, folderId, status } = params; const options = status ? { status } : undefined; let filtered = null; if (facetOrString) { let facet; if (typeof facetOrString === 'string') { facet = (0, facet_1.parseFacet)(facetOrString); } else { facet = facetOrString; } filtered = await (0, exports.tryFetchContent)(client, hub, facet, params); } if (filtered == null) { if (folderId != null) { const folder = await client.folders.get(folderId); return await (0, paginate_with_progress_1.paginateWithProgress)(folder.related.contentItems.list, options, { title: `Fetching content items by folder: ${folderId}` }); } else if (repoId != null) { const repo = await client.contentRepositories.get(repoId); return await (0, paginate_with_progress_1.paginateWithProgress)(repo.related.contentItems.list, options, { title: `Fetching content items by repository id: ${repoId}` }); } else { const repos = await (0, paginator_1.default)(hub.related.contentRepositories.list); const result = []; for (const repo of repos) { result.push(...(await (0, paginate_with_progress_1.paginateWithProgress)(repo.related.contentItems.list, options, { title: `Fetching content items for repository: ${repo.id}` }))); } return result; } } return filtered; }; exports.fetchContent = fetchContent; const getContent = async (client, hub, facetOrString, params) => { const result = []; const { repoId, folderId, enrichItems, status } = params; const baseFetchParams = { enrichItems, status }; if (folderId != null) { const folderIds = Array.isArray(folderId) ? folderId : [folderId]; for (const folder of folderIds) { result.push(...(await (0, exports.fetchContent)(client, hub, facetOrString, { ...baseFetchParams, folderId: folder }))); } } if (repoId != null) { const repoIds = Array.isArray(repoId) ? repoId : [repoId]; for (const repo of repoIds) { result.push(...(await (0, exports.fetchContent)(client, hub, facetOrString, { ...baseFetchParams, repoId: repo }))); } } if (folderId == null && repoId == null) { result.push(...(await (0, exports.fetchContent)(client, hub, facetOrString, baseFetchParams))); } return facetOrString ? (0, facet_1.applyFacet)(result, facetOrString) : result; }; exports.getContent = getContent;