mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 21:27:20 +00:00
fix(editor): add missing zod schema for edgeless frame (#10024)
Related to https://github.com/toeverything/AFFiNE/pull/9970#discussion_r1944971309 ### What changes: - Add missing zod shcema for edgeless basic props - Change `applyLastProps` to generic function for better return type inference of - Fix: add `ZodIntersection` case to `makeDeepOptional`
This commit is contained in:
@@ -16,4 +16,5 @@ export * from './slot.js';
|
||||
export * from './types.js';
|
||||
export * from './with-disposable.js';
|
||||
export type { SerializedXYWH, XYWH } from './xywh.js';
|
||||
export { SerializedXYWHZodSchema } from './xywh.js';
|
||||
export { deserializeXYWH, serializeXYWH } from './xywh.js';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
/**
|
||||
* XYWH represents the x, y, width, and height of an element or block.
|
||||
*/
|
||||
@@ -8,6 +10,30 @@ export type XYWH = [number, number, number, number];
|
||||
*/
|
||||
export type SerializedXYWH = `[${number},${number},${number},${number}]`;
|
||||
|
||||
export const SerializedXYWHZodSchema = z.custom<SerializedXYWH>((val: any) => {
|
||||
if (typeof val !== 'string') {
|
||||
throw new Error('SerializedXYWH should be a string');
|
||||
}
|
||||
|
||||
if (!val.startsWith('[') || !val.endsWith(']')) {
|
||||
throw new Error('SerializedXYWH should be wrapped in square brackets');
|
||||
}
|
||||
|
||||
const parts = val.slice(1, -1).split(',');
|
||||
|
||||
if (parts.length !== 4) {
|
||||
throw new Error('SerializedXYWH should have 4 parts');
|
||||
}
|
||||
|
||||
for (const part of parts) {
|
||||
if (!/^\d+$/.test(part)) {
|
||||
throw new Error('Each part of SerializedXYWH should be a number');
|
||||
}
|
||||
}
|
||||
|
||||
return val as SerializedXYWH;
|
||||
});
|
||||
|
||||
export function serializeXYWH(
|
||||
x: number,
|
||||
y: number,
|
||||
|
||||
Reference in New Issue
Block a user