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;
}