UNPKG

@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
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