UNPKG

node-fractal

Version:

Output complex, flexible, AJAX/RESTful data structures.

90 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Scope = void 0; const _1 = require("."); const transformer_1 = require("./transformer"); class Scope { constructor(manager, resource, scopeIdentifier) { this.scopeIdentifier = null; this.parentScopes = []; this.manager = manager; this.resource = resource; this.scopeIdentifier = scopeIdentifier; } getManager() { return this.manager; } getResource() { return this.resource; } getScopeIdentifier() { return this.scopeIdentifier; } getParentScopes() { return this.parentScopes; } setParentScopes(parentScopes) { this.parentScopes = parentScopes; return this; } getIdentifier(appendIdentifier = null) { const parts = [...this.parentScopes, this.scopeIdentifier, appendIdentifier]; return parts.filter((v) => v !== null).join(','); } embedChildScope(scopeIdentifier, resource) { return this.manager.createData(resource, scopeIdentifier, this); } toObject() { const rawData = this.executeResourceTransformers(); const serializer = this.manager.getSerializer(); const data = this.serializeResourceData(serializer, rawData); const meta = this.serializeResourceMeta(serializer); return Object.assign(Object.assign({}, data), meta); } executeResourceTransformers() { const transformer = this.resource.getTransformer(); const data = this.resource.getData(); if (this.resource instanceof _1.ItemResource) { return this.fireTransformer(transformer, data); } else if (this.resource instanceof _1.CollectionResource) { const ret = []; for (let value of data) { ret.push(this.fireTransformer(transformer, value)); } return ret; } else { throw new Error('Argument resource should be an instance of ItemResource or CollectionResource'); } } fireTransformer(transformer, data) { let transformedData = {}; let includedData = {}; if (transformer instanceof transformer_1.TransformerAbstract) { transformer.setCurrentScope(this); transformedData = transformer.transform(data); includedData = transformer.processIncludedResources(this, data); transformedData = this.manager.getSerializer().mergeIncludes(transformedData, includedData); } else if (typeof transformer === 'function') { transformedData = transformer(data); } return transformedData; } serializeResourceData(serializer, data) { const resourceKey = this.resource.getResourceKey(); if (this.resource instanceof _1.CollectionResource) { return serializer.collection(resourceKey, data); } if (this.resource instanceof _1.ItemResource) { return serializer.item(resourceKey, data); } return serializer.null(); } serializeResourceMeta(serializer) { return serializer.meta(this.resource.getMeta()); } } exports.Scope = Scope; //# sourceMappingURL=scope.js.map