UNPKG

contentful-lib-helpers

Version:
100 lines (85 loc) 3.15 kB
import { getTagExists } from './getTagExists.js' import { validateInputs } from './validation/validateInputs.js' import { validateString } from './validation/validateString.js' /** * @param {import("contentful-management/dist/typings/entities/environment").Environment} environment - The Contentful Environment object * @param {string} entryId - The ID of the entry to remove the tag from. * @param {string} tagId - The ID of the tag to remove. * @param {number} [verbosityLevel=1] - 0 = NONE, 1 = ERROR, 2 = DEBUG, 3 = INFO * @returns {Promise<boolean>} - A Promise that resolves with `true` if the tag was removed successfully, or `false` otherwise. * * @example * * Usage: * import contentfulManagement from 'contentful-management' * const environment = await getEnvironment(contentfulManagement, 'access-token', 'space-id', 'environment-id') * const entryId = 'exampleEntryId' * const tagId = 'exampleTagId' * const removed = await removeEntryTag(environment, entryId, tagId, 2) * console.log(removed) // true */ export async function removeEntryTag( environment, entryId, tagId, verbosityLevel = 1 ) { if ( !(await validateInputs(environment, 'getEntry', verbosityLevel)) || !(await validateString(entryId, 'entryId')) || !(await validateString(tagId, 'tagId')) ) { return false } const environmentId = environment?.sys?.id ?? 'unknown' verbosityLevel > 2 && console.log( `##/INFO: Removing tag with ID ${tagId} from entry ${entryId} in environment ${environmentId}` ) const tagExists = await getTagExists(environment, tagId, verbosityLevel) if (!tagExists) { verbosityLevel > 0 && console.error( `@@/ERROR: Tag with ID ${tagId} does not exist in environment ${environmentId}.` ) return false } try { const entry = await environment.getEntry(entryId) if (!entry || !entry.sys || !entry.sys.id) { verbosityLevel > 0 && console.error( `@@/ERROR: The entry parameter with ID ${entryId} must be a valid Contentful entry object.` ) return false } const tagsExisting = entry?.metadata?.tags ?? [] const existingTagIds = tagsExisting.map(tag => tag?.sys?.id) if (!existingTagIds.includes(tagId)) { verbosityLevel > 1 && console.log( `%%/DEBUG: Tag with ID ${tagId} does not exist on entry ${entryId} in environment ${environmentId}` ) return true } if (entry?.metadata?.tags) { entry.metadata.tags = tagsExisting.filter(tag => tag.sys.id !== tagId) await entry.update() verbosityLevel > 1 && console.log( `%%/DEBUG: Tag with ID ${tagId} removed from entry ${entryId} in environment ${environmentId}` ) return true } verbosityLevel > 0 && console.log( `@@/ERROR: Entry ${entryId} in ${environmentId} is empty or tags are missing` ) } catch (error) { verbosityLevel > 0 && console.error( `@@/ERROR: Error removing tag with ID ${tagId} from entry ${entryId} in environment ${environmentId}: ${error}` ) } return false }