Repository navigation
chore: update dependency @graphql-tools/utils to v13 - #11864
Draft
renovate[bot] wants to merge 1 commit into
Draft
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/major-graphql-tools-monorepo
branch
2 times, most recently
from
October 26, 2026 23:09
cac24d2 to
643ce6c
Compare
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate
Bot
force-pushed
the
renovate/major-graphql-tools-monorepo
branch
from
October 31, 2026 14:09
643ce6c to
d9aa4e6
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^12.1.0→^13.2.1Release Notes
ardatan/graphql-tools (@graphql-tools/utils)
v13.2.1Compare Source
Patch Changes
#8626
cc144f6Thanks @dependabot! - dependencies updates:@whatwg-node/promise-helpers@^2.0.1↗︎ (from^2.0.0, independencies)#8628
03f8963Thanks @ardatan! - CachecollectFields/collectSubfieldsacross executions when the document has no variable-conditional@skip,@include, or@defer, sovariableValuesare omitted from the cache key for those documents.v13.2.0Compare Source
Minor Changes
#8606
6da2904Thanks @ardatan! -loadDocuments/loadTypedefsnow accepterrorHandlingso a single invalid file does not have to hide the rest of the load.A glob that mixes a valid operation with broken SDL used to throw the first
Syntax Errorand drop every other file:errorHandlingchooses what happens next. The default is unchanged (throwthe first error).aggregatewaits until every source is attempted, then throwsAggregateErrorwith each parse/load failure:returndoes not throw. Failed sources stay in the result as{ location, error }without adocument, next to the sources that parsed:Sourcenow has an optionalerrorfield.@graphql-tools/graphql-file-loaderand@graphql-tools/code-file-loaderhonor the same option.CodeFileLoader's existingnoSilentErrorsdefault is unchanged unlesserrorHandlingis set.Custom loader failures and incomplete inline documents (
query Foo {) follow the same option.errorHandling: 'throw'raises the first failure, notAggregateError.Patch Changes
#8588
7770067Thanks @ardatan! -rewireTypes(used bymapSchemaandaddTypes) now recreates only the types that actually reference a replaced type.mapSchemaalready changes just the mapped types.rewireTypesthen walked every type and built a newGraphQLObjectType/ enum / scalar so field pointers stayed consistent. That is correct, and it is overkill when a pipeline maps one type on a large schema: unrelated types, unused enums, and unused scalars were cloned on every pass.The crawl now finds types whose field, argument, interface, or union members point at a different object than the type map (including wrapper types created during mapping), then rebuilds only that set. Specified directives stay as-is. Types that do not reach a replacement keep the same JavaScript object.
createStubreturns the graphql-js specified scalars forString/ID/Int/Float/Booleaninstead of building an object or input with that name. StitchtypeFromASTusescreateStubfor every field type.#8608
f956bfeThanks @ardatan! -transformInputValuenow keeps falsy list items when GraphQL coerces a singleton into a list.A
[String]/[Int]/[Boolean]field can receive"",0, orfalseinstead of a one-element array. The previousasArrayhelper treated those as empty and produced[], so rename and other input transforms dropped a valid value.nullis still returned as-is. A real list is still walked item by item.v13.1.3Compare Source
Patch Changes
#8575
7fbc6e7Thanks @ardatan! -mapSchemanow remaps directive argument defaults the same way it already remaps field argument defaults.Use case:
UserRoleis remapped to internal ids, and@authdefaults toUSER.mapSchemaserializes the stored default with the source type before parsing with the remapped type, so an internal value that matches another enum name (USER->"ADMIN") stays"ADMIN"instead of being parsed as that name.forEachDefaultValuewalks directive arguments too, somakeExecutableSchemaenum resolvers get the same result.#8574
5ceed9dThanks @ardatan! - PublishedExecutortypes include/// <reference lib="esnext.disposable" preserve="true" />so consumers do not needskipLibCheckor a fullesnextlib just to import this package.Use case: an app with
"lib": ["es2022"]or["es2024"]andskipLibCheck: falsethat imports@graphql-tools/utils:Executorcan return aDisposable/AsyncIterableresult. Those names live in TypeScript'sesnext.disposablelib, which is not part ofes2022/es2024. Without the preserved reference,tscreportsCannot find name 'Disposable'. With it, the published.d.tspulls in that lib for the consumer automatically.v13.1.2Compare Source
Patch Changes
#8558
501109bThanks @ardatan! -printSchemaWithDirectivesno longer turns unquoted directive argument literals into strings.In GraphQL SDL, an unquoted identifier in value position is an
EnumValueAST node. A quoted value is aStringValue. Those are different kinds even when the argument type is a custom scalar rather than anenumtype.parseLiteralon that scalar receives the original kind, so a custom scalar can treatargument_valueand"argument_value"as different inputs.The printer was reconstructing directive arguments from JS values.
valueFromASTUntypedmaps both kinds to the same string, andastFromValuethen emits aStringValue. The printed SDL became@directive(arg: "argument_value")even though the schema AST still had@directive(arg: argument_value).That is a round-trip / fidelity bug: loaders, schema diffs, snapshots, and subgraph publishes see different SDL, and a scalar that distinguishes the two kinds changes meaning. Default scalars coerce both to the same JS string, so many runtime paths do not notice.
When the original AST is still the source of truth,
printSchemaWithDirectivesnow keeps those directive argument nodes, including nested list and input-object values. If directive values are supplied only through extensions (code-first), JS strings are still printed as strings because the original kind is not available.Fixes #8557
v13.1.1Compare Source
Patch Changes
#8552
f87bdf4Thanks @ardatan! -INCREMENTAL_DELIVERY_SPECSis the shared HTTP contract forincrementalSpec. Each row maps an Accept / Content-Type parameter (deferSpec=20220824,incrementalSpec=v0.2, ...) to the executor payload id ('v0.1'|'v0.2').GraphQL Yoga, Hive Gateway, HTTP executors, and other servers should look up this table instead of hardcoding spec strings. When a later incremental spec ships, the work stays in graphql-tools: add a row here and an executor publisher. Consumers bump
@graphql-tools/utils/@graphql-tools/executor. Accept negotiation, Content-Type echo, and 406 for unknown spec params keep working without a Yoga / Gateway / executor-http patch for the new identifier.Unknown values for a registered parameter name stay unsupported (HTTP 406). Helpers:
lookupIncrementalDeliverySpec,getMultipartContentType,getDefaultIncrementalDeliverySpec,getIncrementalSpecParameterNames.v13.1.0Compare Source
Minor Changes
#8550
4db5750Thanks @ardatan! -@graphql-tools/executorcan publish both incremental delivery payload formats from one execution kernel. PassincrementalSpec: 'v0.1' | 'v0.2'onexecute/subscribe/normalizedExecutor(also onExecutionRequestforexecutorFromSchema).'v0.1'remains the default and keeps the existingpath/labelpatches used withmultipart/mixed;deferSpec=20220824.'v0.2'emits Apollo incremental v0.2 payloads (pendingwithidandpath,incrementalwithidand optionalsubPath,completed) used withmultipart/mixed;incrementalSpec=v0.2.Field execution,
@defer/@streamscheduling, andAbortSignalcancellation are shared. Spec-specific JSON is built by a publisher: v0.1 still yields{ incremental, hasNext }; v0.2 assigns ids when a pending group is first announced, groups streamed items under one pending path, and reports completion separately. Nested@deferpatches are collected as children of the parent patch so v0.2 can announce the inner fragment only after the parent is pending, without making the nested fragment wait on the parent's promise (v0.1 sibling completion is unchanged aside from incremental array order).Publisher state (
Map/Setof ids) is allocated only for'v0.2'.StreamGroupis created only for v0.2 and only when items are actually streamed. v0.2 stream completion uses an open-count on the group instead of scanningsubsequentPayloads.mergeIncrementalResultstill merges v0.1path/itemspatches. For v0.2 it recordspendingids on the execution result, writes deferreddataatpending.path + subPath, appends streameditemsonto the list atpending.path, and foldscompleted.errorsintoerrors.visitResultflattens nested deferred patches so result visiting still sees fields that live under a child@defer.v13.0.2Compare Source
Patch Changes
34b740bThanks @ardatan! - AddasGetArgumentValuesVariablesandcoerceGetVariableValuesResulthelpers for GraphQL 16/17VariableValuescompatibility when callinggetArgumentValues/ normalizinggetVariableValuesresults for helpers likeshouldIncludeNode.v13.0.1Compare Source
Patch Changes
#8540
15efe55Thanks @ardatan! - Alignmemoize4third-level cache initialization with thelet+ reassignment pattern used bymemoize3/memoize5.Previously a nested
const cache4insideif (!cache4)shadowed the outer binding. Runtime behavior was already safe (that branch stores the map and returns), but the declaration was easy to misread and fragile if the early return were removed. The helper now assigns to the outerlet cache4instead, with regression tests for the third-level cache path.v13.0.0Compare Source
Major Changes
#8515
1d70c62Thanks @ardatan! - Drop GraphQL v14/v15 support and require Node.js >= 22.18.graphqlpeer range is now^16.0.0 || ^17.0.0.engines.nodeis now>=22.18.0(Nodefs.glob+ Babel 8).@graphql-tools/graphql-tag-pluckmove to Babel 8 (@babel/core/ parser / traverse / types).cross-inspectpackage is discontinued. Useinspectfrom@graphql-tools/utilsinstead (Nodeutil.inspectviaprocess.getBuiltinModule, with a smallJSON.stringify/Stringfallback).Removed
@graphql-tools/utilsexportsgetArgumentValuesimport { getArgumentValues } from 'graphql'coerceInputs/graphqlJSCompatgetArgumentValues, etc.)createDeferred/createDeferredPromiseconst { promise, resolve, reject } = Promise.withResolvers()createGraphQLErrornew GraphQLError(message, options)fromgraphqlmapMaybePromisehandleMaybePromisefrom@whatwg-node/promise-helpersisPromise/fakePromise/mapAsyncIterator/MaybePromise@whatwg-node/promise-helpersregisterAbortSignalListener/getAbortPromiseAbortSignalAPIs (throwIfAborted,addEventListener('abort', …, { once: true }),AbortSignal.any, …)withCancel/getAsyncIterableWithCancel/getAsyncIteratorWithCancelreturn()(or your transport abort path)debugTimerStart/debugTimerEndconsole.timeif neededPromiseWithResolvers(type)PromiseWithResolvers<T>/ return type ofPromise.withResolvers()inspectand the WeakMapmemoize1…memoize2of5helpers remain on@graphql-tools/utils(inspect is no longer re-exported fromcross-inspect).File matching (
globby→fs.glob)Loaders and
@graphql-tools/load-filesnow use Node’sfs.globthrough:Directory symlinks are followed for recursive (
**) patterns:fs.globfollowSymlinksis used.cwd) and patterns are re-rooted.@graphql-tools/executorhot-path caches (collectSubfields, argument coercion,@streamdetection) usememoize2/memoize3from utils.collectSubFieldsin utils stays unmemoized so the executor can own a single memoize3 layer.Errors and other cleanup
new GraphQLError(message, options)fromgraphql. Experimental schemacoordinatesupport remains onlocatedError/relocatedError/getSchemaCoordinate.URL.canParsefallback).@whatwg-node/promise-helpers(handleMaybePromise,isPromise,fakePromise,mapAsyncIterator,MaybePromise) rather than re-exported from utils.Patch Changes
1d70c62Thanks @ardatan! - dependencies updates:@graphql-typed-document-node/core@^3.2.0↗︎ (from^3.1.1, independencies)cross-inspect@1.0.1↗︎ (fromdependencies)graphql@^16.0.0 || ^17.0.0↗︎ (from^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0, inpeerDependencies)Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.