UNPKG

@sitecore/sc-contenthub-webclient-sdk

Version:

Sitecore Content Hub WebClient SDK.

193 lines 11 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EntityMapper = void 0; const entity_1 = require("../contracts/base/entity"); const entity_construction_args_1 = require("../contracts/base/entity-construction-args"); const guard_1 = __importDefault(require("../guard")); const entity_resource_1 = require("../models/entity-resource"); const property_mapper_1 = require("./property-mapper"); const related_path_mapper_1 = require("./related-path-mapper"); const relation_mapper_1 = require("./relation-mapper"); const rendition_mapper_1 = require("./rendition-mapper"); class EntityMapper { constructor(client) { guard_1.default.notNullOrUndefined(client); this._client = client; this._propertyMapper = new property_mapper_1.PropertyMapper(client); this._relationMapper = new relation_mapper_1.RelationMapper(client); this._renditionMapper = new rendition_mapper_1.RenditionMapper(client); this._relatedPathMapper = new related_path_mapper_1.RelatedPathMapper(); } mapEntityAsync(resource, schema) { return __awaiter(this, void 0, void 0, function* () { var _a; guard_1.default.notNullOrUndefined(resource); // The minimal schema is optional, but we should at least have a definition name. const definitionName = (_a = schema === null || schema === void 0 ? void 0 : schema.definitionName) !== null && _a !== void 0 ? _a : (yield this._client.linkHelper.nameFromDefinitionAsync(resource.entityDefinition)); guard_1.default.notNullOrUndefined(definitionName); guard_1.default.stringNotNullOrEmpty(definitionName); const cultures = new Set(resource.cultures || []); //? Revisit usage of set const properties = yield this._propertyMapper.mapPropertiesAsync(resource, [...cultures], schema); const relations = yield this._relationMapper.mapRelationsAsync(resource, schema); const renditions = this._renditionMapper.mapRenditions(resource.id, resource); //TODO: Extract extension data? const relatedPaths = this._relatedPathMapper.mapRelatedPaths(resource); const args = new entity_construction_args_1.EntityConstructionArgs(definitionName, { id: resource.id || 0, identifier: resource.identifier, cultures: [...cultures], properties: properties, relations: relations, renditions: renditions, relatedPaths: relatedPaths, }); const entity = new entity_1.Entity(this._client, args); yield this.mapBasePropertiesToSdkEntityAsync(resource, entity); entity.startTracking(); //TODO: Extension data return entity; }); } mapEntitiesAsync(collection, schemas) { return __awaiter(this, void 0, void 0, function* () { guard_1.default.notNullOrUndefined(collection, "collection"); guard_1.default.notNullOrUndefined(schemas, "schemas"); const list = []; for (const resource of collection) { if (resource == null) continue; const definitionName = (yield this._client.linkHelper.nameFromDefinitionAsync(resource.entityDefinition)); if (!schemas[definitionName]) { throw Error(`Cannot map entity, missing minimal schema for definition '${definitionName}'.`); } const schema = schemas[definitionName]; const entity = yield this.mapEntityAsync(resource, schema); list.push(entity); } return list; }); } toResourceAsync(entity) { return __awaiter(this, void 0, void 0, function* () { guard_1.default.notNullOrUndefined(entity); const properties = property_mapper_1.PropertyMapper.mapToPropertyResources(entity); const relations = yield this._relationMapper.mapToRelationResourcesAsync(entity); const renditions = this._renditionMapper.mapToResource(entity.renditions); const resource = yield this.createEntityResourceAsync(entity, properties, relations, renditions); return resource; }); } mapDirtiesToResourceAsync(entity) { return __awaiter(this, void 0, void 0, function* () { guard_1.default.notNullOrUndefined(entity); const properties = property_mapper_1.PropertyMapper.mapDirtyProperties(entity); const relations = yield this._relationMapper.mapDirtyRelationsAsync(entity); const renditions = this._renditionMapper.mapToResource(entity.renditions); const resource = yield this.createEntityResourceAsync(entity, properties, relations, renditions); return resource; }); } createEntityResourceAsync(entity, properties, relations, renditions) { return __awaiter(this, void 0, void 0, function* () { const definitionLink = yield this._client.linkHelper.definitionToLinkAsync(entity.definitionName); const entityLink = entity.id ? yield this._client.linkHelper.entityToLinkAsync(entity.id) : undefined; const createdBy = entity.createdBy ? yield this._client.linkHelper.entityToLinkAsync(entity.createdBy) : undefined; const lockedBy = entity.lockedBy ? yield this._client.linkHelper.entityToLinkAsync(entity.lockedBy) : undefined; const modifiedBy = entity.modifiedBy ? yield this._client.linkHelper.entityToLinkAsync(entity.modifiedBy) : undefined; const relatedPaths = this._relatedPathMapper.mapToResource(entity); const resource = new entity_resource_1.EntityResource({ entityDefinition: definitionLink, id: entity.id || 0, identifier: entity.identifier, cultures: entity.cultures.map(x => x), isRootTaxonomyItem: entity.isRootTaxonomyItem, isPathRoot: entity.isPathRoot, inheritsSecurity: entity.inheritsSecurity, isSystemOwned: entity.isSystemOwned, properties: properties, relations: relations, renditions: renditions, isCurrentUserDefault: entity.isCurrentUserDefault, languageSupportedOotb: entity.languageSupportedOotb, hasPublicLink: entity.hasPublicLink, annotationCount: entity.annotationCount, masterFileModifiedOn: entity.masterFileModifiedOn, savedSelectionPageName: entity.savedSelectionPageName, gatewayLinks: entity.gatewayLinks, publicLink: entity.publicLink, publicCollectionLink: entity.publicCollectionLink, isEnabled: entity.isEnabled, modules: entity.modules, roles: entity.roles, permissions: entity.permissions, path: entity.path, relatedPaths: relatedPaths, lockedOn: entity.lockedOn, lockedBy: lockedBy, createdOn: entity.createdOn, createdBy: createdBy, modifiedOn: entity.modifiedOn, modifiedBy: modifiedBy, version: entity.version, self: entityLink, combinedPublishStatus: entity.combinedPublishStatus, combinedPublishStatusDetails: entity.combinedPublishStatusDetails, externalDataIdentifier: entity.externalDataIdentifier, }); return resource; }); } mapBasePropertiesToSdkEntityAsync(resource, entity) { return __awaiter(this, void 0, void 0, function* () { const createdBy = resource.createdBy && (yield this._client.linkHelper.idFromEntityAsync(resource.createdBy)); const lockedBy = resource.lockedBy ? yield this._client.linkHelper.idFromEntityAsync(resource.lockedBy) : null; const modifiedBy = resource.modifiedBy && (yield this._client.linkHelper.idFromEntityAsync(resource.modifiedBy)); //? Create deep copies entity.inheritsSecurity = resource.inheritsSecurity; entity.isSystemOwned = resource.isSystemOwned; entity.lockedOn = resource.lockedOn || null; entity.lockedBy = lockedBy; entity.createdOn = resource.createdOn; entity.createdBy = createdBy || undefined; entity.modifiedOn = resource.modifiedOn; entity.modifiedBy = modifiedBy || undefined; entity.version = resource.version; entity.isPathRoot = resource.isPathRoot; entity.isRootTaxonomyItem = resource.isRootTaxonomyItem; entity.isCurrentUserDefault = resource.isCurrentUserDefault; entity.languageSupportedOotb = resource.languageSupportedOotb; entity.hasPublicLink = resource.hasPublicLink; entity.annotationCount = resource.annotationCount; entity.masterFileModifiedOn = resource.masterFileModifiedOn; entity.savedSelectionPageName = resource.savedSelectionPageName; entity.gatewayLinks = resource.gatewayLinks; entity.publicLink = resource.publicLink; entity.publicCollectionLink = resource.publicCollectionLink; entity.isEnabled = resource.isEnabled; entity.modules = resource.modules; entity.roles = resource.roles; entity.permissions = resource.permissions; entity.path = resource.path; entity.combinedPublishStatus = resource.combinedPublishStatus; entity.combinedPublishStatusDetails = resource.combinedPublishStatusDetails; entity.externalDataIdentifier = resource.externalDataIdentifier; }); } } exports.EntityMapper = EntityMapper; //# sourceMappingURL=entity-mapper.js.map