@aurigma/design-atoms
Version:
Design Atoms is a part of Customer's Canvas SDK which allows for manipulating individual design elements through your code.
83 lines • 3.49 kB
JavaScript
import { ProductParser } from "./ProductParser";
import { ModelComponent } from "@aurigma/design-atoms-model/Product/ModelComponent";
import { Color } from "@aurigma/design-atoms-model/Colors";
import { Color as ColorNew } from "@aurigma/design-atoms-model/Colors/Color";
import { Transform } from "@aurigma/design-atoms-model/Math/Transform";
import { Path, SizeF } from "@aurigma/design-atoms-model/Math";
import { SafetyLine } from "@aurigma/design-atoms-model/Product/SafetyLine";
import { Collection } from "@aurigma/design-atoms-model/Collection";
import { OverlayEffect } from "@aurigma/design-atoms-model/Product/Items/OverlayEffect";
import { isObject } from "@aurigma/design-atoms-model/Utils/Utils";
export class JsonProductSerializer {
constructor(additionalConverters) {
this._additionalConverters = Array.isArray(additionalConverters) ? additionalConverters : [];
this.productParser = new ProductParser(additionalConverters);
}
deserialize(json) {
let rawProduct = json;
if (typeof json === "string") {
rawProduct = JSON.parse(json);
}
if (!isObject(rawProduct)) {
return null;
}
return this.productParser.parseProduct(rawProduct);
}
serialize(product, forServer) {
return this.serializeModelComponent(product, forServer);
}
serializeModelComponent(component, forServer) {
var componentReviewer = (key, value) => {
if (value instanceof ModelComponent) {
return value.getSimplifiedObject();
}
if (value instanceof Color) {
return value.getData();
}
if (value instanceof ColorNew) {
return value.getData();
}
if (value instanceof Transform) {
return {
"scaleX": value.scaleX,
"scaleY": value.scaleY,
"translateX": value.translateX,
"translateY": value.translateY,
"angle": value.angle
};
}
if (value instanceof SafetyLine) {
return {
"name": value.name,
"altColor": value.altColor,
"color": value.color,
"margin": value.margin,
"stepPx": value.stepPx,
"widthPx": value.widthPx,
"borderRadius": value.borderRadius,
"pdfBox": value.pdfBox
};
}
if (value instanceof SizeF) {
return `${value.width}, ${value.height}`;
}
if (value instanceof Path) {
return value.toString();
}
if (value instanceof Collection) {
return value.toArray();
}
if (value instanceof OverlayEffect) {
return value.getSimplifiedObject();
}
const converter = this._additionalConverters.find(c => value instanceof c.typeCtor);
if (converter != null) {
value = structuredClone(value);
value["$type"] = converter.type;
}
return value;
};
return JSON.stringify(component, componentReviewer, 2);
}
}
//# sourceMappingURL=JsonProductSerializer.js.map