@homebound/graphql-typescript-scalar-type-policies
TypeScript icon, indicating that this package has built-in type declarations

2.12.0 • 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.

Readme

Keywords

none

Package Sidebar

Install

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

Weekly Downloads

4,749

Version

2.12.0

License

none

Unpacked Size

4.91 kB

Total Files

5

Last publish

Collaborators

  • skelly451
  • tyambaohb
  • msalazar-homebound
  • lbittencurthb
  • maasha
  • jcharpentier
  • sneal88
  • kyeh
  • icampbellsmith
  • msoja-homebound
  • pmishra40
  • fmendeshb
  • arvinsiva
  • bholmes_hb
  • blimmer-
  • zgavin
  • hbitaccounts
  • levi-huynh
  • nbhargava-hb
  • apattersonatx-hb
  • pstone
  • lmunoz_homebound
  • allangaldino
  • eplata.homebound
  • roberth-gomez
  • dmcgarry
  • khalidwilliams
  • atrujillo
  • tylerr909_h
  • zovington
  • blambillottehomebound
  • shaberman
  • larryhomebound
  • cfrazier91
  • foxy
  • homebound-publisher
  • bdow
  • kskano
  • ghaislip