com.walmartlabs.lacinia.util

Useful utility functions.

as-error-map

added in 0.16.0

(as-error-map t)(as-error-map t more-data)

Converts an exception into an error map, including a :message key, plus any additional keys and values via ex-data.

In the second arity, a further map of values to be merged into the error map can be provided.

attach-resolvers

(attach-resolvers schema resolver-m)

Given a GraphQL schema and a map of keywords to resolver fns, replace each placeholder keyword in the schema with the actual resolver fn.

resolver-m is a map from of resolver functions and resolver function factories. The keys are usually keywords, but may be any value including string or symbol.

When the value in the :resolve key is a simjple value, it is simply replaced with the corresponding resolver function from resolver-m.

Alternately, the :resolve value may be a seq, indicating a resolver factory.

The first value in the seq is used to select the resolver factory function, which is then invoked, via apply, with the remaining values in the seq.

attach-scalar-transformers

(attach-scalar-transformers schema transform-m)

Given a GraphQL schema, attaches functions in the transform-m map to the schema.

Inside each scalar definition, the :parse and :serialize keys are replaced with values from the transform-m map.

In the initial schema, use a keyword for the :parse and :serialize keys, then provide a corresponding value in transform-m.

attach-streamers

added in 0.19.0

(attach-streamers schema streamer-map)

Attaches stream handler functions to subscriptions.

Replaces the :stream key inside subscription operations using the same logic as attach-resolvers.

inject-descriptions

added in 0.27.0

(inject-descriptions schema documentation)

Injects documentation into a schema, as :description keys on various elements within the schema.

The documentation map keys are keywords with a particular structure, and the values are formatted Markdown strings.

The keys are one of the following forms:

  • :Type
  • :Type/name
  • :Type/name.argument

A simple Type will document an object, input object, interface, union, or enum.

The second form is used to document a field of an object, input object, or interface, or to document a specific value of an enum (e.g., :Episode/NEW_HOPE).

The final form is used to document an argument to a field (it does not make sense for enums).

Additionally, the Type can be queries, mutations, or subscriptions, in which case the name will be the name of the operation (e.g., :queries/episode).

An exception is thrown if an element identified by a key does not exist.

See parse-docs.

inject-enum-transformers

added in 0.36.0

(inject-enum-transformers schema transform-m)

Given a GraphQL schema, injects transformers for enums into the schema.

transform-m maps from the scalar name (a keyword) to a map with keys :parse and/or :serialize; these are applied to the Enum.

Each enum must exist, or an exception is thrown.

inject-resolvers

added in 0.27.0

(inject-resolvers schema resolvers)

Adds resolvers to the schema. The resolvers map is a map of keywords to field resolvers (as functions, or FieldResolver instances).

The key identifies where the resolver should be added, in the form :Type/field.

Alternately, the key may be of the format :queries/name (or :mutations/name or :subscriptions/name).

Throws an exception if the target of the resolver can’t be found.

In many cases, this is a full replacement for attach-resolvers, but the two functions can also be used in conjunction with each other.

inject-scalar-transformers

added in 0.37.0

(inject-scalar-transformers schema transform-m)

Given a GraphQL schema, injects transformers for scalars into the schema.

transform-m maps from the scalar name (a keyword) to a map with keys :parse and :serialize; these are applied to the Enum.

Each scalar must exist, or an exception is thrown.

inject-streamers

added in 0.37.0

(inject-streamers schema streamers)

As inject-resolvers but the updated key is :stream, thereby supplying a subscription streamer function.