@eonian/graphql-typescript-scalar-type-policies

1.0.6 • Public • Published

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.

/@eonian/graphql-typescript-scalar-type-policies/

    Package Sidebar

    Install

    npm i @eonian/graphql-typescript-scalar-type-policies

    Weekly Downloads

    50

    Version

    1.0.6

    License

    none

    Unpacked Size

    6.34 kB

    Total Files

    11

    Last publish

    Collaborators

    • leovs09
    • ssolovyev