42 lines
1.5 KiB
Markdown
42 lines
1.5 KiB
Markdown
---
|
|
id: TASK-41
|
|
title: Build dynamic Shape Registry to replace hardcoded switch statements
|
|
status: To Do
|
|
assignee: []
|
|
created_date: '2026-02-18 20:06'
|
|
labels:
|
|
- infrastructure
|
|
- phase-0
|
|
- ecosystem
|
|
milestone: m-1
|
|
dependencies: []
|
|
references:
|
|
- rspace-online/lib/folk-shape.ts
|
|
- rspace-online/website/canvas.html
|
|
- rspace-online/lib/community-sync.ts
|
|
priority: high
|
|
---
|
|
|
|
## Description
|
|
|
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
|
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).
|
|
<!-- SECTION:DESCRIPTION:END -->
|
|
|
|
## Acceptance Criteria
|
|
<!-- AC:BEGIN -->
|
|
- [ ] #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
|
|
<!-- AC:END -->
|