Releases: graphql/graphql-js
v14.0.0-rc.1
NOTE
This is a pre-release. There is a high likelihood there will be more breaking changes introduced prior to the 14.0.0
release.
Breaking:
- Drops support for node v4, makes sure node v10 is supported (#1338)
- Reject invalid scalar value coercion (#1365, #1336)
- Removes
VariablesDefaultValueAllowed
validation rule, andProvidedNonNullArguments
becameProvidedRequiredArguments
(#1274) - Requires Interfaces to have at least on implementing Object
New:
- Parse new schema extensions (#1314, #1323)
- Export SDL AST types (#1315)
extendSchema
extended with spec-compliant SDL extensions (#1373)symbol.toStringTag
support (#1297)- Expose
getOperationRootType(schema, operationAST)
(#1345) - Package is marked as side-effect free (#1312)
Fixed:
v0.13.2
v0.13.1
New:
- Publish
.mjs
files for module code to support native esmodules (#1244) - Interface type definitions may now be extended with
extendSchema
(#1222) isValidNameError
utility is now exported as a non-throwing alternative toassertValidName
(#1237)ExectuableDefinitionNode
Flow type is now exported (#1241)
Fixes:
v0.13.0
Breaking:
- Updated to latest spec for SDL for multiple interface implementations (#1169)
To continue to support the pre-spec variation, use
parse(text, {allowLegacySDLImplementsInterfaces: true})
- Internal module
'graphql/language/kinds'
no longer directly exports enum values #1221Not that you were relying on internal modules, were you :)
New:
getDescription
helper function is now exported (#1165)- Allows parsing pre-spec object type SDL with
parse(text, {allowLegacySDLEmptyFields: true})
(#1171) - Add
introspectionFromSchema
utility function (#1187) - Add
lexicographicSortSchema
utility function (#1208) (#1220) - Allow use of legacy names during schema validation with
{allowedLegacyNames: ['__badName']}
(#1194)
Fixed:
- Only trigger "one instance of graphql" error in DEV environments, removing false errors from minified bundles. (#1174)
- Fix 'astFromValue' to correctly handle integers and strings (#1181)
- Fix getTypeMap() not including input types used in directives (#1189)
- Support executeSync with mutations. (#1198)
- Fix block string printing edge cases (#1190, #1212)
- Fix SourceLocation incorrect export causing rollup bundling to fail (#1210)
- Preserve
allowedLegacyNames
when usingextendSchema
(#1226) (added since v0.13.0-rc.1)
v0.13.0-rc.1
Breaking:
- Updated to latest spec for SDL for multiple interface implementations (#1169)
To continue to support the pre-spec variation, use
parse(text, {allowLegacySDLImplementsInterfaces: true})
- Internal module
'graphql/language/kinds'
no longer directly exports enum values #1221Not that you were relying on internal modules, were you :)
New:
getDescription
helper function is now exported (#1165)- Allows parsing pre-spec object type SDL with
parse(text, {allowLegacySDLEmptyFields: true})
(#1171) - Add
introspectionFromSchema
utility function (#1187) - Add
lexographicSortSchema
utility function (#1208) - Allow use of legacy names during schema validation with
{allowedLegacyNames: ['__badName']}
(#1194)
Fixed:
- Only trigger "one instance of graphql" error in DEV environments, removing false errors from minified bundles. (#1174)
- Fix 'astFromValue' to correctly handle integers and strings (#1181)
- Fix getTypeMap() not including input types used in directives (#1189)
- Support executeSync with mutations. (#1198)
- Fix block string printing edge cases (#1190, #1212)
- Fix SourceLocation incorrect export causing rollup bundling to fail (#1210)
v0.12.3
v0.12.2
v0.12.1
v0.12.0
🎁 Happy Holidays, GraphQL.js v0.12.0 is brings some of the biggest new changes of the year 🎉
This release includes new spec-compliance to existing experimental features, dramatically improves the quality of flow types, and introduces a number of new features and improved behaviors. As a result, there are a number of breaking changes to be aware of, especially for those building tools with GraphQL.js. A huge thank you to everyone who contributes to and uses GraphQL.js.
For a complete list of everything new, see the comparison to the last release.
New and Potentially Breaking:
-
Schema is now validated as part of a new exported function
validateSchema()
instead of during construction. (#1124)This exciting change allows the creating GraphQLSchema instances which are not yet valid, for example: representing types which don't yet have fields. This is very useful for those building schema directly from the new schema definition language. The new function
validateSchema()
, much like the existingvalidate()
, will return an Array of GraphQLError describing all issues with a schema. This also now includes blame sites in the original schema definition language, allowing much more helpful error messages when a schema is invalid. This might be breaking if your codebase relied on GraphQLSchema or any of the GraphQL type definition classes -
Validation errors for value literals (and variable values) are greatly improved, doing so results in a change to the standard set of validation rules. (#1126, #1133, #1144, #1153)
Code which relied on repeating the standard validation rules, or filtered them down using whitelists or blacklists may need to be updated. The rules
ArgumentsOfCorrectTypeRule
andDefaultValuesOfCorrectTypeRule
have been removed and are replaced with two new rulesValuesOfCorrectTypeRule
andVariablesDefaultValueAllowedRule
. While the quality of validation errors are improved by this change, this does not actually cause any existing valid documents to become invalid or vice-versa. -
GraphQL can now execute synchronously if all resolvers are synchronous functions. This means
execute()
may no longer return a Promise if execution completed synchronously. Thegraphql()
function will still always return a Promise, but a newgraphqlSync()
function guarantees synchronous completion (or throws if any resolver does not complete). This unlocks exciting new use cases for querying over static data-sets and caches. (#1115, #1120) -
Update to match Schema definition language latest specification. (#1102, #1117, #1139)
The schema definition language has some slight changes from the original experimental version through the standardization process. New
extend
forms were added and previously valid forms which omit fields liketype Foo {}
are now syntax errors and can be replaced withtype Foo
to indicate that fields are not yet defined. -
Descriptions in the schema definition language are now represented as preceding strings rather than comments. (#927)
This change follows the latest updates to the spec proposal (graphql/graphql-spec#90) after a long discussion between the merits of comments vs. literals as descriptions. To ease the migration to this latest change, existing comment-descriptions can still be used by providing options to the relevant functions. To read a SDL that uses comments as descriptions,
buildASTSchema(document, { commentDescriptions: true })
; to write an SDL using comments as descriptions,printSchema(schema, { commentDescriptions: true })
. -
Allow serializing scalars as null. (#1104)
Since
null
is a potentially valid value for a scalar to serialize to in some rare conditions, this change ensures that scalars which serialize tonull
no longer produce errors. This is breaking since custom scalars which relied on returningnull
to indicate failure should now either returnundefined
or throw an Error. -
Flow types for the parsed GraphQL AST and GraphQL Errors are now read only. This may result in new flow errors being detected in your codebase if you manipulate ASTs and Errors. (#1116, #1121, #1122)
New & Improved:
- Flow types have been added to
visit()
. As with any flow type improvement, this could expose real issues with your existing codebase. (#1155) - New predicate functions are exported for all GraphQL types. This should remove the need to use
instanceof
for any use of GraphQL.js (#1137) - The Wrapping Types
GraphQLNonNull
andGraphQLList
are now flow typed as covariant and operate like a function instead of a class. This means that you should no longer typenew GraphQLList(someType)
and instead favorGraphQLList(someType)
. (#1136) - A new function
printError()
is exported which highlights any blame lines from the original sources. Useful for printing errors to consoles. (#1129, #1131) - Improved aggregate NullableType and InputType flow types. As with any flow type improvement, this could expose real issues with your existing codebase. (#1128)
- A new function
getIntrospectionQuery()
is exported, and the existingintrospectionQuery
constant is deprecated. This helps improve the flow types and allows for some flexibility and options. (#1113) - Export ES6 modules so tools like Rollup and Webpack can use "tree shaking" for smaller builds. (#1105)
- More strict flow typing for Introspection results. (#1082)
- Improve error quality when receiving bad introspection data. (#1063)
- Ability to extend GraphQL errors with additional "extensions" properties. (#928)
- New value literal "Block String" for writing long-form text (#926)
- New predicate functions
isSpecifiedScalarType
,isIntrospectionType
, andisSpecifiedDirective
(#924). - Better coverage for
findBreakingChanges()
andfindDangerousChanges()
Fixed:
- Fix path argument for
visit()
for leaving visitors. (#1149) - Errors concerning multiple instances of GraphQL.js being in use at the same time are now reported much more clearly and in more scenarios. (73b804b)
- The
GraphQLArgs
flow type is now exported. (#1118) - Fix a possible infinite loop during validation for invalid queries in the OverlappingFields rule. (#1111)
- Subscriptions now ensure resolver errors are reported properly during initialization. (#1106, #1107)
- Ensure uniform parsing of named queries and anonymous queries (#1094)
- Fix elasticsearch errors being mistaken for GraphQL errors. (#1090)
- Avoid process is undefined error when used in the browser. (#1058)
- Fix mistake in how TypeInfo handles inline fragments without type (#1041)
- Fix mistake in how TypeInfo collects input types (#1143)
- Check
isDeprecated
instead ofdeprecationReason
inprintDeprecated()
(#1035) - Fix flow types for 'path' & 'parentType' of GraphQLResolveInfo (#1033)
- Fix utilization of argument default values in
buildASTSchema()
,extendSchema()
andbuildClientSchema()
. (#903)