/**
 * This file was automatically generated by GraphQL Nexus
 * Do not make changes to this file directly
 */

import { core } from "@nexus/schema";
import { FieldAuthorizeResolver } from "@nexus/schema/dist/plugins/fieldAuthorizePlugin";
import * as ctx from "../data-sources/Context";
import * as db from "./ghost-db-types";
declare global {
  interface NexusGenCustomInputMethods<TypeName extends string> {
    date<FieldName extends string>(
      fieldName: FieldName,
      opts?: core.ScalarInputFieldConfig<
        core.GetGen3<"inputTypes", TypeName, FieldName>
      >
    ): void; // "Date";
  }
}
declare global {
  interface NexusGenCustomOutputMethods<TypeName extends string> {
    date<FieldName extends string>(
      fieldName: FieldName,
      ...opts: core.ScalarOutSpread<TypeName, FieldName>
    ): void; // "Date";
  }
}

declare global {
  interface NexusGen extends NexusGenTypes {}
}

export interface NexusGenInputs {}

export interface NexusGenEnums {}

export interface NexusGenRootTypes {
  Post: db.Posts;
  Query: {};
  User: db.Users;
  String: string;
  Int: number;
  Float: number;
  Boolean: boolean;
  ID: string;
  Date: Date;
}

export interface NexusGenAllTypes extends NexusGenRootTypes {}

export interface NexusGenFieldTypes {
  Post: {
    // field return type
    html: string; // String!
    slug: string; // String!
    title: string; // String!
    uuid: string; // String!
  };
  Query: {
    // field return type
    me: NexusGenRootTypes["User"] | null; // User
    postById: NexusGenRootTypes["Post"]; // Post!
    userById: NexusGenRootTypes["User"]; // User!
  };
  User: {
    // field return type
    accessibility: string | null; // String
    bio: string | null; // String
    coverImage: string | null; // String
    createdAt: Date; // Date!
    createdBy: NexusGenRootTypes["User"]; // User!
    email: string; // String!
    facebook: string | null; // String
    ghostAuthAccessToken: string | null; // String
    ghostAuthId: string | null; // String
    id: string; // String!
    lastSeen: Date | null; // Date
    locale: string | null; // String
    location: string | null; // String
    metaDescription: string | null; // String
    metaTitle: string | null; // String
    name: string; // String!
    profileImage: string | null; // String
    slug: string; // String!
    status: string; // String!
    tour: string | null; // String
    twitter: string | null; // String
    updatedAt: Date | null; // Date
    updatedBy: string | null; // String
    visibility: string; // String!
    website: string | null; // String
  };
}

export interface NexusGenArgTypes {
  Query: {
    postById: {
      // args
      id: string; // ID!
    };
    userById: {
      // args
      id: string; // ID!
    };
  };
}

export interface NexusGenAbstractResolveReturnTypes {}

export interface NexusGenInheritedFields {}

export type NexusGenObjectNames = "Post" | "Query" | "User";

export type NexusGenInputNames = never;

export type NexusGenEnumNames = never;

export type NexusGenInterfaceNames = never;

export type NexusGenScalarNames =
  | "Boolean"
  | "Date"
  | "Float"
  | "ID"
  | "Int"
  | "String";

export type NexusGenUnionNames = never;

export interface NexusGenTypes {
  context: ctx.Context;
  inputTypes: NexusGenInputs;
  rootTypes: NexusGenRootTypes;
  argTypes: NexusGenArgTypes;
  fieldTypes: NexusGenFieldTypes;
  allTypes: NexusGenAllTypes;
  inheritedFields: NexusGenInheritedFields;
  objectNames: NexusGenObjectNames;
  inputNames: NexusGenInputNames;
  enumNames: NexusGenEnumNames;
  interfaceNames: NexusGenInterfaceNames;
  scalarNames: NexusGenScalarNames;
  unionNames: NexusGenUnionNames;
  allInputTypes:
    | NexusGenTypes["inputNames"]
    | NexusGenTypes["enumNames"]
    | NexusGenTypes["scalarNames"];
  allOutputTypes:
    | NexusGenTypes["objectNames"]
    | NexusGenTypes["enumNames"]
    | NexusGenTypes["unionNames"]
    | NexusGenTypes["interfaceNames"]
    | NexusGenTypes["scalarNames"];
  allNamedTypes:
    | NexusGenTypes["allInputTypes"]
    | NexusGenTypes["allOutputTypes"];
  abstractTypes: NexusGenTypes["interfaceNames"] | NexusGenTypes["unionNames"];
  abstractResolveReturn: NexusGenAbstractResolveReturnTypes;
}

declare global {
  interface NexusGenPluginTypeConfig<TypeName extends string> {}
  interface NexusGenPluginFieldConfig<
    TypeName extends string,
    FieldName extends string
  > {
    /**
     * Authorization for an individual field. Returning "true"
     * or "Promise<true>" means the field can be accessed.
     * Returning "false" or "Promise<false>" will respond
     * with a "Not Authorized" error for the field.
     * Returning or throwing an error will also prevent the
     * resolver from executing.
     */
    authorize?: FieldAuthorizeResolver<TypeName, FieldName>;
  }
  interface NexusGenPluginSchemaConfig {}
}
