@russ-b/nestjs-common-tools
Version:
NestJS utility tools
86 lines • 2.83 kB
JavaScript
;
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