Home Reference Source

src/constants.js

// @flow
/* eslint-disable max-len */
/* eslint-disable flowtype/no-weak-types */

// kinds from graphql language
export {
  NAME,
  ARGUMENT,
  NAMED_TYPE,
  LIST_TYPE,
  NON_NULL_TYPE,
  FIELD_DEFINITION,
  DIRECTIVE,
  LIST,
  STRING
} from 'graphql/language/kinds';

// template context type
export type templateContextType = {
  authorize: boolean,
  isUserType: boolean,
  typeName: string,
  TypeName: string,
  User: string,
  userRoles: any,
  docRoles: any,
  firstUserRole: string,
  roleField: string,
  singularFields: Array<any>,
  paginatedFields: Array<any>
};

// generator configuration type
export type configCodeType = {
  // getting the context
  inputSchema: any,
  userType: string,

  // default template as starting point
  defaultTemplate: string,

  // getting the default templates
  basePath: Array<string>,
  baseExtension?: string,
  baseEncoding?: string,
  baseCommonDir?: string,
  baseDefaultDir?: string,
  baseGetNameFunc?: Function,

  // getting the auth templates
  authPath?: Array<string>,
  authExtension?: string,
  authEncoding?: string,
  authCommonDir?: string,
  authDefaultDir?: string,
  authGetNameFunc?: Function
};

export type configPartialType = {
  basePath: Array<string>,
  directoryPath: Array<string>,
  extension?: string,
  encoding?: string,
  getNameFunc?: Function
};

// files encoding
export const ENCODING = 'utf8';

// templates naming
export const TEMPLATE_EXTENSION = '.template';
export const TEMPLATES_DIR = 'templates';
export const TEMPLATES_MODEL_DIR = 'model';
export const TEMPLATES_RESOLVER_DIR = 'resolver';
export const TEMPLATES_AUTH_DIR = 'auth';
export const TEMPLATES_COMMON_DIR = 'common';
export const TEMPLATES_DEFAULT_DIR = 'default';
export const TEMPLATES_DEFAULT_TEMPLATE = 'default';
export const MODEL = 'model';
export const RESOLVER = 'resolver';
export const SCHEMA = 'schema';

// for field associations
export const SINGULAR = 'singular';
export const PAGINATED = 'paginated';

// name of the @authorize directive, which triggers authorization logic
export const AUTHORIZE_DIRECTIVE = 'authorize';

// authorization modes
export const CREATE = 'create';
export const READ = 'read'; // 'read' means both, 'readOne' and 'readMany'
export const READ_ONE = 'readOne';
export const READ_MANY = 'readMany';
export const UPDATE = 'update';
export const DELETE = 'delete';

// valid input modes from @authorize directive
export const MODES = [CREATE, READ, READ_ONE, READ_MANY, UPDATE, DELETE];

// valid output mode for code generator
export const CODE_MODES = [CREATE, READ_ONE, READ_MANY, UPDATE, DELETE];

// for the role definitions
export const AUTH_ROLE = 'authRole';
export const USER_ROLE = 'userRole';
export const DOC_ROLE = 'docRole';
export const FOR = 'for';
export const USER_MODEL = 'user';
export const STRING_LITERAL = 'String';
export const STRING_LIST = '[String]';
export const USER_LITERAL = 'User';
export const USER_LIST = '[User]';
export const ROLE_FIELD_DEFAULT = 'role';

// handling of id
export const ID_FIELD = '_id';
export const ID_SINGULAR = 'Id';
export const ID_PLURAL = 'Ids';

// special roles
export const THIS = 'this';
export const WORLD = 'world';
export const NO_ROLE = '<no-role>';
export const NO_USER = '<no-user>';

// test directories
export const SRC_DIR = 'src';
export const TEST_DIR = '__tests__';
export const TEST_GQL_DATA = 'data';
export const TEST_CODE = 'code';
export const TEST_MODEL = 'model';
export const TEST_RESOLVER = 'resolver';
export const TEST_GQL_EXTENSION = '.graphql';
export const TEST_EXPECTED_CODE = 'expected';
export const TEST_GENERATED_CODE = 'generated';
export const TEST_MODEL_EXTENSION = '.js';
export const TEST_MODEL_EXTENSION2 = 'model';
export const TEST_RESOLVER_EXTENSION = '.js';
export const TEST_RESOLVER_EXTENSION2 = 'resolver';