{"code":"import { StreamDelta, StreamOutputUnitsDelta, DeviceLocationDelta, StreamInputUnitsDelta, StreamLabelDelta, DeviceLabelDelta, StreamMDODelta, DeviceDrifterDelta } from \"../models\";\r\nimport { DeltaStatus } from \"../base/model-delta\";\r\nimport { DataConflictError, streamInDevice } from \"./cloud-utils\";\r\nimport { endsWith, UnknownKeyError } from \"@iotile/iotile-common\";\r\nvar merge = require('lodash.merge');\r\nvar ProjectOverlay = /** @class */ (function () {\r\n    function ProjectOverlay(deltas) {\r\n        if (deltas === void 0) { deltas = []; }\r\n        this.deltaMap = { stream: {}, device: {} };\r\n        this.deserializerMap = {};\r\n        for (var _i = 0, deltas_1 = deltas; _i < deltas_1.length; _i++) {\r\n            var delta = deltas_1[_i];\r\n            this.addDelta(delta);\r\n        }\r\n        this.loadDeserializers();\r\n    }\r\n    ProjectOverlay.prototype.isEmpty = function () {\r\n        var streamKeys = Object.keys(this.deltaMap.stream);\r\n        var deviceKeys = Object.keys(this.deltaMap.device);\r\n        return (streamKeys.length === 0 && deviceKeys.length === 0);\r\n    };\r\n    ProjectOverlay.prototype.toList = function () {\r\n        var deltas = [];\r\n        for (var slug in this.deltaMap.device) {\r\n            for (var id in this.deltaMap.device[slug]) {\r\n                deltas.push(this.deltaMap.device[slug][id]);\r\n            }\r\n        }\r\n        for (var slug in this.deltaMap.stream) {\r\n            for (var id in this.deltaMap.stream[slug]) {\r\n                deltas.push(this.deltaMap.stream[slug][id]);\r\n            }\r\n        }\r\n        return deltas;\r\n    };\r\n    ProjectOverlay.prototype.merge = function (overlay) {\r\n        this.addDeltas(overlay.toList());\r\n    };\r\n    ProjectOverlay.prototype.affectedStreamModels = function () {\r\n        return Object.keys(this.deltaMap.stream);\r\n    };\r\n    ProjectOverlay.prototype.affectedDeviceModels = function () {\r\n        return Object.keys(this.deltaMap.device);\r\n    };\r\n    ProjectOverlay.prototype.patchForDevice = function (device) {\r\n        if (!(device.slug in this.deltaMap.device)) {\r\n            return {};\r\n        }\r\n        var patch = {};\r\n        for (var deltaSlug in this.deltaMap.device[device.slug]) {\r\n            var delta = this.deltaMap.device[device.slug][deltaSlug];\r\n            if (delta.check(device) === DeltaStatus.Conflicted) {\r\n                throw new DataConflictError(\"The same setting has also been modified in the cloud, please resync before trying to update.\", \"Conflict in slug: \" + delta.slug + \" guid: \" + delta.id);\r\n            }\r\n            merge(patch, delta.getPatch(device));\r\n        }\r\n        return patch;\r\n    };\r\n    ProjectOverlay.prototype.patchForStream = function (stream) {\r\n        if (stream.slug) {\r\n            if (!(stream.slug in this.deltaMap.stream)) {\r\n                return {};\r\n            }\r\n            var patch = {};\r\n            for (var deltaSlug in this.deltaMap.stream[stream.slug]) {\r\n                var delta = this.deltaMap.stream[stream.slug][deltaSlug];\r\n                if (delta.check(stream) === DeltaStatus.Conflicted) {\r\n                    throw new DataConflictError(\"The same setting has also been modified in the cloud, please resync before trying to update.\", \"Conflict in slug: \" + delta.slug + \" guid: \" + delta.id);\r\n                }\r\n                merge(patch, delta.getPatch(stream));\r\n            }\r\n            return patch;\r\n        }\r\n        else {\r\n            throw new UnknownKeyError(\"Cannot patch stream with unknown slug\");\r\n        }\r\n    };\r\n    /*\r\n        * Return true if a device is directly modified or if one of its streams is modified\r\n        */\r\n    ProjectOverlay.prototype.deviceModified = function (deviceSlug) {\r\n        if (deviceSlug in this.deltaMap.device) {\r\n            return true;\r\n        }\r\n        for (var streamSlug in this.deltaMap.stream) {\r\n            var delta = this.deltaMap.stream[streamSlug];\r\n            if (streamInDevice(streamSlug, deviceSlug)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    ProjectOverlay.prototype.deviceHasDelta = function (deviceSlug, deltaName) {\r\n        if (!(deviceSlug in this.deltaMap.device)) {\r\n            return false;\r\n        }\r\n        return deltaName in this.deltaMap.device[deviceSlug];\r\n    };\r\n    ProjectOverlay.prototype.variableModified = function (variableLid) {\r\n        for (var slug in this.deltaMap.stream) {\r\n            if (endsWith(slug, variableLid)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    ProjectOverlay.prototype.loadDeserializers = function () {\r\n        this.deserializerMap = {};\r\n        //Stream Deserializers\r\n        this.deserializerMap[StreamOutputUnitsDelta.ClassName] = StreamOutputUnitsDelta.Deserialize;\r\n        this.deserializerMap[StreamInputUnitsDelta.ClassName] = StreamInputUnitsDelta.Deserialize;\r\n        this.deserializerMap[StreamLabelDelta.ClassName] = StreamLabelDelta.Deserialize;\r\n        this.deserializerMap[StreamMDODelta.ClassName] = StreamMDODelta.Deserialize;\r\n        //Device Deserializers\r\n        this.deserializerMap[DeviceLabelDelta.ClassName] = DeviceLabelDelta.Deserialize;\r\n        this.deserializerMap[DeviceLocationDelta.ClassName] = DeviceLocationDelta.Deserialize;\r\n        this.deserializerMap[DeviceDrifterDelta.ClassName] = DeviceDrifterDelta.Deserialize;\r\n    };\r\n    ProjectOverlay.prototype.prune = function (project) {\r\n        for (var slug in this.deltaMap.stream) {\r\n            var deltas = this.deltaMap.stream[slug];\r\n            var stream = project.getStream(slug, true);\r\n            //If the stream doesn't exist, all deltas are obsolete\r\n            if (stream == null) {\r\n                delete this.deltaMap.stream[slug];\r\n                continue;\r\n            }\r\n            for (var guid in deltas) {\r\n                var delta = deltas[guid];\r\n                if (delta.check(stream) !== DeltaStatus.Applies) {\r\n                    delete deltas[guid];\r\n                }\r\n            }\r\n            //If we have removed all of the stream deltas, also remove the stream\r\n            if (Object.keys(deltas).length == 0) {\r\n                delete this.deltaMap.stream[slug];\r\n            }\r\n        }\r\n        for (var slug in this.deltaMap.device) {\r\n            var deltas = this.deltaMap.device[slug];\r\n            var device = project.getDevice(slug, true);\r\n            //If the device doesn't exist, all deltas are obsolete\r\n            if (device == null) {\r\n                delete this.deltaMap.device[slug];\r\n                continue;\r\n            }\r\n            for (var guid in deltas) {\r\n                var delta = deltas[guid];\r\n                if (delta.check(device) !== DeltaStatus.Applies) {\r\n                    delete deltas[guid];\r\n                }\r\n            }\r\n            //If we have removed all of the device deltas, also remove the device\r\n            if (Object.keys(deltas).length == 0) {\r\n                delete this.deltaMap.device[slug];\r\n            }\r\n        }\r\n    };\r\n    ProjectOverlay.prototype.applyDevice = function (device, markModified) {\r\n        var deltas = this.deltaMap.device[device.slug];\r\n        if (deltas == null) {\r\n            return;\r\n        }\r\n        for (var guid in deltas) {\r\n            var delta = deltas[guid];\r\n            if (delta.check(device) === DeltaStatus.Applies) {\r\n                delta.apply(device);\r\n                if (markModified) {\r\n                    device.isModified = true;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ProjectOverlay.prototype.applyStream = function (stream, markModified) {\r\n        if (stream.slug) {\r\n            var deltas = this.deltaMap.stream[stream.slug];\r\n            if (deltas == null) {\r\n                return;\r\n            }\r\n            for (var guid in deltas) {\r\n                var delta = deltas[guid];\r\n                if (delta.check(stream) === DeltaStatus.Applies) {\r\n                    delta.apply(stream);\r\n                    if (markModified) {\r\n                        stream.isModified = true;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ProjectOverlay.prototype.addDelta = function (delta) {\r\n        var subMap = this.deltaMap.device;\r\n        var slug = delta.slug;\r\n        if (delta instanceof StreamDelta) {\r\n            subMap = this.deltaMap.stream;\r\n        }\r\n        if (!(slug in subMap)) {\r\n            subMap[slug] = {};\r\n        }\r\n        subMap[slug][delta.classname] = delta;\r\n    };\r\n    ProjectOverlay.prototype.addDeltas = function (deltas) {\r\n        for (var _i = 0, deltas_2 = deltas; _i < deltas_2.length; _i++) {\r\n            var delta = deltas_2[_i];\r\n            this.addDelta(delta);\r\n        }\r\n    };\r\n    ProjectOverlay.prototype.serialize = function () {\r\n        var obj = {};\r\n        for (var slug in this.deltaMap.stream) {\r\n            var streamDeltas = this.deltaMap.stream[slug];\r\n            obj[slug] = {};\r\n            for (var id in streamDeltas) {\r\n                obj[slug][id] = streamDeltas[id].serialize();\r\n            }\r\n        }\r\n        for (var slug in this.deltaMap.device) {\r\n            var deviceDeltas = this.deltaMap.device[slug];\r\n            obj[slug] = {};\r\n            for (var id in deviceDeltas) {\r\n                obj[slug][id] = deviceDeltas[id].serialize();\r\n            }\r\n        }\r\n        return obj;\r\n    };\r\n    ProjectOverlay.prototype.deserialize = function (obj, log) {\r\n        for (var slug in obj) {\r\n            var deltas = obj[slug];\r\n            for (var className in deltas) {\r\n                var serializedDelta = deltas[className];\r\n                var guid = serializedDelta.guid;\r\n                var slug_1 = serializedDelta.slug;\r\n                if (!(className in this.deserializerMap)) {\r\n                    if (log) {\r\n                        log.warn(\"[ProjectOverlay] Skipping unknown delta type in overlay, type: \" + className + ' slug: ' + slug_1);\r\n                    }\r\n                    continue;\r\n                }\r\n                var delta = this.deserializerMap[className](guid, slug_1, serializedDelta.args);\r\n                this.addDelta(delta);\r\n            }\r\n        }\r\n    };\r\n    ProjectOverlay.Deserialize = function (obj, log) {\r\n        var overlay = new ProjectOverlay();\r\n        overlay.deserialize(obj, log);\r\n        return overlay;\r\n    };\r\n    return ProjectOverlay;\r\n}());\r\nexport { ProjectOverlay };\r\n//# sourceMappingURL=project-overlay.js.map","map":{"version":3,"file":"project-overlay.js","sourceRoot":"","sources":["../src/cloud/project-overlay.ts"],"names":[],"mappings":"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"},"dts":{"name":"/Users/jheadley/Documents/GitHub/ts-iotile-cloud/cloud/project-overlay.d.ts","text":"import { StreamDelta, DeviceDelta, Device, Stream, Project } from \"../models\";\r\nimport { SerializedDelta } from \"../base/model-delta\";\r\nimport { Category } from \"typescript-logging\";\r\nexport interface SerializedOverlay {\r\n    [key: string]: {\r\n        [key: string]: SerializedDelta;\r\n    };\r\n}\r\nexport declare class ProjectOverlay {\r\n    private deltaMap;\r\n    private deserializerMap;\r\n    constructor(deltas?: (StreamDelta | DeviceDelta)[]);\r\n    isEmpty(): boolean;\r\n    toList(): (StreamDelta | DeviceDelta)[];\r\n    merge(overlay: ProjectOverlay): void;\r\n    affectedStreamModels(): string[];\r\n    affectedDeviceModels(): string[];\r\n    patchForDevice(device: Device): {};\r\n    patchForStream(stream: Stream): {};\r\n    deviceModified(deviceSlug: string): boolean;\r\n    deviceHasDelta(deviceSlug: string, deltaName: string): boolean;\r\n    variableModified(variableLid: string): boolean;\r\n    private loadDeserializers;\r\n    prune(project: Project): void;\r\n    applyDevice(device: Device, markModified: boolean): void;\r\n    applyStream(stream: Stream, markModified: boolean): void;\r\n    addDelta(delta: StreamDelta | DeviceDelta): void;\r\n    addDeltas(deltas: (StreamDelta | DeviceDelta)[]): void;\r\n    serialize(): SerializedOverlay;\r\n    private deserialize;\r\n    static Deserialize(obj: SerializedOverlay, log?: Category): ProjectOverlay;\r\n}\r\n"}}
