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.
Description
The
ObjectID
scalar type does some great work ensuring that the datain the database maps to valid ObjectID values for MongoDB. However, in
order to use arguments supplied as ObjectID, we still need to convert
them to a
bson.ObjectId
type on-the-fly in resolvers or else we'll endup not matching documents that should be matched.
This change adds a dependency on the
bson
library so we can use itsObjectId
class as a means of serializing ObjectID data from theGraphQL API into a usable object for resolvers.
Example of code before this change:
And here's what it will look like afterward:
Similar to
Date
objects which are serialized appopriately in MongoDBif you use
Timestamp
, ObjectIDs should be parsed properly into theircorrect type before persistence into the database. By doing so, we're
ensuring that this type is always consistent.
Related #429
Type of change
Please delete options that are not relevant.
Screenshots/Sandbox (if appropriate/relevant):
Adding links to sandbox or providing screenshots can help us understand more about this PR and take action on it as appropriate
How Has This Been Tested?
For the following tests, create a query using an ObjectID both in its
field arguments and the return type:
Query.returned
, theid
passed inshould be an
instanceof ObjectId
.Returned.id
should beserialized to the client as a hexadecimal string.
should be serialized to an ObjectID when passed into the resolver.
Test Environment:
Checklist:
Further comments
I'm hoping that the solution I came up with to only import
ObjectId
from the BSON library is sufficient to maintain the small bundle size of this library.