@contentstack/utils
Version:
Contentstack utilities for Javascript
86 lines • 3.32 kB
JavaScript
function assertPlainObject(value, message) {
if (value === null || value === undefined) {
throw new TypeError(message);
}
if (typeof value !== 'object' || Array.isArray(value)) {
throw new TypeError(message);
}
}
function requireEntryUid(entry) {
var uid = entry.uid;
if (typeof uid !== 'string' || uid.length === 0) {
throw new Error('Entry uid is required. The entry must include a non-empty uid string.');
}
return uid;
}
function resolveContentTypeUid(entry, contentTypeUid) {
var fromEntry = entry._content_type_uid;
if (typeof fromEntry === 'string' && fromEntry.length > 0) {
return fromEntry;
}
if (typeof contentTypeUid === 'string' && contentTypeUid.length > 0) {
return contentTypeUid;
}
return '';
}
function collectVariantAliases(entry) {
var publishDetails = entry.publish_details;
if (!publishDetails || typeof publishDetails !== 'object' || Array.isArray(publishDetails)) {
return [];
}
var variants = publishDetails.variants;
if (!variants || typeof variants !== 'object' || Array.isArray(variants)) {
return [];
}
var out = [];
var map = variants;
for (var _i = 0, _a = Object.keys(map); _i < _a.length; _i++) {
var key = _a[_i];
var v = map[key];
if (!v || typeof v !== 'object' || Array.isArray(v)) {
continue;
}
var alias = v.alias;
if (typeof alias === 'string' && alias.length > 0) {
out.push(alias);
}
}
return out;
}
function mapEntryToResult(entry, contentTypeUid) {
return {
entry_uid: requireEntryUid(entry),
contenttype_uid: resolveContentTypeUid(entry, contentTypeUid),
variants: collectVariantAliases(entry),
};
}
export function getVariantAliases(entryOrEntries, contentTypeUid) {
if (Array.isArray(entryOrEntries)) {
return entryOrEntries.map(function (e) {
assertPlainObject(e, 'Each entry must be a plain object with a uid.');
return mapEntryToResult(e, contentTypeUid);
});
}
assertPlainObject(entryOrEntries, 'Entry is required. Provide a CDA entry object with a uid.');
return mapEntryToResult(entryOrEntries, contentTypeUid);
}
/**
* Serialises variant alias results for use as an HTML `data-csvariants` attribute value.
*
* @param entries - CDA entries to process (same rules as {@link getVariantAliases} for each item).
* @param contentTypeUid - Applied when an entry lacks `_content_type_uid`.
* @returns `{ "data-csvariants": "<JSON string of VariantAliasesResult[]>" }`.
* @throws TypeError if `entries` is null/undefined or not an array, or any element is not a plain object.
* @throws Error if any entry has no non-empty `uid`.
*/
export function getVariantMetadataTags(entries, contentTypeUid) {
if (entries === null || entries === undefined) {
throw new TypeError('Entries array is required. Provide an array of CDA entry objects.');
}
if (!Array.isArray(entries)) {
throw new TypeError('Entries must be an array of CDA entry objects.');
}
var payload = getVariantAliases(entries, contentTypeUid);
return { 'data-csvariants': JSON.stringify(payload) };
}
//# sourceMappingURL=variant-aliases.js.map