v17.1.0 (2026-11-04)
New Feature 🚀
- #4852 spec change: allow empty selection sets (@martinbonnin)
- #4905 feat: add maxComments parser option (@yaacovCR)
- #4906 feat: add maxSourceLength parser option (@yaacovCR)
- #4950 feat: configure list type nesting in the parser (@yaacovCR)
- #4953 feat: configure printer indentation depth (@yaacovCR)
Bug Fix 🐞
- #4837 fix(VariablesInAllowedPositionRule): allow fragments with variables prior to operations (@yaacovCR)
- #4838 fix(DeferStreamDirectiveOnRootFieldRule): handle fragment cycles (@yaacovCR)
- #4839 fix(OverlappingFieldsCanMergeRule): require same variable definitions (@yaacovCR)
- #4853 fix(OverlappingFieldsCanMerge): fix var scope for fragment comparison cache (@yaacovCR)
- #4841 Skip deferred fragments in collectFields only when same directive is used (@robrichard)
- #4859 test(incremental): document bugs in shared deferred work (@duckki)
- #4868 fix(incremental): prevent lost or delayed successful shared results (@yaacovCR)
- #4869 fix(incremental): prevent error completions for unannounced fragments (@yaacovCR)
- #4865 fix(validation): keep argument defaults inside fragments (@SashaMIT)
- #4879 fix(validation): keep collected fields separate by parent type (@yaacovCR)
- #4895 fix(validation): bound conflict descriptions (@yaacovCR)
- #4896 fix(validation): bound nested conflict locations (@yaacovCR)
- #4898 perf(validation): prepare fragment spreads only for comparisons (@yaacovCR)
- #4897 feat(validation): limit overlapping field complexity (@yaacovCR)
- #4903 fix: rename maxTokens to maxLexicalTokens (@yaacovCR)
- #4904 memoize pathToArray to reduce memory for multiple defers at the same path (@robrichard)
- #4908 fix: pass parser options through buildSchema (@yaacovCR)
- #4916 fix: bound shared fragment traversal in introspection validation (@yaacovCR)
- #4929 fix: initialize subscription validation variables (@yaacovCR)
- #4937 fix: skip disabled argument suggestions (@yaacovCR)
- #4946 refactor: track fragment validation work (@yaacovCR)
- #4949 refactor: account for subscription field collection (@yaacovCR)
- #4951 refactor: account for field return type comparisons (@yaacovCR)
- #4915 fix: align minified source location at chunk boundaries (@fallintoplace)
- #4977 fix: keep minified EOF carets after the final character (@yaacovCR)
- #4979 fix: reference ESM source maps from every emitted module (@yaacovCR)
- #4980 fix: identify ESM modules in source map metadata (@yaacovCR)
- #4983 fix: avoid inherited variable getters in nested literal values (@yaacovCR)
Docs 📝
4 PRs were merged
Polish 💅
69 PRs were merged
- #4836 refactor: add map keyed by set membership (@yaacovCR)
- #4843 polish(OverlappingFieldsCanMerge: add tests documenting existing behavior (@yaacovCR)
- #4855 refactor(validation): add overlapping fields rule context (@yaacovCR)
- #4856 refactor(validation): name the variable map type (@yaacovCR)
- #4857 polish(validation): skip empty field comparisons (@yaacovCR)
- #4851 test: accept non-null union implementing a nullable union (@jayphelps)
- #4845 polish(validateInputValue): cover invalid values in iterable input (@vrana055)
- #4844 polish(introspection): cover __Type.description on wrapping types (@vrana055)
- #4860 docs: fix incorrect API doc examples and copy-pasted descriptions (@Cito)
- #4867 refactor(incremental): extract maybeFinishGroup (@yaacovCR)
- #4871 refactor(validation): rename NodeAndDef to FieldDetails (@yaacovCR)
- #4872 refactor(validation): name field detail lists (@yaacovCR)
- #4873 refactor(validation): rename NodeAndDefCollection to GroupedFieldSet (@yaacovCR)
- #4874 refactor(validation): align field collection names with execution (@yaacovCR)
- #4875 refactor(validation): convert FieldDetails tuples to objects (@yaacovCR)
- #4876 refactor(validation): convert CollectFieldsResult tuples to objects (@yaacovCR)
- #4877 refactor(validation): convert conflict tuples to objects (@yaacovCR)
- #4878 refactor(validation): make unordered pair lookup independent of key order (@yaacovCR)
- #4880 refactor(validation): rename VariableMap to VariableScope (@yaacovCR)
- #4881 perf(validation): share field collections across scopes (@yaacovCR)
- #4882 refactor(validation): check stream overlap in findConflict (@yaacovCR)
- #4883 perf(validation): prepare field comparison data together (@yaacovCR)
- #4885 perf(validation): reuse scope maps across equivalent fragment spreads (@yaacovCR)
- #4886 refactor(validation): compare value structure directly (@yaacovCR)
- #4888 refactor(validation): compare variable scope identities (@yaacovCR)
- #4889 perf(validation): cache field-pair source comparisons (@yaacovCR)
- #4890 perf(validation): cache source value preparation (@yaacovCR)
- #4891 perf(validation): cache value scope dependencies (@yaacovCR)
- #4892 perf(validation): cache source fragment spread preparation (@yaacovCR)
- #4893 perf(validation): reuse matching response groups across scopes (@yaacovCR)
- #4894 perf(validation): skip redundant inline selection-set checks (@yaacovCR)
- #4902 perf: avoid repeated SetMap key construction (@yaacovCR)
- #4920 perf: reuse fragment dependencies across operations (@yaacovCR)
- #4921 perf: reuse fragment variable usages (@yaacovCR)
- #4925 perf: share fragment collection across operations (@yaacovCR)
- #4926 refactor: use context fragment lookups in directive validation (@yaacovCR)
- #4927 perf: share subscription fragment lookups (@yaacovCR)
- #4931 perf: reuse subscription directive paths (@yaacovCR)
- #4932 perf: reuse introspection fragment checks (@yaacovCR)
- #4933 perf: share completed directive checks (@yaacovCR)
- #4935 test: cover source location lookups (@yaacovCR)
- #4936 perf: share source location lookups (@yaacovCR)
- #4938 perf: reuse required fragment arguments (@yaacovCR)
- #4939 perf: remove an extra list item type check (@yaacovCR)
- #4940 perf: reuse identical field return types (@yaacovCR)
- #4941 perf: reuse field return type names (@yaacovCR)
- #4942 perf: index directive argument names (@yaacovCR)
- #4943 perf: index directive locations (@yaacovCR)
- #4944 perf: reuse field return type descriptions (@yaacovCR)
- #4945 perf: reuse supported AST kinds (@yaacovCR)
- #4947 refactor: extract visitSelectionSets (@yaacovCR)
- #4948 refactor: simplify referenced fragment collection (@yaacovCR)
- #4952 refactor: stream printer output (@yaacovCR)
- #4956 perf: skip unused argument lookup preparation (@yaacovCR)
- #4957 perf: skip required argument preparation for argument-free fields (@yaacovCR)
- #4958 perf: scan single source locations directly (@yaacovCR)
- #4959 perf: store visitor edits in a flat array (@yaacovCR)
- #4960 perf: skip selection sets with no fields to compare (@yaacovCR)
- #4961 perf: allocate visitor edits only when needed (@yaacovCR)
- #4963 perf: reuse the visitor array check (@yaacovCR)
- #4964 perf: skip pair metadata for compatible leaf fields (@yaacovCR)
- #4965 perf: prepare type name lookups only when needed (@yaacovCR)
- #4972 perf: flatten input-value printing (@yaacovCR)
- #4973 perf: avoid arrays for single-line printer text (@yaacovCR)
- #4974 perf: assemble printer output as a string (@yaacovCR)
- #4975 perf: skip empty printer work (@yaacovCR)
- #4976 perf: add a minimal AST reducer for printing (@yaacovCR)
- #4971 perf: reuse fragment checks from fields exceeding the introspection depth (@Cito)
- #4982 revert: remove maxListDepth from #4950 for now (@yaacovCR)
Internal 🏠
13 PRs were merged
- #4884 ci: use a stable language-based CodeQL category (@yaacovCR)
- #4887 ci: run CodeQL in a dedicated workflow (@yaacovCR)
- #4907 test: execute JSDoc API examples with Node (@yaacovCR)
- #4912 internal: robustify examples test runner (@yaacovCR)
- #4928 ci: shard integration tests across eight jobs (@yaacovCR)
- #4954 ci: retire Node.js 25 (@yaacovCR)
- #4955 ci: test Node.js 27 prereleases (@yaacovCR)
- #4967 fix: accept zero-byte benchmark memory samples (@yaacovCR)
- #4968 fix: collect warmup garbage before benchmark memory samples (@yaacovCR)
- #4970 benchmark: cover schema document printing (@yaacovCR)
- #4969 fix: use cumulative allocation counters in memory benchmarks (@yaacovCR)
- #4978 build: remove the obsolete development entry point (@yaacovCR)
- #4981 internal: further improve example test runner (@yaacovCR)
Committers: 9
- Christoph Zwerschke(@Cito)
- Duckki Oe(@duckki)
- Jay Phelps(@jayphelps)
- Martin Bonnin(@martinbonnin)
- Minh Vu(@fallintoplace)
- Rob Richard(@robrichard)
- Sash(@SashaMIT)
- Vibhanshu Rana(@vrana055)
- Yaacov Rydzinski (@yaacovCR)