@amplience/dc-cli
Version:
Dynamic Content CLI Tool
201 lines (200 loc) • 8.02 kB
JavaScript
"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;