UNPKG

7.68 kBSource Map (JSON)View Raw
1{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/lib/serialization/serializer.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChildableComponent } from '../utils';\nimport { Component, ComponentClass } from '../utils/component';\nimport { Application } from '../application';\nimport { ProjectReflection } from '../models';\n\nimport { SerializerComponent } from './components';\nimport { SerializeEvent } from './events';\n\n@Component({name: 'serializer', internal: true, childClass: SerializerComponent})\nexport class Serializer extends ChildableComponent<Application, SerializerComponent<any>> {\n\n /**\n * Triggered when the [[Serializer]] begins transforming a project.\n * @event EVENT_BEGIN\n */\n static EVENT_BEGIN = 'begin';\n\n /**\n * Triggered when the [[Serializer]] has finished transforming a project.\n * @event EVENT_END\n */\n static EVENT_END = 'end';\n\n private router!: Map<any, { symbol: any, group: SerializerComponent<any>[] }>;\n private routes!: any[];\n\n initialize(): void {\n this.router = new Map<any, { symbol: any, group: SerializerComponent<any>[] }>();\n this.routes = [];\n }\n\n addComponent<T extends SerializerComponent<any> & Component>(name: string, componentClass: T | ComponentClass<T>): T {\n const component = super.addComponent(name, componentClass);\n\n if (component.serializeGroup && component.serializeGroupSymbol) {\n let match = this.router.get(component.serializeGroup);\n\n if (!match) {\n match = Array.from(this.router.values()).find( v => v.symbol === component.serializeGroupSymbol)\n || { symbol: component.serializeGroupSymbol , group: [] };\n this.router.set(component.serializeGroup, match);\n this.routes.push(component.serializeGroup);\n }\n match.group.push(component);\n match.group.sort((a, b) => (b.priority || 0) - (a.priority || 0));\n }\n\n return component;\n }\n\n /**\n * Remove a child component from the registry.\n * @param name The name the component registered as\n */\n removeComponent(name: string): SerializerComponent<any> | undefined {\n const component = super.removeComponent(name);\n const symbol = component && component.serializeGroupSymbol;\n if (symbol) {\n const values = Array.from(this.router.values());\n for (let i = 0, len = values.length; i < len; i++) {\n const idx = values[i].group.findIndex( o => o === symbol );\n if (idx > -1) {\n values[i].group.splice(idx, 1);\n break;\n }\n }\n }\n return component;\n }\n\n removeAllComponents() {\n super.removeAllComponents();\n\n this.router = new Map<any, { symbol: any, group: SerializerComponent<any>[] }>();\n this.routes = [];\n }\n\n toObject(value: any, obj?: any): any {\n return this.findRoutes(value)\n .reduce( (result, curr) => curr.toObject(value, result), obj);\n }\n\n /**\n * Same as toObject but emits [[ Serializer#EVENT_BEGIN ]] and [[ Serializer#EVENT_END ]] events.\n * @param value\n * @param eventData Partial information to set in the event\n * @return {any}\n */\n projectToObject(value: ProjectReflection, eventData?: { begin?: any, end?: any }): any {\n const eventBegin = new SerializeEvent(Serializer.EVENT_BEGIN, value);\n\n if (eventData && eventData.begin) {\n Object.assign(eventBegin, eventData.begin);\n }\n let project: any = eventBegin.output = {};\n\n this.trigger(eventBegin);\n project = this.toObject(value, project);\n\n const eventEnd = new SerializeEvent(Serializer.EVENT_END, value);\n if (eventData && eventData.end) {\n Object.assign(eventEnd, eventData.end);\n }\n eventEnd.output = project;\n this.trigger(eventEnd);\n\n return project;\n }\n\n private findRoutes(value: any): SerializerComponent<any>[] {\n const routes: SerializerComponent<any>[] = [];\n for (let i = 0, len = this.routes.length; i < len; i++) {\n if (this.routes[i](value)) {\n const serializers = this.router.get(this.routes[i])!.group;\n for (let serializer of serializers) {\n if (serializer.supports(value)) {\n routes.push(serializer);\n }\n }\n }\n }\n return routes;\n }\n}\n"]}
\No newline at end of file