mirror of
https://github.com/penpot/penpot.git
synced 2025-12-11 22:14:05 +01:00
🔧 Autogenerate serialization values for wasm enums (#7296)
* 🔧 Autogenerate serialization values for wasm enums * 🔧 Add serializer values to the wasm api * ✨ Avoid converting to a clojure map the serializer js object * 🔧 Update watch script for autoserialized enums * 🐛 Fix missing serializer values
This commit is contained in:
@@ -1072,10 +1072,35 @@
|
||||
(let [uri (cf/resolve-static-asset "js/render_wasm.js")]
|
||||
(->> (js/dynamicImport (str uri))
|
||||
(p/mcat (fn [module]
|
||||
(let [default (unchecked-get module "default")]
|
||||
(let [default (unchecked-get module "default")
|
||||
serializers #js{:blur-type (unchecked-get module "BlurType")
|
||||
:bool-type (unchecked-get module "BoolType")
|
||||
:font-style (unchecked-get module "FontStyle")
|
||||
:flex-direction (unchecked-get module "FlexDirection")
|
||||
:grid-direction (unchecked-get module "GridDirection")
|
||||
:grow-type (unchecked-get module "GrowType")
|
||||
:align-items (unchecked-get module "AlignItems")
|
||||
:align-self (unchecked-get module "AlignSelf")
|
||||
:align-content (unchecked-get module "AlignContent")
|
||||
:justify-items (unchecked-get module "JustifyItems")
|
||||
:justify-content (unchecked-get module "JustifyContent")
|
||||
:justify-self (unchecked-get module "JustifySelf")
|
||||
:wrap-type (unchecked-get module "WrapType")
|
||||
:grid-track-type (unchecked-get module "GridTrackType")
|
||||
:shadow-style (unchecked-get module "ShadowStyle")
|
||||
:stroke-style (unchecked-get module "StrokeStyle")
|
||||
:stroke-cap (unchecked-get module "StrokeCap")
|
||||
:shape-type (unchecked-get module "Type")
|
||||
:constraint-h (unchecked-get module "ConstraintH")
|
||||
:constraint-v (unchecked-get module "ConstraintV")
|
||||
:sizing (unchecked-get module "Sizing")
|
||||
:vertical-align (unchecked-get module "VerticalAlign")
|
||||
:fill-data (unchecked-get module "RawFillData")
|
||||
:segment-data (unchecked-get module "RawSegmentData")}]
|
||||
(set! wasm/serializers serializers)
|
||||
(default))))
|
||||
(p/fmap (fn [module]
|
||||
(set! wasm/internal-module module)
|
||||
(p/fmap (fn [default]
|
||||
(set! wasm/internal-module default)
|
||||
true))
|
||||
(p/merr (fn [cause]
|
||||
(js/console.error cause)
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS INC
|
||||
|
||||
(ns app.render-wasm.serializers
|
||||
(:require
|
||||
[app.common.uuid :as uuid]
|
||||
[cuerdas.core :as str]))
|
||||
(ns app.render-wasm.serializers
|
||||
(:require
|
||||
[app.common.data :as d]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.render-wasm.wasm :as wasm]
|
||||
[cuerdas.core :as str]))
|
||||
|
||||
(defn u8
|
||||
[value]
|
||||
@@ -56,37 +58,21 @@
|
||||
|
||||
(defn translate-shape-type
|
||||
[type]
|
||||
(case type
|
||||
:frame 0
|
||||
:group 1
|
||||
:bool 2
|
||||
:rect 3
|
||||
:path 4
|
||||
:text 5
|
||||
:circle 6
|
||||
:svg-raw 7
|
||||
:image 8))
|
||||
(let [values (unchecked-get wasm/serializers "shape-type")
|
||||
default (unchecked-get values "rect")]
|
||||
(d/nilv (unchecked-get values (d/name type)) default)))
|
||||
|
||||
(defn translate-stroke-style
|
||||
[stroke-style]
|
||||
(case stroke-style
|
||||
:dotted 1
|
||||
:dashed 2
|
||||
:mixed 3
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "stroke-style")
|
||||
default (unchecked-get values "solid")]
|
||||
(d/nilv (unchecked-get values (d/name stroke-style)) default)))
|
||||
|
||||
(defn translate-stroke-cap
|
||||
[stroke-cap]
|
||||
(case stroke-cap
|
||||
:line-arrow 1
|
||||
:triangle-arrow 2
|
||||
:square-marker 3
|
||||
:circle-marker 4
|
||||
:diamond-marker 5
|
||||
:round 6
|
||||
:square 7
|
||||
0))
|
||||
|
||||
(let [values (unchecked-get wasm/serializers "stroke-cap")
|
||||
default (unchecked-get values "none")]
|
||||
(d/nilv (unchecked-get values (d/name stroke-cap)) default)))
|
||||
|
||||
(defn serialize-path-attrs
|
||||
[svg-attrs]
|
||||
@@ -120,143 +106,99 @@
|
||||
|
||||
(defn translate-constraint-h
|
||||
[type]
|
||||
(case type
|
||||
:left 0
|
||||
:right 1
|
||||
:leftright 2
|
||||
:center 3
|
||||
:scale 4))
|
||||
(let [values (unchecked-get wasm/serializers "constraint-h")
|
||||
default 5] ;; TODO: fix code in rust so we have a proper None variant
|
||||
(d/nilv (unchecked-get values (d/name type)) default)))
|
||||
|
||||
(defn translate-constraint-v
|
||||
[type]
|
||||
(case type
|
||||
:top 0
|
||||
:bottom 1
|
||||
:topbottom 2
|
||||
:center 3
|
||||
:scale 4))
|
||||
(let [values (unchecked-get wasm/serializers "constraint-v")
|
||||
default 5] ;; TODO: fix code in rust so we have a proper None variant
|
||||
(d/nilv (unchecked-get values (d/name type)) default)))
|
||||
|
||||
(defn translate-bool-type
|
||||
[bool-type]
|
||||
(case bool-type
|
||||
:union 0
|
||||
:difference 1
|
||||
:intersection 2
|
||||
:exclude 3
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "bool-type")
|
||||
default (unchecked-get values "union")]
|
||||
(d/nilv (unchecked-get values (d/name bool-type)) default)))
|
||||
|
||||
|
||||
(defn translate-blur-type
|
||||
[blur-type]
|
||||
(case blur-type
|
||||
:layer-blur 1
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "blur-type")
|
||||
default (unchecked-get values "none")]
|
||||
(d/nilv (unchecked-get values (d/name blur-type)) default)))
|
||||
|
||||
(defn translate-layout-flex-dir
|
||||
[flex-dir]
|
||||
(case flex-dir
|
||||
:row 0
|
||||
:row-reverse 1
|
||||
:column 2
|
||||
:column-reverse 3))
|
||||
(let [values (unchecked-get wasm/serializers "flex-direction")]
|
||||
(unchecked-get values (d/name flex-dir))))
|
||||
|
||||
|
||||
(defn translate-layout-grid-dir
|
||||
[flex-dir]
|
||||
(case flex-dir
|
||||
:row 0
|
||||
:column 1))
|
||||
[grid-dir]
|
||||
(let [values (unchecked-get wasm/serializers "grid-direction")]
|
||||
(unchecked-get values (d/name grid-dir))))
|
||||
|
||||
(defn translate-layout-align-items
|
||||
[align-items]
|
||||
(case align-items
|
||||
:start 0
|
||||
:end 1
|
||||
:center 2
|
||||
:stretch 3
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "align-items")
|
||||
default (unchecked-get values "start")]
|
||||
(d/nilv (unchecked-get values (d/name align-items)) default)))
|
||||
|
||||
(defn translate-layout-align-content
|
||||
[align-content]
|
||||
(case align-content
|
||||
:start 0
|
||||
:end 1
|
||||
:center 2
|
||||
:space-between 3
|
||||
:space-around 4
|
||||
:space-evenly 5
|
||||
:stretch 6
|
||||
6))
|
||||
(let [values (unchecked-get wasm/serializers "align-content")
|
||||
default (unchecked-get values "stretch")]
|
||||
(d/nilv (unchecked-get values (d/name align-content)) default)))
|
||||
|
||||
(defn translate-layout-justify-items
|
||||
[justify-items]
|
||||
(case justify-items
|
||||
:start 0
|
||||
:end 1
|
||||
:center 2
|
||||
:stretch 3
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "justify-items")
|
||||
default (unchecked-get values "start")]
|
||||
(d/nilv (unchecked-get values (d/name justify-items)) default)))
|
||||
|
||||
(defn translate-layout-justify-content
|
||||
[justify-content]
|
||||
(case justify-content
|
||||
:start 0
|
||||
:end 1
|
||||
:center 2
|
||||
:space-between 3
|
||||
:space-around 4
|
||||
:space-evenly 5
|
||||
:stretch 6
|
||||
6))
|
||||
(let [values (unchecked-get wasm/serializers "justify-content")
|
||||
default (unchecked-get values "stretch")]
|
||||
(d/nilv (unchecked-get values (d/name justify-content)) default)))
|
||||
|
||||
(defn translate-layout-wrap-type
|
||||
[wrap-type]
|
||||
(case wrap-type
|
||||
:wrap 0
|
||||
:nowrap 1
|
||||
1))
|
||||
(let [values (unchecked-get wasm/serializers "wrap-type")
|
||||
default (unchecked-get values "nowrap")]
|
||||
(d/nilv (unchecked-get values (d/name wrap-type)) default)))
|
||||
|
||||
|
||||
(defn translate-grid-track-type
|
||||
[type]
|
||||
(case type
|
||||
:percent 0
|
||||
:flex 1
|
||||
:auto 2
|
||||
:fixed 3))
|
||||
(let [values (unchecked-get wasm/serializers "grid-track-type")]
|
||||
(unchecked-get values (d/name type))))
|
||||
|
||||
(defn translate-layout-sizing
|
||||
[value]
|
||||
(case value
|
||||
:fill 0
|
||||
:fix 1
|
||||
:auto 2
|
||||
1))
|
||||
[sizing]
|
||||
(let [values (unchecked-get wasm/serializers "sizing")
|
||||
default (unchecked-get values "fix")]
|
||||
(d/nilv (unchecked-get values (d/name sizing)) default)))
|
||||
|
||||
(defn translate-align-self
|
||||
[value]
|
||||
(when value
|
||||
(case value
|
||||
:auto 0
|
||||
:start 1
|
||||
:end 2
|
||||
:center 3
|
||||
:stretch 4)))
|
||||
[align-self]
|
||||
(let [values (unchecked-get wasm/serializers "align-self")]
|
||||
(unchecked-get values (d/name align-self))))
|
||||
|
||||
(defn translate-justify-self
|
||||
[value]
|
||||
(when value
|
||||
(case value
|
||||
:auto 0
|
||||
:start 1
|
||||
:end 2
|
||||
:center 3
|
||||
:stretch 4)))
|
||||
[justify-self]
|
||||
(let [values (unchecked-get wasm/serializers "justify-self")]
|
||||
(unchecked-get values (d/name justify-self))))
|
||||
|
||||
(defn translate-shadow-style
|
||||
[style]
|
||||
(case style
|
||||
:drop-shadow 0
|
||||
:inner-shadow 1
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "shadow-style")
|
||||
default (unchecked-get values "drop-shadow")]
|
||||
(d/nilv (unchecked-get values (d/name style)) default)))
|
||||
|
||||
;; TODO: Find/Create a Rust enum for this
|
||||
(defn translate-structure-modifier-type
|
||||
[type]
|
||||
(case type
|
||||
@@ -266,19 +208,17 @@
|
||||
|
||||
(defn translate-grow-type
|
||||
[grow-type]
|
||||
(case grow-type
|
||||
:auto-width 1
|
||||
:auto-height 2
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "grow-type")
|
||||
default (unchecked-get values "fixed")]
|
||||
(d/nilv (unchecked-get values (d/name grow-type)) default)))
|
||||
|
||||
(defn translate-vertical-align
|
||||
[vertical-align]
|
||||
(case vertical-align
|
||||
"top" 0
|
||||
"center" 1
|
||||
"bottom" 2
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "vertical-align")
|
||||
default (unchecked-get values "top")]
|
||||
(d/nilv (unchecked-get values (d/name vertical-align)) default)))
|
||||
|
||||
;; TODO: Find/Create a Rust enum for this
|
||||
(defn translate-text-align
|
||||
[text-align]
|
||||
(case text-align
|
||||
@@ -288,6 +228,7 @@
|
||||
"justify" 3
|
||||
0))
|
||||
|
||||
;; TODO: Find/Create a Rust enum for this
|
||||
(defn translate-text-transform
|
||||
[text-transform]
|
||||
(case text-transform
|
||||
@@ -298,6 +239,7 @@
|
||||
nil 0
|
||||
0))
|
||||
|
||||
;; TODO: Find/Create a Rust enum for this
|
||||
(defn translate-text-decoration
|
||||
[text-decoration]
|
||||
(case text-decoration
|
||||
@@ -308,6 +250,7 @@
|
||||
nil 0
|
||||
0))
|
||||
|
||||
;; TODO: Find/Create a Rust enum for this
|
||||
(defn translate-text-direction
|
||||
[text-direction]
|
||||
(case text-direction
|
||||
@@ -318,8 +261,12 @@
|
||||
|
||||
(defn translate-font-style
|
||||
[font-style]
|
||||
(case font-style
|
||||
"normal" 0
|
||||
"regular" 0
|
||||
"italic" 1
|
||||
0))
|
||||
(let [values (unchecked-get wasm/serializers "font-style")
|
||||
default (unchecked-get values "normal")]
|
||||
(case font-style
|
||||
;; NOTE: normal == regular!
|
||||
;; is it OK to keep those two values in our cljs model?
|
||||
"normal" (unchecked-get values "normal")
|
||||
"regular" (unchecked-get values "normal")
|
||||
"italic" (unchecked-get values "italic")
|
||||
default)))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
(ns app.render-wasm.wasm)
|
||||
|
||||
(defonce internal-frame-id nil)
|
||||
(defonce internal-module #js {})
|
||||
(defonce internal-module #js {})
|
||||
(defonce serializers #js {})
|
||||
Reference in New Issue
Block a user