diff --git a/common/src/app/common/files/migrations.cljc b/common/src/app/common/files/migrations.cljc index aa56dbe65d..0c18ea7ad8 100644 --- a/common/src/app/common/files/migrations.cljc +++ b/common/src/app/common/files/migrations.cljc @@ -94,22 +94,33 @@ (defn migrate-file [file libs] (binding [cfeat/*new* (atom #{})] - (let [version (or (:version file) - (-> file :data :version))] - (-> file - (assoc :version cfd/version) - (update :migrations - (fn [migrations] - (if (nil? migrations) - (generate-migrations-from-version version) - migrations))) - ;; NOTE: in some future we can consider to apply - ;; a migration to the whole database and remove - ;; this code from this function that executes on - ;; each file migration operation - (update :features cfeat/migrate-legacy-features) - (migrate libs) - (update :features (fnil into #{}) (deref cfeat/*new*)))))) + (let [version + (or (:version file) (-> file :data :version)) + + migrations + (not-empty (get file :migrations)) + + file + (-> file + (assoc :version cfd/version) + (assoc :migrations + (if migrations + migrations + (generate-migrations-from-version version))) + ;; NOTE: in some future we can consider to apply a + ;; migration to the whole database and remove this code + ;; from this function that executes on each file + ;; migration operation + (update :features cfeat/migrate-legacy-features) + (migrate libs) + (update :features (fnil into #{}) (deref cfeat/*new*)))] + + ;; NOTE: When we have no previous migrations, we report all + ;; migrations as migrated in order to correctly persist them all + ;; and not only the really applied migrations + (if (not migrations) + (vary-meta file assoc ::migrated (:migrations file)) + file)))) (defn migrated? [file] @@ -1273,7 +1284,8 @@ ;; rollback, we still need to perform an other migration ;; for properly delete the bool-content prop from shapes ;; once the know the migration was OK - (if (cfh/bool-shape? object) + (if (and (cfh/bool-shape? object) + (not (contains? object :content))) (if-let [content (:bool-content object)] (assoc object :content content) object) @@ -1468,7 +1480,7 @@ (update :pages-index d/update-vals update-container) (d/update-when :components d/update-vals update-container)))) -(defmethod migrate-data "0008-fix-library-colors" +(defmethod migrate-data "0008-fix-library-colors-v2" [data _] (letfn [(clear-color-opacity [color] (if (and (contains? color :opacity) @@ -1478,6 +1490,7 @@ (clear-color [color] (-> color + (select-keys types.color/library-color-attrs) (d/without-nils) (d/without-qualified) (clear-color-opacity)))] @@ -1547,4 +1560,4 @@ "0005-deprecate-image-type" "0006-fix-old-texts-fills" "0007-clear-invalid-strokes-and-fills-v2" - "0008-fix-library-colors"])) + "0008-fix-library-colors-v2"])) diff --git a/common/src/app/common/types/color.cljc b/common/src/app/common/types/color.cljc index 89b84ea1e9..6b3893d3ef 100644 --- a/common/src/app/common/types/color.cljc +++ b/common/src/app/common/types/color.cljc @@ -150,6 +150,9 @@ (sm/optional-keys schema:image-color)] [:fn has-valid-color-attrs?]]) +(def library-color-attrs + (sm/keys schema:library-color-attrs)) + (def valid-color? (sm/lazy-validator schema:color))