UNPKG

@russ-b/nestjs-common-tools

Version:
86 lines 2.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StructTransformer = void 0; class StructTransformer { static toStruct(obj) { const fields = {}; Object.entries(obj).forEach(([key, value]) => (fields[key] = StructTransformer.toStructField(value))); return { fields, }; } static toStructField(value) { if (value === null || value === undefined) { return { nullValue: 0 }; } if (typeof value === 'string') { return { stringValue: value }; } if (typeof value === 'number') { return { numberValue: value }; } if (typeof value === 'boolean') { return { boolValue: value }; } if (Array.isArray(value)) { return { listValue: { values: value.map((v) => StructTransformer.toStructField(v)), }, }; } if (typeof value === 'object') { return { structValue: StructTransformer.toStruct(value), }; } return value; } static toObject(value) { if (value === undefined || value === null) { return value; } if (StructTransformer.isStruct(value) && value?.fields) { const result = {}; Object.entries(value.fields).forEach(([key, value]) => (result[key] = StructTransformer.extractValue(value))); return result; } if (Array.isArray(value)) { return value.map((item) => StructTransformer.toObject(item)); } if (typeof value === 'object') { const result = {}; for (const [key, field] of Object.entries(value)) { result[key] = StructTransformer.toObject(field); } return result; } return value; } static isStruct(value) { return value && typeof value === 'object' && value?.fields; } static extractValue(field) { if (field?.stringValue !== undefined) { return field.stringValue; } if (field?.numberValue !== undefined) { return field.numberValue; } if (field?.boolValue !== undefined) { return field.boolValue; } if (field?.structValue !== undefined) { return StructTransformer.toObject(field.structValue); } if (field?.nullValue !== undefined) { return null; } if (field?.listValue) { return field.listValue?.values?.map((item) => StructTransformer.extractValue(item)); } return null; } } exports.StructTransformer = StructTransformer; //# sourceMappingURL=struct.transformer.js.map