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
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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.0.4→^13.1.3Release Notes
ardatan/graphql-tools (@graphql-tools/utils)
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)v12.1.0Compare Source
Minor Changes
#8445
82457d1Thanks @ardatan! - Fix: Preserve symbol-keyed GraphQL extensions when building, merging, or extracting schemas.GraphQL.js v17 allows
string | symbolkeys on schema/type/fieldextensions(viatoObjMapWithSymbols).@graphql-toolswas dropping those symbol keys in two places:mergeDeeponly walked enumerable string keys (for...in), so symbol extensions were lost when applyingschemaExtensions.extractExtensionsFromSchemadid not copy non-enumerable own symbol keys (enumerable symbols already survive object rest/spread; the explicit loop covers the non-enumerable case).Example (bug)
Schema extension merge/extract and resolver merging always enable
{ enumerable: true, nonEnumerable: true }so symbol keys survive in tools' own merge/extract paths on every supported GraphQL.js major. (GraphQL.js itself may still drop symbol keys from field configs below v17 when rebuilding types.)mergeDeepAPImergeDeepnow accepts an options object. The old positional boolean arguments still work but are deprecated.respectSymbolsdefaults to{ enumerable: false, nonEnumerable: false }(symbols dropped), matching the historical default. The legacy 5th positional flag still maps to{ nonEnumerable: true }only.Resolver map types (
IResolvers/ field resolverextensionsand type__extensions) now useExtensionsObject(Record<string | symbol, any>), so symbol-keyed resolver extensions type-check under GraphQL.js v17+.Patch Changes
#8513
98673c3Thanks @ardatan! - fix(utils): coerce GraphQL 17 argument defaults in getArgumentValues via local input coercion (defaults, missing variables, nested sources)#8493
a75d725Thanks @cpruijsen! - Keep argument types of defined directives when pruning so that unused directives such as@key(fields: _FieldSet!)retain their full definitions instead of losing the argument together with its type.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.