UNPKG

@datocms/cma-client

Version:
58 lines 2.41 kB
import { isValidId } from '../utilities/id.js'; import { isLocalizedFieldValue, } from '../utilities/normalizedFieldValues.js'; import { isBlockObjectInRequest, isItemId, isItemWithOptionalMeta, } from './single_block.js'; /** * ============================================================================= * TYPE GUARDS - Runtime validation functions * ============================================================================= */ /** * Type guard for basic Modular Content field values (blocks as string IDs only). * Checks for array structure and ensures all blocks are string references. */ export function isRichTextFieldValue(value) { return (Array.isArray(value) && value.every((block) => typeof block === 'string' && isValidId(block))); } export function isLocalizedRichTextFieldValue(value) { return (isLocalizedFieldValue(value) && Object.values(value).every(isRichTextFieldValue)); } /** * Type guard for Modular Content field values in API request format. * Allows blocks as string IDs, full objects with IDs, or objects without IDs. */ export function isRichTextFieldValueInRequest(value) { if (value === null) return true; if (!Array.isArray(value)) return false; return value.every((block) => { // String ID - referencing existing block if (isItemId(block)) return true; // Object (new, updated, or id-only update — with or without `relationships`) return isBlockObjectInRequest(block); }); } export function isLocalizedRichTextFieldValueInRequest(value) { return (isLocalizedFieldValue(value) && Object.values(value).every(isRichTextFieldValueInRequest)); } /** * Type guard for Modular Content field values with nested blocks (?nested=true format). * Ensures all blocks are full RawApiTypes.Item objects with complete data. */ export function isRichTextFieldValueInNestedResponse(value) { if (!Array.isArray(value)) return false; return value.every((block) => { // Must be a full object with ID (nested format always includes complete block objects) return isItemWithOptionalMeta(block); }); } export function isLocalizedRichTextFieldValueInNestedResponse(value) { return (isLocalizedFieldValue(value) && Object.values(value).every(isRichTextFieldValueInNestedResponse)); } //# sourceMappingURL=rich_text.js.map