v17.0.0-beta.0 (2026-05-07)
Breaking Change 💥
- #4634 Use Object.create(null) over {} to avoid prototype issues (@benjie)
- #4700 Demote createSourceEventStream to helper taking ValidatedExecutionArgs (@yaacovCR)
- #4703 rename executeQueryOrMutationOrSubscriptionEvent to executeRootSelectionSet (@yaacovCR)
- #4708 fix(variables): treat undefined as absent with respect to variables (@yaacovCR)
- #4710 fix: ignore undefined-valued unknown fields in input objects (@yaacovCR)
New Feature 🚀
- #4658 feat(execution): expose asyncWorkFinished execution hook (@yaacovCR)
- #4674 feat(execution): expose partial result on abort errors (@yaacovCR)
- #4701 export validateExecutionArgs helper (@yaacovCR)
- #4702 feat: add ValidatedSubscriptionArgs and validateSubscriptionArgs (@yaacovCR)
Bug Fix 🐞
- #4637 refactor(queue): replace stopped promise with onStop handlers (@yaacovCR)
- #4641 refactor(incremental): close stream iterator only on abnormal stop (@yaacovCR)
- #4642 fix(incremental): await async incremental cleanup (@yaacovCR)
- #4644 fix(withConcurrentAbruptClose): do not close unnecessarily (@yaacovCR)
- #4645 fix(cancellablePromise): handle rejection when cancelling already-aborted promise (@yaacovCR)
- #4643 fix(execute): handle list promise rejections (@yaacovCR)
- #4646 fix(execute): handle defaultTypeResolver promise rejections (@yaacovCR)
- #4648 refactor(executor): separate finish/abort orchestration (@yaacovCR)
- #4655 fix(execution): finish executors before publishing responses (@yaacovCR)
- #4661 fix: bubbling sync errors need not become async (@yaacovCR)
- #4663 fix(executor): let aborted async paths reach finish (@yaacovCR)
- #4657 refactor(execution): track pending work (@yaacovCR)
- #4664 fix(perf): hoist error creation (@yaacovCR)
- #4665 execution: reduce parent executor retention in incremental callbacks (@yaacovCR)
- #4671 fix(valueFromAST): forward port #4652 (@yaacovCR)
- #4672 fix(execution): convert all promise-like results to promises (@yaacovCR)
- #4518 Fix TypeInfo.getInputType() for custom scalar list literals. (@yuchenshi)
- #4692 fix incremental label null validation (@jbellenger)
- #4711 fix(coerceInputLiteral): null variable input object fields should override defaults (@yaacovCR)
- #4712 fix: name fragment variables as such in execution errors (@yaacovCR)
- #4714 fix: enhance runtime invalid default value error messages (@yaacovCR)
- #4715 unify OneOf non-null and count error messages (@yaacovCR)
- #4716 fix(OneOf): fail coercion when two fields are provided "pre-coercion-only" (@yaacovCR)
- #4717 fix(valueFromAST): reject unknown input object fields (@yaacovCR)
- #4718 fix(OneOf): count only known fields for one-of validation (@yaacovCR)
- #4719 fix(OneOf): fail coercion for OneOf is the single field is invalidly provided by a default (@yaacovCR)
Polish 💅
19 PRs were merged
- #4635 polish: remove a few superfluous awaits (@yaacovCR)
- #4636 allow forwarding of cancellation reasons within computations/queues (@yaacovCR)
- #4638 test(queue): cover async onStop cleanup (@yaacovCR)
- #4639 refactor(computation): rename cancel to abort (@yaacovCR)
- #4640 refactor(workqueue): propagate async computation abort cleanup (@yaacovCR)
- #4647 refactor(executor): rename finished state to aborted (@yaacovCR)
- #4649 refactor(cancellablePromise): extract withCancellation (@yaacovCR)
- #4650 refactor(executor): replace internal abort signal with lightweight version (@yaacovCR)
- #4656 refactor(execution): introduce shared execution context (@yaacovCR)
- #4653 fix: avoid prototype-colliding names in execution values (@abishekgiri)
- #4673 refactor(execution): separate response construction from finish checks (@yaacovCR)
- #4675 polish(execution): remove obsolete abort async checks (@yaacovCR)
- #4686 refactor(benchmark): extract shared mean stats helper (@yaacovCR)
- #4687 polish(benchmark): handle theoretical stats errors (@yaacovCR)
- #4693 polish: add expectToThrow test helper (@yaacovCR)
- #4694 polish: add expectPromise.toReject helper (@yaacovCR)
- #4695 polish: clean up stream tests (@yaacovCR)
- #4696 polish: introduce spy test helper (@yaacovCR)
- #4704 refactor: add executionMode/serially argument to executeRootSelectionSet (@yaacovCR)
Internal 🏠
17 PRs were merged
- #4676 chore(deps): upgrade to ts v6 (@yaacovCR)
- #4677 internal: refactor benchmark runner structure (@yaacovCR)
- #4678 internal: run benchmarks through worker files (@yaacovCR)
- #4679 internal: read benchmark names through dedicated worker (@yaacovCR)
- #4680 internal: separate benchmark timing and memory sampling (@yaacovCR)
- #4681 fix(benchmark): use node flags only for memory sampling (@yaacovCR)
- #4682 internal: use mitata for benchmark timing (@yaacovCR)
- #4683 refactor(benchmark): integrate run + sampling files (@yaacovCR)
- #4684 benchmark: perform timing tests in rounds to reduce variance (@yaacovCR)
- #4685 benchmark: stop timing after stable pairwise comparisons (@yaacovCR)
- #4688 benchmark: cache revision archives (@yaacovCR)
- #4689 benchmark: report paired benchmark comparisons (@yaacovCR)
- #4690 benchmark: add async object field benchmark (@yaacovCR)
- #4697 internal: add runtime option to benchmark (@yaacovCR)
- #4713 benchmark: add benchmark for schema validation (@yaacovCR)
- #4722 internal: npm release:prepare should set publishTag (@yaacovCR)
- #4723 fix(changelog): ignore open associated PRs (@yaacovCR)
Committers: 5
- Abishek Kumar Giri(@abishekgiri)
- Benjie(@benjie)
- James Bellenger(@jbellenger)
- Yaacov Rydzinski (@yaacovCR)
- Yuchen Shi(@yuchenshi)