public toDeviceResource()

in source/packages/services/assetlibrary-export/src/devices/devices.assembler.ts [224:302]


    public toDeviceResource(item: DeviceItem, version: string): DeviceBaseResource {
        logger.silly(
            `device.assembler toDeviceResource: in: item: ${JSON.stringify(
                item
            )}, version:${version}`
        );

        if (item === undefined) {
            logger.silly(`device.assembler toDeviceResource: exit: item: undefined`);
            return undefined;
        }

        let resource: DeviceBaseResource;
        if (version.startsWith('1.')) {
            // v1 specific...
            resource = new Device10Resource();
            const typedResource: Device10Resource = resource;

            // populate version specific device info
            if (item.groups) {
                typedResource.groups = {};
                if (item.groups.in) {
                    Object.keys(item.groups.in).forEach((rel) => {
                        typedResource.groups[rel] = item.groups.in[rel];
                    });
                }
                if (item.groups.out) {
                    Object.keys(item.groups.out).forEach((rel) => {
                        if (typedResource.groups[rel]) {
                            typedResource.groups[rel].push(...item.groups.out[rel]);
                        } else {
                            typedResource.groups[rel] = item.groups.out[rel];
                        }
                    });
                }
            } else {
                delete typedResource.groups;
            }
            if (item.devices) {
                typedResource.devices = {};
                if (item.devices.in) {
                    Object.keys(item.devices.in).forEach((rel) => {
                        typedResource.devices[rel] = item.devices.in[rel];
                    });
                }
                if (item.devices.out) {
                    Object.keys(item.devices.out).forEach((rel) => {
                        if (typedResource.devices[rel]) {
                            typedResource.devices[rel].push(...item.devices.out[rel]);
                        } else {
                            typedResource.devices[rel] = item.devices.out[rel];
                        }
                    });
                }
            } else {
                delete typedResource.devices;
            }
        } else {
            // v2 specific...
            resource = new Device20Resource();
            const typedResource: Device20Resource = resource;

            // populate version specific device info)
            typedResource.groups = item.groups;
            typedResource.devices = item.devices;
        }

        // common properties
        Object.keys(item).forEach((key) => {
            if (key !== 'groups' && key !== 'devices') {
                resource[key] = item[key];
            }
        });

        logger.silly(
            `device.assembler toDeviceResource: exit: resource: ${JSON.stringify(resource)}`
        );
        return resource;
    }