1.0.6 • Published 12 months ago

@eonian/graphql-typescript-scalar-type-policies v1.0.6

Weekly downloads
-
License
-
Repository
-
Last release
12 months ago

NPM

This is a graphql-code-generator plugin that generates type policies for every field that uses custom scalars.

Overview

Given a config like:

generates:
  integration/graphql-types.ts:
    config:
      scalars:
        Date: "src/dates#Date"
      scalarTypePolicies:
        Date: "src/dates#dateTypePolicy"

And a schema that uses Date fields:

scalar Date

type Author {
    name: String!
    date: Date
}

This plugin generates the following snippet in the output file:

import { dateTypePolicy } from "src/dates";

export const scalarTypePolicies = {
  Author: { fields: { date: dateTypePolicy } },
};

Where the dateTypePolicy const should implement the Apollo Client FieldPolicy.

Which you can then pass to Apollo's InMemoryCache:

new InMemoryCache({ typePolicies: scalarTypePolicies })

And you can implement a field policy like:

export const dateTypePolicy: FieldPolicy<Date, string> = {
  merge: (_, incoming) => {
    if (isNullOrUndefined(incoming)) {
      // It's important for these methods to return null if passed null
      return incoming;
    } else if (incoming instanceof Date) {
      // In tests our mocks already have Date
      return incoming;
    } else {
      return parseISO(incoming as string);
    }
  },
};

Note that this will handle reading data from the cache; to handle submitting custom scalars (i.e. Date) as variables / input to mutations, your custom scalars should implement toJSON(), which Apollo will implicitly calls when putting them on the wire.

1.0.6

12 months ago

1.0.5

12 months ago

1.0.4

12 months ago

1.0.3

12 months ago

1.0.2

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago