1.1.43 • Published 2 months ago

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

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
2 months 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

2 months ago

1.1.42

2 months ago

1.1.41

2 months ago

1.1.40

2 months ago

1.1.39

3 months ago

1.1.38

3 months ago

1.1.37

3 months ago

1.1.36

3 months ago

1.1.34

4 months ago

1.1.35

4 months ago

1.1.33

4 months ago

1.1.32

4 months ago

1.1.31

4 months ago

1.1.30

4 months ago

1.1.29

4 months ago

1.1.28

4 months ago

1.1.27

4 months ago

1.1.26

4 months ago

1.1.25

5 months ago

1.1.24

5 months ago

1.1.23

5 months ago

1.1.22

5 months ago

1.1.21

5 months ago

1.1.19

6 months ago

1.1.18

6 months ago

1.1.17

6 months ago

1.1.9

7 months ago

1.1.8

7 months ago

1.1.7

7 months ago

1.1.6

8 months ago

1.1.5

9 months ago

1.1.4

9 months ago

1.1.3

9 months ago

1.1.2

9 months ago

1.1.12

7 months ago

1.1.11

7 months ago

1.1.10

7 months ago

1.1.20

5 months ago

1.1.16

6 months ago

1.1.15

6 months ago

1.1.14

7 months ago

1.1.13

7 months ago

1.1.1

1 year ago