trufflesuite/truffle

View on GitHub
packages/db/src/meta/graph/types.ts

Summary

Maintainability
A
30 mins
Test Coverage
import { logger } from "@truffle/db/logger";
const debug = logger("db:graphql:types");

import type * as graphql from "graphql";
import type { IResolvers } from "@graphql-tools/utils";

import type {
  Collections,
  CollectionName,
  CollectionNameStyle,
  CollectionNameStyledAs,
  MutableCollectionName
} from "@truffle/db/meta/collections";
import * as Id from "@truffle/db/meta/id";
import type { Workspace } from "@truffle/db/meta/data";

/**
 * @category Definitions
 */
export type Definitions<C extends Collections> = {
  [N in CollectionName<C>]: Definition<C, N>;
};

/**
 * @category Definitions
 */
export type Definition<
  C extends Collections,
  N extends CollectionName<C>
> = Id.Definition<C, N> & {
  typeDefs: graphql.DocumentNode;
  resolvers?: IResolvers<any, Context<C>>;
  names: {
    [S in CollectionNameStyle]: CollectionNameStyledAs<S, C, N>;
  };
} & (N extends MutableCollectionName<C>
    ? { mutable: true }
    : { mutable?: false });

export interface Context<C extends Collections> {
  workspace: Workspace<C>;
}