UNPKG

@datocms/cma-client

Version:
93 lines 4.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isLocalizedSingleBlockFieldValueInNestedResponse = exports.isSingleBlockFieldValueInNestedResponse = exports.isLocalizedSingleBlockFieldValueInRequest = exports.isSingleBlockFieldValueInRequest = exports.isLocalizedSingleBlockFieldValue = exports.isSingleBlockFieldValue = exports.isItemWithOptionalMeta = exports.isItemWithOptionalIdAndMeta = exports.isItemId = void 0; const id_1 = require("../utilities/id"); const normalizedFieldValues_1 = require("../utilities/normalizedFieldValues"); /** * ============================================================================= * SHARED UTILITY FUNCTIONS * ============================================================================= * These functions are used internally and can be imported by other modules */ /** * Validates if the input is a valid item (either block or record) ID */ function isItemId(input) { return typeof input === 'string'; } exports.isItemId = isItemId; /** * Validates if the input is a RawApiTypes.Item object (with optional `id` and `meta`) */ function isItemWithOptionalIdAndMeta(block) { return (typeof block === 'object' && block !== null && 'type' in block && block.type === 'item' && 'attributes' in block && 'relationships' in block); } exports.isItemWithOptionalIdAndMeta = isItemWithOptionalIdAndMeta; /** * Validates if the input is a a complete RawApiTypes.Item object with optional `meta` */ function isItemWithOptionalMeta(block) { return (isItemWithOptionalIdAndMeta(block) && 'id' in block && typeof block.id === 'string'); } exports.isItemWithOptionalMeta = isItemWithOptionalMeta; /** * ============================================================================= * TYPE GUARDS - Runtime validation functions * ============================================================================= */ /** * Type guard for basic Single Block field values (block as string ID only). * Checks for string structure and ensures block is a string reference. */ function isSingleBlockFieldValue(value) { return (typeof value === 'string' && (0, id_1.isValidId)(value)) || value === null; } exports.isSingleBlockFieldValue = isSingleBlockFieldValue; function isLocalizedSingleBlockFieldValue(value) { return ((0, normalizedFieldValues_1.isLocalizedFieldValue)(value) && Object.values(value).every(isSingleBlockFieldValue)); } exports.isLocalizedSingleBlockFieldValue = isLocalizedSingleBlockFieldValue; /** * Type guard for Single Block field values in API request format. * Allows block as string ID, full object with ID, or object without ID. */ function isSingleBlockFieldValueInRequest(value) { if (value === null) return true; // String ID - referencing existing block if (isItemId(value)) return true; // Object (either with or without ID for updates/creation) return isItemWithOptionalIdAndMeta(value); } exports.isSingleBlockFieldValueInRequest = isSingleBlockFieldValueInRequest; function isLocalizedSingleBlockFieldValueInRequest(value) { return ((0, normalizedFieldValues_1.isLocalizedFieldValue)(value) && Object.values(value).every(isSingleBlockFieldValueInRequest)); } exports.isLocalizedSingleBlockFieldValueInRequest = isLocalizedSingleBlockFieldValueInRequest; /** * Type guard for Single Block field values with nested blocks (?nested=true format). * Ensures block is a full RawApiTypes.Item object with complete data. */ function isSingleBlockFieldValueInNestedResponse(value) { if (value === null) return true; // Must be a full object with ID (nested format always includes complete block objects) return isItemWithOptionalMeta(value); } exports.isSingleBlockFieldValueInNestedResponse = isSingleBlockFieldValueInNestedResponse; function isLocalizedSingleBlockFieldValueInNestedResponse(value) { return ((0, normalizedFieldValues_1.isLocalizedFieldValue)(value) && Object.values(value).every(isSingleBlockFieldValueInNestedResponse)); } exports.isLocalizedSingleBlockFieldValueInNestedResponse = isLocalizedSingleBlockFieldValueInNestedResponse; //# sourceMappingURL=single_block.js.map