refactor: migrate elements by schema in restore
This commit is contained in:
@@ -50,6 +50,8 @@ import type {
|
||||
ExcalidrawLineElement,
|
||||
} from "./types";
|
||||
|
||||
const ELEMENT_SCHEMA_VERSION = 2;
|
||||
|
||||
export type ElementConstructorOpts = MarkOptional<
|
||||
Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">,
|
||||
| "width"
|
||||
@@ -144,6 +146,7 @@ const _newElementBase = <T extends ExcalidrawElement>(
|
||||
roundness,
|
||||
seed: rest.seed ?? randomInteger(),
|
||||
version: rest.version || 1,
|
||||
schemaVersion: rest.schemaVersion ?? ELEMENT_SCHEMA_VERSION,
|
||||
versionNonce: rest.versionNonce ?? 0,
|
||||
isDeleted: false as false,
|
||||
boundElements,
|
||||
|
||||
@@ -58,6 +58,8 @@ type _ExcalidrawElementBase = Readonly<{
|
||||
/** Integer that is sequentially incremented on each change. Used to reconcile
|
||||
elements during collaboration or when saving to server. */
|
||||
version: number;
|
||||
/** Schema version hint used for per-element migration on restore. */
|
||||
schemaVersion?: number;
|
||||
/** Random integer that is regenerated on each change.
|
||||
Used for deterministic reconciliation of updates during collaboration,
|
||||
in case the versions (see above) are identical. */
|
||||
|
||||
Reference in New Issue
Block a user