app/src/utils/tldraw/schemas.ts
2025-11-14 14:47:26 +00:00

66 lines
2.5 KiB
TypeScript

console.log('🔍 SCHEMA FILE: Starting schema file execution');
import { createTLSchema, defaultShapeSchemas, defaultBindingSchemas } from '@tldraw/tlschema';
import { createTLSchemaFromUtils, defaultBindingUtils, defaultShapeUtils } from '@tldraw/tldraw';
import { ShapeUtils } from './shapes';
import { allBindingUtils } from './bindings';
import { ccGraphShapeProps } from './cc-base/cc-graph/cc-graph-props';
import { ccGraphMigrations } from './cc-base/cc-graph/cc-graph-migrations';
import { GraphShapeType } from './cc-base/cc-graph/cc-graph-types';
// Create schema with shape definitions
const customShapes = {
...defaultShapeSchemas,
// Dynamically generate shape schemas from ShapeUtils
...Object.values(ShapeUtils).reduce((acc, util) => ({
...acc,
[util.type]: {
props: util.props,
migrations: util.migrations,
}
}), {}),
// Add graph shapes
...(ccGraphShapeProps ? Object.entries(ccGraphShapeProps).reduce((acc, [type, props]) => ({
...acc,
[type]: {
props,
migrations: ccGraphMigrations[type as GraphShapeType],
}
}), {}) : {})
};
// Debug: Log the custom shapes being added
console.log('🔍 SCHEMA DEBUG: Custom shapes in schema:', Object.keys(customShapes).filter(key => key.startsWith('cc-')));
console.log('🔍 SCHEMA DEBUG: ShapeUtils types:', Object.values(ShapeUtils).map(util => util.type));
console.log('🔍 SCHEMA DEBUG: ccGraphShapeProps types:', Object.keys(ccGraphShapeProps || {}));
export const customSchema = createTLSchema({
shapes: customShapes,
bindings: {
...defaultBindingSchemas,
// Add binding schemas from our custom binding utils
...allBindingUtils.reduce((acc, util) => ({
...acc,
[util.type]: {
props: util.props,
migrations: util.migrations,
}
}), {})
},
});
// Debug: Log the final schema sequences
console.log('🔍 SCHEMA DEBUG: Final schema sequences:', customSchema.serialize().sequences);
console.log('🔍 SCHEMA DEBUG: Custom shape sequences:', Object.keys(customSchema.serialize().sequences).filter(key => key.includes('cc-')));
// Create schema from utils (alternative approach)
export const schemaFromUtils = createTLSchemaFromUtils({
shapeUtils: [
...defaultShapeUtils,
...Object.values(ShapeUtils)
],
bindingUtils: [
...defaultBindingUtils,
...allBindingUtils
],
});