- 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)
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
-
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.
-
Dependency reduction — graphql-yoga's subscription package pulls in
@whatwg-node/eventsandtslib. We don't need either — we use nativeCustomEventand no tslib runtime. -
Control over types — graphql-yoga's
TypedEventTargetuses their own event type hierarchy. We use a simpler one that maps directly toCustomEvent. Maintaining our own types avoids version coupling. -
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