WORK-088
ID:WORK-088Status:done

Extract shared utilities from @refrakt-md/svelte to @refrakt-md/transform

Prerequisite for all framework adapters. Two modules in @refrakt-md/svelte are framework-agnostic and needed by every adapter package.

Priority:highComplexity:simpleMilestone:v1.0.0Source:ADR-001,ADR-002,SPEC-030
changeset-release/main View source

Criteria completion

No incremental history — criteria tracking started on Apr 19.

Branches 3
History 6
  1. f2b3512
    Content editedby Claude
    Add {ID}-{slug}.md filename convention + migrate filenames subcommand
  2. 59ded4a
    Content editedby Claude
    Implement SPEC-037 plan package hardening: all 7 work items
  3. f262d7b
    Content editedby Claude
    Backfill source attributes on all 123 work items
  4. e5a255f
    Content editedby Claude
    Implement SPEC-030 Phase 0 + Phase 1: shared utility extraction and Astr
  5. 11e81a8
    Content editedby Claude
    Add framework work items to v1.0.0 milestone
  6. ead9531
    Created (done)by Claude
    Add work items WORK-088 through WORK-092 for framework adapter system

Acceptance Criteria

  • serialize() and serializeTree() moved to packages/transform/src/serialize.ts
  • matchRouteRule() moved to packages/transform/src/route-rules.ts
  • Both are exported from @refrakt-md/transform public API (packages/transform/src/index.ts)
  • @refrakt-md/svelte re-exports both modules — no breaking change for existing consumers
  • @refrakt-md/transform adds @markdoc/markdoc as a dependency (needed by serialize())
  • All existing tests pass without modification
  • Build succeeds in dependency order (types → transform → svelte)

Approach

  1. Copy packages/svelte/src/serialize.tspackages/transform/src/serialize.ts
  2. Copy packages/svelte/src/route-rules.tspackages/transform/src/route-rules.ts
  3. Update imports in both files if needed (type imports should already point at @refrakt-md/types)
  4. Export from packages/transform/src/index.ts
  5. Replace original files in packages/svelte/src/ with re-exports from @refrakt-md/transform
  6. Update any internal imports within packages/svelte/ that reference these modules directly

References

  • SPEC-030 (Phase 0)
  • ADR-001, ADR-002 (both identify this as a shared prerequisite)

Resolution

Completed: 2026-04-02

Branch: claude/implement-spec-030-F0LFn

What was done

  • Moved serialize() and serializeTree() from packages/svelte/src/serialize.ts to packages/transform/src/serialize.ts
  • matchRouteRule() was already in packages/transform/src/route-rules.ts (previously extracted)
  • Added @markdoc/markdoc as dependency to @refrakt-md/transform
  • Exported both serialize and serializeTree from transform's public API
  • Updated @refrakt-md/svelte serialize.ts to re-export from transform
  • All 167 test files (1877 tests) pass, build succeeds

Notes

  • Route rules extraction was already done in a prior session — only serialize needed moving