@tldraw/editor
Version:
tldraw infinite canvas SDK (editor).
34 lines (27 loc) • 1.09 kB
text/typescript
import { TLShapeUtilConstructor } from '../editor/shapes/ShapeUtil'
import { GroupShapeUtil } from '../editor/shapes/group/GroupShapeUtil'
/** @public */
export type TLAnyShapeUtilConstructor = TLShapeUtilConstructor<any>
/** @public */
export const coreShapes = [
// created by grouping interactions, probably the corest core shape that we have
GroupShapeUtil,
] as const
const coreShapeTypes = new Set<string>(coreShapes.map((s) => s.type))
export function checkShapesAndAddCore(customShapes: readonly TLAnyShapeUtilConstructor[]) {
const shapes = [...coreShapes] as TLAnyShapeUtilConstructor[]
const addedCustomShapeTypes = new Set<string>()
for (const customShape of customShapes) {
if (coreShapeTypes.has(customShape.type)) {
throw new Error(
`Shape type "${customShape.type}" is a core shapes type and cannot be overridden`
)
}
if (addedCustomShapeTypes.has(customShape.type)) {
throw new Error(`Shape type "${customShape.type}" is defined more than once`)
}
shapes.push(customShape)
addedCustomShapeTypes.add(customShape.type)
}
return shapes
}