UNPKG

@contentstack/utils

Version:
86 lines 3.32 kB
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