@datocms/cma-client
Version:
JS client for DatoCMS REST Content Management API
93 lines • 4.26 kB
JavaScript
;
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