1.1.43 • Published 1 year ago

@digicatapult/apollo-type-validation-plugin v1.1.43

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
1 year ago

Apollo type validation plugin

A library for performing directive based validations against input values passed in a GraphQL query.

Usage

The library can be used to instantiate an Apollo server plugin which can be configured to perform the required validation checks. For example:

import { ApolloServer } from '@apollo/server'
import validationPlugin from '@digicatapult/apollo-type-validation-plugin'

const {
  plugin: typeValidationPlugin,
  directives: { arrayLengthDirective },
} = validationPlugin

const typeDefs = ...
const resolvers = ...

const server = new ApolloServer({
    schema,
    // build a plugin to get the complexity of a query before running the resolvers
    // allows us to set a max complexity per query, or meter rate-limiting by complexity
    plugins: [typeValidationPlugin({ schema, directives: [arrayLengthDirective()] })],
    allowBatchedHttpRequests: true
})

A worked example using the arrayLengthDirective can be found here.

Supported Directives

The following directives are currently supported:

maxArrayLength

A directive used to limit the maximum size of an input array that can be passed as part of an argument. For example:

# directive definition used by arrayLengthDirective
directive @maxArrayLength(length: Int!) on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION

type Query {
  echo(values: [Int!]! @maxArrayLength(length: 5)): [Echo!]!
}

type Echo {
  value: Int!
  times(number: [Int!]! @maxArrayLength(length: 2)): [Int!]!
}

In this schema the maximum number of elements that can be validly passed as values to the field echo is 5 whilst the maximum number that can be passed to number on the field times is 2.

boundedInteger

A directive used to bound the value of an integer that can be passed as an argument. For example:

# directive definition used by boundedIntegerDirective
directive @boundedInteger(min: Int!, max: Int!) on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION

type Query {
  echo(input: Int! @boundedInteger(min: 5, max: 10)): Echo!
}

type Echo {
  value: Int!
}

In this schema the value that can be validly passed as input to the field echo must be greater than or equal to 5 and less than or equal to 10.

1.1.43

1 year ago

1.1.42

1 year ago

1.1.41

1 year ago

1.1.40

1 year ago

1.1.39

1 year ago

1.1.38

1 year ago

1.1.37

1 year ago

1.1.36

1 year ago

1.1.34

1 year ago

1.1.35

1 year ago

1.1.33

1 year ago

1.1.32

1 year ago

1.1.31

1 year ago

1.1.30

1 year ago

1.1.29

2 years ago

1.1.28

2 years ago

1.1.27

2 years ago

1.1.26

2 years ago

1.1.25

2 years ago

1.1.24

2 years ago

1.1.23

2 years ago

1.1.22

2 years ago

1.1.21

2 years ago

1.1.19

2 years ago

1.1.18

2 years ago

1.1.17

2 years ago

1.1.9

2 years ago

1.1.8

2 years ago

1.1.7

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.12

2 years ago

1.1.11

2 years ago

1.1.10

2 years ago

1.1.20

2 years ago

1.1.16

2 years ago

1.1.15

2 years ago

1.1.14

2 years ago

1.1.13

2 years ago

1.1.1

2 years ago