rspace-online/backlog/tasks/task-41 - Build-dynamic-Sha...

1.5 KiB

id title status assignee created_date labels milestone dependencies references priority
TASK-41 Build dynamic Shape Registry to replace hardcoded switch statements To Do
2026-02-18 20:06
infrastructure
phase-0
ecosystem
m-1
rspace-online/lib/folk-shape.ts
rspace-online/website/canvas.html
rspace-online/lib/community-sync.ts
high

Description

Replace the 170-line switch statement in canvas.html's createShapeElement() and the 100-line type-switch in community-sync.ts's #updateShapeElement() with a dynamic ShapeRegistry.

Create lib/shape-registry.ts with:

  • ShapeRegistration interface (tagName, elementClass, defaults, category, portDescriptors, eventDescriptors)
  • ShapeRegistry class with register(), createElement(), updateElement(), listAll(), getByCategory()
  • Each folk-*.ts gets a static registration property and static fromData() method

This is the prerequisite for all other ecosystem features (pipes, events, groups, nesting, embedding).

Acceptance Criteria

  • #1 ShapeRegistry class created with register/createElement/updateElement methods
  • #2 All 30+ folk-*.ts shapes have static registration property
  • #3 canvas.html switch statement replaced with registry.createElement()
  • #4 community-sync.ts type-switch replaced with registry.updateElement()
  • #5 All existing shapes still create and sync correctly
  • #6 No regression in shape creation or remote sync