1.0.2 • Published 2 years ago

graphql-type-ints v1.0.2

Weekly downloads
77
License
MIT
Repository
github
Last release
2 years ago

graphql-type-ints

GraphQL types for integers of arbitrary precision and bounds.

Javascript number type only has 53 bits of integer precision. This means it can't support 64 bit or higher integers without losing precision. To solve this, the library uses the new node bigint type.

Also often APIs want to restrict the range of values for an integer, this library also allows specifying a valid min and max range that will be validated.

Note: Depends on BigInt Spec support in the environment. BigInt is implemented in node >= 10.4.0.

Common Types

Provides these common types:

GraphQL TypeGraphQL KindJS TypeMinMax
GraphQLInt8INTnumber-(2^7)2^7-1
GraphQLUInt8INTnumber02^8-1
GraphQLNaturalInt8INTnumber12^8-1
GraphQLInt16INTnumber-(2^15)2^15-1
GraphQLUInt16INTnumber02^16-1
GraphQLNaturalInt16INTnumber12^16-1
GraphQLInt32INTnumber-(2^31)2^31-1
GraphQLUInt32INTnumber02^32-1
GraphQLNaturalInt32INTnumber12^32-1
GraphQLBigInt64STRINGbigint-(2^63)2^63-1
GraphQLUBigInt64STRINGbigint02^64-1
GraphQLNaturalBigInt64STRINGbigint12^64-1
GraphQLStringInt64STRINGstring-(2^63)2^63-1
GraphQLStringUInt64STRINGstring02^64-1
GraphQLNaturalStringInt64STRINGstring12^64-1

Example

import { makeExecutableSchema } from 'graphql-tools';
import { GraphQLInt8 } from 'graphql-type-ints';

const typeDefs = `
scalar GraphQLInt8

type Query {
  value(v: GraphQLInt8): UInt
}`;

const resolvers = {
  GraphQLInt8,
  Query: {
    value: (root, { v }) => v,
  },
};
let schema = makeExecutableSchema({ typeDefs, resolvers });

export default schema;

Custom Types

You can also create a custom GraphQL integer type using one of these functions:

FunctionGraphQL KindJS Type
createGraphQLNumberIntTypeINTnumber
createGraphQLBigIntTypeSTRINGbigint
createGraphQLStringIntTypeSTRINGstring

Each function takes the same parameters function(name, min ,max):

ParametersDescription
nameGraphQLScalarType name (must be unique)
minMin value of the integer inclusive
maxMax value of the integer inclusive

The function will validate that the min and max parameters are in the safe integer range to ensure that you don't lose precision from javascript number type.

Example

import { UINT32_MAX, createGraphQLBigIntType } from 'graphql-type-ints';

const NaturalBigInt = createGraphQLBigIntType('NaturalBigInt', 1, UINT32_MAX);