UNPKG

contensis-delivery-api

Version:

Client for retrieving content using the read-only Contensis Delivery API

205 lines (204 loc) 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeOperations = void 0; const contensis_core_api_1 = require("contensis-core-api"); const nodeDefaultOptionsMappers = { language: contensis_core_api_1.defaultMapperForLanguage, versionStatus: contensis_core_api_1.defaultMapperForPublishedVersionStatus, entryFields: (value) => (value && value.length > 0 ? value : null), entryLinkDepth: (value) => (value && value > 0 ? value : null), entryFieldLinkDepths: (value) => Object.keys(value || {}).length > 0 ? JSON.stringify(value) : null, }; const nodeDefaultWithDepthOptionsMappers = Object.assign(Object.assign({}, nodeDefaultOptionsMappers), { depth: (value) => (value && (value > 0)) ? value : null }); const nodeGetByPathOptions = Object.assign(Object.assign({}, nodeDefaultWithDepthOptionsMappers), { allowPartialMatch: (value) => (!!value) ? true : null }); const nodeGetByEntryOptions = Object.assign(Object.assign({}, nodeDefaultWithDepthOptionsMappers), { canonicalOnly: (value) => value ? true : null, entryId: (value) => value ? value : null }); const nodeGetAncestorAtLevelOptionsMappers = Object.assign(Object.assign({}, nodeDefaultWithDepthOptionsMappers), { startLevel: (value) => (value && (value > 0)) ? value : null }); const nodeGetAncestorsOptionsMappers = Object.assign(Object.assign({}, nodeDefaultOptionsMappers), { startLevel: (value) => (value && (value > 0)) ? value : null }); class NodeOperations { constructor(httpClient, contensisClient) { this.httpClient = httpClient; this.contensisClient = contensisClient; if (!this.httpClient || !this.contensisClient) { throw new Error('The class was not initialised correctly.'); } } async getRoot(options) { const url = contensis_core_api_1.UrlBuilder.create('/api/delivery/projects/:projectId/nodes/root', { language: null, depth: null, versionStatus: null, entryFields: null, entryLinkDepth: null, entryFieldLinkDepths: null }) .addOptions(options) .setParams(this.contensisClient.getParams()) .addMappers(nodeDefaultWithDepthOptionsMappers) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } async get(idOrPathOrOptions) { const validationMessage = 'A valid node id or path needs to be specified.'; if (((0, contensis_core_api_1.isString)(idOrPathOrOptions) && !idOrPathOrOptions) || (typeof idOrPathOrOptions === 'object' && (idOrPathOrOptions === null || (!idOrPathOrOptions.id && !idOrPathOrOptions.path)))) { throw new Error(validationMessage); } const isPath = ((0, contensis_core_api_1.isString)(idOrPathOrOptions) && idOrPathOrOptions.startsWith('/')) || (!!idOrPathOrOptions && !!idOrPathOrOptions.path); const urlTemplate = isPath ? '/api/delivery/projects/:projectId/nodes:path' : '/api/delivery/projects/:projectId/nodes/:id'; const url = contensis_core_api_1.UrlBuilder.create(urlTemplate, { language: null, depth: null, versionStatus: null, entryFields: null, entryLinkDepth: null, entryFieldLinkDepths: null, allowPartialMatch: null }) .addOptions(idOrPathOrOptions, isPath ? 'path' : 'id') .setParams(this.contensisClient.getParams()) .addMappers(nodeGetByPathOptions) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } async getByEntry(entryIdOrEntryOrOptions) { const validationMessage = 'A valid entry id needs to be specified.'; if ((0, contensis_core_api_1.isString)(entryIdOrEntryOrOptions) && !entryIdOrEntryOrOptions) { throw new Error(validationMessage); } if (typeof entryIdOrEntryOrOptions === 'object') { if (entryIdOrEntryOrOptions === null) { throw new Error(validationMessage); } if (!entryIdOrEntryOrOptions.entryId && (!entryIdOrEntryOrOptions.entry || !entryIdOrEntryOrOptions.entry.sys || !entryIdOrEntryOrOptions.entry.sys.id) && (!entryIdOrEntryOrOptions.sys || !entryIdOrEntryOrOptions.sys.id)) { throw new Error(validationMessage); } } let entryId = null; if ((0, contensis_core_api_1.isString)(entryIdOrEntryOrOptions)) { entryId = entryIdOrEntryOrOptions; } else if (typeof entryIdOrEntryOrOptions === 'object') { if (!!entryIdOrEntryOrOptions.sys) { entryId = entryIdOrEntryOrOptions.sys.id; } if (!!entryIdOrEntryOrOptions.entry && !!entryIdOrEntryOrOptions.entry.sys) { entryId = entryIdOrEntryOrOptions.entry.sys.id; } } const url = contensis_core_api_1.UrlBuilder .create('/api/delivery/projects/:projectId/nodes/', { canonicalOnly: null, depth: null, entryFields: null, entryFieldLinkDepths: null, entryLinkDepth: null, entryId: null, language: null, versionStatus: null }) .addOptions(entryId, 'entryId') .addOptions(entryIdOrEntryOrOptions) .setParams(this.contensisClient.getParams()) .addMappers(nodeGetByEntryOptions) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } async getChildren(idOrNodeOrOptions) { this.validateNodeId(idOrNodeOrOptions); const nodeId = this.getNodeIdFromOptions(idOrNodeOrOptions); const url = contensis_core_api_1.UrlBuilder .create('/api/delivery/projects/:projectId/nodes/:id/children', { language: null, versionStatus: null, entryFields: null, entryLinkDepth: null, entryFieldLinkDepths: null }) .addOptions(nodeId, 'id') .addOptions(idOrNodeOrOptions) .setParams(this.contensisClient.getParams()) .addMappers(nodeDefaultOptionsMappers) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } async getParent(idOrNodeOrOptions) { this.validateNodeId(idOrNodeOrOptions); const nodeId = this.getNodeIdFromOptions(idOrNodeOrOptions); const url = contensis_core_api_1.UrlBuilder .create('/api/delivery/projects/:projectId/nodes/:id/parent', { language: null, depth: null, versionStatus: null, entryFields: null, entryLinkDepth: null, entryFieldLinkDepths: null }) .addOptions(nodeId, 'id') .addOptions(idOrNodeOrOptions) .setParams(this.contensisClient.getParams()) .addMappers(nodeDefaultWithDepthOptionsMappers) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } async getAncestorAtLevel(options) { this.validateNodeId(options); const nodeId = this.getNodeIdFromOptions(options); const url = contensis_core_api_1.UrlBuilder .create('/api/delivery/projects/:projectId/nodes/:id/ancestors', { language: null, startLevel: null, depth: null, versionStatus: null, entryFields: null, entryLinkDepth: null, entryFieldLinkDepths: null }) .addOptions(nodeId, 'id') .addOptions(options) .setParams(this.contensisClient.getParams()) .addMappers(nodeGetAncestorAtLevelOptionsMappers) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } async getAncestors(idOrNodeOrOptions) { this.validateNodeId(idOrNodeOrOptions); const nodeId = this.getNodeIdFromOptions(idOrNodeOrOptions); const url = contensis_core_api_1.UrlBuilder .create('/api/delivery/projects/:projectId/nodes/:id/ancestors', { language: null, startLevel: null, versionStatus: null, entryFields: null, entryLinkDepth: null, entryFieldLinkDepths: null }) .addOptions(nodeId, 'id') .addOptions(idOrNodeOrOptions) .setParams(this.contensisClient.getParams()) .addMappers(nodeGetAncestorsOptionsMappers) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } async getSiblings(idOrNodeOrOptions) { this.validateNodeId(idOrNodeOrOptions); const nodeId = this.getNodeIdFromOptions(idOrNodeOrOptions); const url = contensis_core_api_1.UrlBuilder .create('/api/delivery/projects/:projectId/nodes/:id/siblings', { language: null, versionStatus: null, entryFields: null, entryLinkDepth: null, entryFieldLinkDepths: null }) .addOptions(nodeId, 'id') .addOptions(idOrNodeOrOptions) .setParams(this.contensisClient.getParams()) .addMappers(nodeDefaultOptionsMappers) .toUrl(); await this.contensisClient.ensureIsAuthorized(); return await this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); } validateNodeId(idOrNodeOrOptions) { const validationMessage = 'A valid node id needs to be specified.'; if ((0, contensis_core_api_1.isString)(idOrNodeOrOptions) && !idOrNodeOrOptions) { throw new Error(validationMessage); } if (typeof idOrNodeOrOptions === 'object') { if (idOrNodeOrOptions === null) { throw new Error(validationMessage); } if (!idOrNodeOrOptions.id && (!idOrNodeOrOptions.node || !idOrNodeOrOptions.node.id)) { throw new Error(validationMessage); } } } getNodeIdFromOptions(idOrNodeOrOptions) { let nodeId = null; if ((0, contensis_core_api_1.isString)(idOrNodeOrOptions)) { nodeId = idOrNodeOrOptions; } else if (typeof idOrNodeOrOptions === 'object') { if (!!idOrNodeOrOptions.id) { nodeId = idOrNodeOrOptions.id; } else if (!!idOrNodeOrOptions.node) { nodeId = idOrNodeOrOptions.node.id; } } return nodeId; } } exports.NodeOperations = NodeOperations;