contentful-management
Version:
Client for Contentful's Content Management API
108 lines (105 loc) • 3.67 kB
JavaScript
import { toPlainObject, freezeSys } from 'contentful-sdk-core';
import copy from 'fast-copy';
import '../common-types.js';
import { wrapCursorPaginatedCollection } from '../common-utils.js';
import enhanceWithMethods from '../enhance-with-methods.js';
import { wrapReleaseAction } from './release-action.js';
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* @internal
*/
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?.payload,
})
.then((data) => wrapReleaseAction(makeRequest, data))
.then((action) => action.waitProcessing(options?.processingOptions));
},
};
}
/**
* Return a Release object enhanced with its own API helper functions.
* @internal
* @param makeRequest - function to make requests via an adapter
* @param data - Raw Release data
* @returns Wrapped Release data
*/
function wrapRelease(makeRequest, data) {
const release = toPlainObject(copy(data));
const releaseWithApiMethods = enhanceWithMethods(release, createReleaseApi(makeRequest));
return freezeSys(releaseWithApiMethods);
}
/**
* @internal
*/
const wrapReleaseCollection = wrapCursorPaginatedCollection(wrapRelease);
export { wrapRelease, wrapReleaseCollection };
//# sourceMappingURL=release.js.map