1.1.1 • Published 2 years ago

graphst v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Graphst(Graphql Style)

Graphst is a lightweight and easy-to-use library for creating GraphQL servers in a monolithic architecture. It provides a built-in container that handles dependency management and promotes the use of singletons.

Features

  • Simple and straightforward setup for GraphQL server
  • Built-in container for dependency management

:warning: Important Note: Graphst currently only supports the Code-First approach.

Installation

npm install graphst

Usage

import { GraphstServer } from 'graphst'

const server = new GraphstServer()

server.start(4000, () => {
  console.log('Server start 🕶️');
})

Auto Resolving

// AgeService
@Injectable()
class AgeService {
  getAge() {
    return ...
  }
}

// User
@Injectable()
class User {
  @Inject(() => AgeService)
  readonly ageService!: AgeService;

  getUserAge() {
    return this.ageService.getAge();
  }
}

Use Query/Mutation/FiledResolver

import { Query, Mutation, FieldResolver } from 'graphst'

@Query({
  returnType: () => Project,
})
getProject(): Project {
  return ...
}

@Mutation({
  args: {
    id: () => GraphQLInt,
  },
  returnType: () => GraphQLString,
})
setProject(
  _: null,
  args: {
    id: number;
  }
): string {
  return ...
}

@FieldResolver({
  parent: () => Project,
  returnType: () => GraphQLBoolean,
  name: 'hasProject',
  args: {
    keys: () => GraphQLList(GraphQLInt),
  },
})
hasProjectByKeys(parent: Project, args: { keys?: number[] }): boolean {
  return ...
}

Use Entity

@ObjectType()
class Project {
  @Field(() => GraphQLInt)
  id!: number;

  @Field(() => GraphQLString)
  name!: string;
}

Auto Custom Graphql Type

Automatic registration of user-defined GraphQL types in the schema

enum LogType {
  INFO = 'info',
  ERROR = 'error',
}

const GraphqlLogType = new GraphQLEnumType({ name: 'LogType', values: { INFO: { value: LogType.INFO }, ERROR: { value: LogType.ERROR }, }, });

const GraphqlInputLogType = new GraphQLInputObjectType({ name: 'InputLogType', fields: { type: { type: GraphqlLogType, description: 'log type' }, }, });

const GraphqlTestObject = new GraphQLObjectType({ name: 'TestObject', fields: { name: { type: GraphQLString }, }, });

@ObjectType('Log') class Log { @Field(() => GraphqlLogType) getLog!: LogType; }

@Mutation({ args: { names: () => GraphqlInputLogType, }, // Automatic detection and addition of underlying types when using GraphqlList returnType: () => GraphQLList(GraphqlTestObject), })

```gql
type Log {
  getLog: LogType
}

enum LogType {
  INFO
  ERROR
}

input InputLogType {
  """log type"""
  type: LogType
}

type TestObject {
  name: String
}

Context & MiddleWare

:warning: Important Note: The FieldResolver is not affected by the resolver middleware.

class AddRole implements MiddlewareInterface {
  // essential
  handle(props, next) {
    return next({
      ...props,
      context: {
        ...props.context,
        authRole: ['admin'],
      },
    });
  }
}
// global middleware
server = new GraphstServer({
  middlewares: [AddRole],
});

...

// resolver group middleware
@Resolver({
  key: () => Project,
  middlewares: [AddRole],
})

...

// query middleware, Also available in mutation and FieldResolver
@Query({
  middlewares: [AddRole],
  returnType: () => GraphQLBoolean,
})

Resolver Parameter Order

This is a decorator that selects the location of the resolver's parameters. If no decorators are used, the parameters are assigned in the default order.

@Query({
  returnType: () => Project,
})
getProject(@Context() context: any): Project {
  ...
}

@Mutation({
  args: {
    id: () => GraphQLInt,
  },
  returnType: () => GraphQLString,
})
setProject(@Args() args: { id: number }): string {
  ...
}

@FieldResolver({
  parent: () => Project,
  ...
})
isProject(
  _: null,
  __: null,
  ___: null,
  @Parent() parent: Project,
  @Args() args: { keys?: number[] }
): boolean {
  ...
}
1.1.1

2 years ago

1.1.0

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

1.0.0

2 years ago