UNPKG

contentful-management

Version:
105 lines (100 loc) 3.35 kB
/* eslint-disable @typescript-eslint/no-explicit-any */ import { freezeSys, toPlainObject } from 'contentful-sdk-core'; import copy from 'fast-copy'; import { ScheduledActionReferenceFilters } from '../common-types'; import { wrapCursorPaginatedCollection } from '../common-utils'; import enhanceWithMethods from '../enhance-with-methods'; import { wrapReleaseAction } from './release-action'; /** Entity types supported by the Release API */ export const ReleaseReferenceFilters = ScheduledActionReferenceFilters; /** The object returned by the Releases API */ /** * @private */ function createReleaseApi(makeRequest) { const getParams = self => { const release = self.toPlainObject(); return { spaceId: release.sys.space.sys.id, environmentId: release.sys.environment.sys.id, releaseId: release.sys.id, version: release.sys.version }; }; return { async archive() { const params = getParams(this); return makeRequest({ entityType: 'Release', action: 'archive', params }).then(release => wrapRelease(makeRequest, release)); }, async unarchive() { const params = getParams(this); return makeRequest({ entityType: 'Release', action: 'unarchive', params }).then(release => wrapRelease(makeRequest, release)); }, async update(payload) { const params = getParams(this); return makeRequest({ entityType: 'Release', action: 'update', params, payload }).then(release => wrapRelease(makeRequest, release)); }, async delete() { const params = getParams(this); await makeRequest({ entityType: 'Release', action: 'delete', params }); }, async publish(options) { const params = getParams(this); return makeRequest({ entityType: 'Release', action: 'publish', params }).then(data => wrapReleaseAction(makeRequest, data)).then(action => action.waitProcessing(options)); }, async unpublish(options) { const params = getParams(this); return makeRequest({ entityType: 'Release', action: 'unpublish', params }).then(data => wrapReleaseAction(makeRequest, data)).then(action => action.waitProcessing(options)); }, async validate(options) { const params = getParams(this); return makeRequest({ entityType: 'Release', action: 'validate', params, payload: options === null || options === void 0 ? void 0 : options.payload }).then(data => wrapReleaseAction(makeRequest, data)).then(action => action.waitProcessing(options === null || options === void 0 ? void 0 : options.processingOptions)); } }; } /** * Return a Release object enhanced with its own API helper functions. * @private * @param makeRequest - function to make requests via an adapter * @param data - Raw Release data * @return Wrapped Release data */ export function wrapRelease(makeRequest, data) { const release = toPlainObject(copy(data)); const releaseWithApiMethods = enhanceWithMethods(release, createReleaseApi(makeRequest)); return freezeSys(releaseWithApiMethods); } /** * @private */ export const wrapReleaseCollection = wrapCursorPaginatedCollection(wrapRelease);