1.1.1 • Published 9 months ago

graphst v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months 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

9 months ago

1.1.0

9 months ago

1.0.2

11 months ago

1.0.1

11 months ago

1.0.9

11 months ago

1.0.8

11 months ago

1.0.7

11 months ago

1.0.6

11 months ago

1.0.5

11 months ago

1.0.4

11 months ago

1.0.3

11 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.15

9 months ago

1.0.14

9 months ago

1.0.13

10 months ago

1.0.12

10 months ago

1.0.0

1 year ago