Files
pubsub/docs/architecture/decisions/001-graphql-yoga-fork.md
glm-5.1 8c025c3433 Set up project structure, source files, and architecture docs
- Copy core source from alkhub_ts/packages/core/pubsub/ with import path fixups
  (typed_event_target.ts → types.ts, .ts → .js extensions)
- Make PubSubPublishArgsByKey exported (was private type, needed by barrel)
- Add package.json with sub-path exports and optional peer deps (ioredis)
- Add tsup.config.ts with multi-entry + splitting for tree-shaking
- Add tsconfig.json, vitest.config.ts, .gitignore
- Add AGENTS.md with project conventions and adapter checklist
- Add architecture docs following taskgraph/alkhub pattern:
  docs/architecture/README.md, api-surface.md, event-targets.md,
  iroh-transport.md, build-distribution.md
- Add ADRs: 001-graphql-yoga-fork, 002-tree-shake-pattern
- Copy migration research doc to docs/research/migration.md
- Dual-license MIT OR Apache-2.0 (matching taskgraph)
2026-04-30 10:20:41 +00:00

1.5 KiB

ADR-001: Fork graphql-yoga pubsub

Status: Accepted Date: 2026-04-30

Context

createPubSub, TypedEventTarget, and operators are adapted from @graphql-yoga/subscription and @graphql-yoga/typed-event-target (MIT). We carried these into alkhub with modifications (native CustomEvent, our TypedEventTarget types, removed tslib). Now we're extracting to a standalone package.

Decision

Fork (continue carrying adapted code) rather than depend on graphql-yoga packages directly.

Rationale

  1. Different evolution path — graphql-yoga's pubsub is tailored for GraphQL subscriptions. Our use case is general-purpose event routing with multiple transports. The APIs will diverge further as we add WebSocket and Iroh adapters.

  2. Dependency reduction — graphql-yoga's subscription package pulls in @whatwg-node/events and tslib. We don't need either — we use native CustomEvent and no tslib runtime.

  3. Control over types — graphql-yoga's TypedEventTarget uses their own event type hierarchy. We use a simpler one that maps directly to CustomEvent. Maintaining our own types avoids version coupling.

  4. Already forked — the code in alkhub already diverged from the original. The license headers are in place. A clean extraction doesn't change the provenance story.

Consequences

  • Must preserve MIT license headers in all forked files
  • Must update attribution if we make significant changes beyond the original fork scope
  • No automatic updates from graphql-yoga — we carry our own maintenance burden