contentful-management
Version:
Client for Contentful's Content Management API
105 lines (100 loc) • 3.35 kB
JavaScript
/* 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);