@orion-js/graphql 3.2.3 → 3.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/lib/buildSchema/getMutation.d.ts +2 -4
  2. package/lib/buildSchema/getMutation.js +2 -2
  3. package/lib/buildSchema/getQuery.d.ts +2 -4
  4. package/lib/buildSchema/getQuery.js +2 -2
  5. package/lib/buildSchema/getResolvers/index.d.ts +2 -5
  6. package/lib/buildSchema/getResolvers/index.js +2 -1
  7. package/lib/buildSchema/getResolvers/index.test.js +2 -2
  8. package/lib/buildSchema/getSubscription.d.ts +2 -4
  9. package/lib/buildSchema/getSubscription.js +3 -3
  10. package/lib/buildSchema/getSubscriptions/index.d.ts +2 -4
  11. package/lib/buildSchema/getSubscriptions/index.js +2 -1
  12. package/lib/buildSchema/getSubscriptions/index.test.js +4 -4
  13. package/lib/buildSchema/getType/index.d.ts +2 -1
  14. package/lib/buildSchema/getType/index.js +9 -0
  15. package/lib/buildSchema/index.d.ts +2 -1
  16. package/lib/index.d.ts +1 -0
  17. package/lib/index.js +1 -0
  18. package/lib/resolversSchemas/getModelLoadedResolvers.d.ts +3 -0
  19. package/lib/resolversSchemas/getModelLoadedResolvers.js +21 -0
  20. package/lib/service/global.d.ts +10 -0
  21. package/lib/service/global.js +51 -0
  22. package/lib/service/index.d.ts +2 -0
  23. package/lib/service/index.js +14 -0
  24. package/lib/service/index.test.d.ts +1 -0
  25. package/lib/service/index.test.js +63 -0
  26. package/lib/service/model.d.ts +14 -0
  27. package/lib/service/model.js +44 -0
  28. package/lib/service/model.test.d.ts +1 -0
  29. package/lib/service/model.test.js +126 -0
  30. package/lib/startGraphQL.test.js +2 -2
  31. package/lib/startWebsocket.test.js +3 -3
  32. package/lib/types/startGraphQL.d.ts +8 -1
  33. package/package.json +6 -4
@@ -1,5 +1,3 @@
1
1
  import { GraphQLObjectType } from 'graphql';
2
- export default function ({ resolvers, ...options }: {
3
- [x: string]: any;
4
- resolvers: any;
5
- }): Promise<GraphQLObjectType<any, any>>;
2
+ import { StartGraphQLOptions } from '../types/startGraphQL';
3
+ export default function (options: StartGraphQLOptions): Promise<GraphQLObjectType<any, any>>;
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const graphql_1 = require("graphql");
7
7
  const getResolvers_1 = __importDefault(require("./getResolvers"));
8
8
  const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
9
- async function default_1({ resolvers, ...options }) {
10
- const fields = await (0, getResolvers_1.default)({ resolvers, mutation: true, options });
9
+ async function default_1(options) {
10
+ const fields = await (0, getResolvers_1.default)(options, true);
11
11
  if ((0, isEmpty_1.default)(fields))
12
12
  return null;
13
13
  return new graphql_1.GraphQLObjectType({
@@ -1,5 +1,3 @@
1
1
  import { GraphQLObjectType } from 'graphql';
2
- export default function ({ resolvers, ...options }: {
3
- [x: string]: any;
4
- resolvers: any;
5
- }): Promise<GraphQLObjectType<any, any>>;
2
+ import { StartGraphQLOptions } from '../types/startGraphQL';
3
+ export default function (options: StartGraphQLOptions): Promise<GraphQLObjectType<any, any>>;
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const graphql_1 = require("graphql");
7
7
  const getResolvers_1 = __importDefault(require("./getResolvers"));
8
8
  const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
9
- async function default_1({ resolvers, ...options }) {
10
- const fields = await (0, getResolvers_1.default)({ resolvers, mutation: false, options });
9
+ async function default_1(options) {
10
+ const fields = await (0, getResolvers_1.default)(options, false);
11
11
  if ((0, isEmpty_1.default)(fields))
12
12
  return null;
13
13
  return new graphql_1.GraphQLObjectType({
@@ -1,6 +1,3 @@
1
1
  import { GraphQLFieldConfig } from 'graphql';
2
- export default function ({ resolvers, mutation, options }: {
3
- resolvers: any;
4
- mutation: any;
5
- options: any;
6
- }): Promise<import("graphql/jsutils/ObjMap").ObjMap<GraphQLFieldConfig<any, any, any>>>;
2
+ import { StartGraphQLOptions } from '../../types/startGraphQL';
3
+ export default function (options: StartGraphQLOptions, mutation: boolean): Promise<import("graphql/jsutils/ObjMap").ObjMap<GraphQLFieldConfig<any, any, any>>>;
@@ -7,7 +7,8 @@ const getType_1 = __importDefault(require("../getType"));
7
7
  const getArgs_1 = __importDefault(require("../getArgs"));
8
8
  const errorHandler_1 = __importDefault(require("../../errorHandler"));
9
9
  const resolversStore_1 = require("./resolversStore");
10
- async function default_1({ resolvers, mutation, options }) {
10
+ async function default_1(options, mutation) {
11
+ const { resolvers } = options;
11
12
  const filteredResolvers = Object.keys(resolvers)
12
13
  .map(key => {
13
14
  return {
@@ -52,8 +52,8 @@ describe('Test get resolvers schema', () => {
52
52
  });
53
53
  const resolvers = { globalResolver };
54
54
  const mutation = false;
55
- const options = {};
56
- const schema = await (0, index_1.default)({ resolvers, mutation, options });
55
+ const options = { resolvers };
56
+ const schema = await (0, index_1.default)(options, mutation);
57
57
  expect(schema.globalResolver.type.toString()).toEqual('TestModel');
58
58
  expect(schema.globalResolver.args).toHaveProperty('userId');
59
59
  expect(await schema.globalResolver.resolve(null, { userId: '1' })).toEqual({
@@ -1,5 +1,3 @@
1
1
  import { GraphQLObjectType } from 'graphql';
2
- export default function ({ subscriptions, ...options }: {
3
- [x: string]: any;
4
- subscriptions: any;
5
- }): Promise<GraphQLObjectType<any, any>>;
2
+ import { StartGraphQLOptions } from '../types/startGraphQL';
3
+ export default function (options: StartGraphQLOptions): Promise<GraphQLObjectType>;
@@ -5,10 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const graphql_1 = require("graphql");
7
7
  const getSubscriptions_1 = __importDefault(require("./getSubscriptions"));
8
- async function default_1({ subscriptions, ...options }) {
9
- if (!subscriptions)
8
+ async function default_1(options) {
9
+ if (!options.subscriptions)
10
10
  return null;
11
- const fields = await (0, getSubscriptions_1.default)({ subscriptions, options });
11
+ const fields = await (0, getSubscriptions_1.default)(options);
12
12
  return new graphql_1.GraphQLObjectType({
13
13
  name: 'Subscription',
14
14
  fields
@@ -1,4 +1,2 @@
1
- export default function ({ subscriptions, options }: {
2
- subscriptions: any;
3
- options: any;
4
- }): Promise<{}>;
1
+ import { StartGraphQLOptions } from '../../types/startGraphQL';
2
+ export default function (options: StartGraphQLOptions): Promise<{}>;
@@ -5,7 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getType_1 = __importDefault(require("../getType"));
7
7
  const getArgs_1 = __importDefault(require("../getArgs"));
8
- async function default_1({ subscriptions, options }) {
8
+ async function default_1(options) {
9
+ const { subscriptions } = options;
9
10
  const fields = {};
10
11
  for (const key of Object.keys(subscriptions)) {
11
12
  const subscription = subscriptions[key];
@@ -24,7 +24,7 @@ describe('Test get subscriptions schema', () => {
24
24
  __metadata("design:type", String)
25
25
  ], TestParams.prototype, "userId", void 0);
26
26
  TestParams = __decorate([
27
- (0, typed_model_1.TypedModel)()
27
+ (0, typed_model_1.TypedSchema)()
28
28
  ], TestParams);
29
29
  let TestModel = class TestModel {
30
30
  };
@@ -37,15 +37,15 @@ describe('Test get subscriptions schema', () => {
37
37
  __metadata("design:type", Number)
38
38
  ], TestModel.prototype, "age", void 0);
39
39
  TestModel = __decorate([
40
- (0, typed_model_1.TypedModel)()
40
+ (0, typed_model_1.TypedSchema)()
41
41
  ], TestModel);
42
42
  const modelSub = (0, __1.subscription)({
43
43
  params: TestParams,
44
44
  returns: TestModel
45
45
  });
46
46
  const subscriptions = { modelSub };
47
- const options = {};
48
- const schema = await (0, index_1.default)({ subscriptions, options });
47
+ const options = { subscriptions, resolvers: {} };
48
+ const schema = await (0, index_1.default)(options);
49
49
  expect(schema.modelSub.type.toString()).toEqual('TestModel');
50
50
  expect(schema.modelSub.args).toHaveProperty('userId');
51
51
  });
@@ -1 +1,2 @@
1
- export default function getGraphQLType(type: any, options: any): any;
1
+ import { StartGraphQLOptions } from '../../types/startGraphQL';
2
+ export default function getGraphQLType(type: any, options: StartGraphQLOptions): any;
@@ -11,6 +11,7 @@ const getScalar_1 = __importDefault(require("./getScalar"));
11
11
  const getTypeAsResolver_1 = __importDefault(require("./getTypeAsResolver"));
12
12
  const getStaticFields_1 = require("../../resolversSchemas/getStaticFields");
13
13
  const getDynamicFields_1 = require("../../resolversSchemas/getDynamicFields");
14
+ const getModelLoadedResolvers_1 = require("../../resolversSchemas/getModelLoadedResolvers");
14
15
  function getGraphQLType(type, options) {
15
16
  if (!type) {
16
17
  throw new Error('Type is undefined');
@@ -63,6 +64,14 @@ function getGraphQLType(type, options) {
63
64
  throw new Error(`Error getting resolver type for resolver "${resolver.key}": ${error.message}`);
64
65
  }
65
66
  }
67
+ for (const resolver of (0, getModelLoadedResolvers_1.getModelLoadedResolvers)(model, options)) {
68
+ try {
69
+ fields[resolver.key] = (0, getTypeAsResolver_1.default)({ resolver, getGraphQLType, options, model });
70
+ }
71
+ catch (error) {
72
+ throw new Error(`Error getting resolver type for resolver "${resolver.key}": ${error.message}`);
73
+ }
74
+ }
66
75
  return fields;
67
76
  }
68
77
  });
@@ -1,2 +1,3 @@
1
1
  import { GraphQLSchema } from 'graphql';
2
- export default function (options: any): Promise<GraphQLSchema>;
2
+ import { StartGraphQLOptions } from '../types/startGraphQL';
3
+ export default function (options: StartGraphQLOptions): Promise<GraphQLSchema>;
package/lib/index.d.ts CHANGED
@@ -8,3 +8,4 @@ import getBasicResultQuery from './resolversSchemas/getBasicResultQuery';
8
8
  import * as GraphQL from 'graphql';
9
9
  export { GraphQL, startGraphQL, startGraphiQL, resolversSchemas, ResolverParams, serializeSchema, subscription, getBasicResultQuery };
10
10
  export * from './types';
11
+ export * from './service';
package/lib/index.js CHANGED
@@ -43,3 +43,4 @@ exports.getBasicResultQuery = getBasicResultQuery_1.default;
43
43
  const GraphQL = __importStar(require("graphql"));
44
44
  exports.GraphQL = GraphQL;
45
45
  __exportStar(require("./types"), exports);
46
+ __exportStar(require("./service"), exports);
@@ -0,0 +1,3 @@
1
+ import { Model } from '@orion-js/models';
2
+ import { StartGraphQLOptions } from '../types/startGraphQL';
3
+ export declare function getModelLoadedResolvers(model: Model, options: StartGraphQLOptions): any[];
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModelLoadedResolvers = void 0;
4
+ function getModelLoadedResolvers(model, options) {
5
+ if (!options.modelsResolvers)
6
+ return [];
7
+ const resolvers = options.modelsResolvers[model.name];
8
+ if (!resolvers)
9
+ return [];
10
+ const keys = Object.keys(resolvers);
11
+ return keys
12
+ .map(key => {
13
+ const resolver = resolvers[key];
14
+ return {
15
+ ...resolver,
16
+ key
17
+ };
18
+ })
19
+ .filter(resolver => !resolver.private);
20
+ }
21
+ exports.getModelLoadedResolvers = getModelLoadedResolvers;
@@ -0,0 +1,10 @@
1
+ import { GlobalResolverResolve, ResolverOptions, Resolver } from '@orion-js/resolvers';
2
+ export declare function Resolvers(): ClassDecorator;
3
+ export interface GlobalResolverPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
4
+ value?: GlobalResolverResolve;
5
+ }
6
+ export declare function Query(options: Omit<ResolverOptions<any>, 'resolve' | 'mutation'>): (target: any, propertyKey: string, descriptor: GlobalResolverPropertyDescriptor) => void;
7
+ export declare function Mutation(options: Omit<ResolverOptions<any>, 'resolve' | 'mutation'>): (target: any, propertyKey: string, descriptor: GlobalResolverPropertyDescriptor) => void;
8
+ export declare function getServiceResolvers(target: any): {
9
+ [key: string]: Resolver<GlobalResolverResolve>;
10
+ };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServiceResolvers = exports.Mutation = exports.Query = exports.Resolvers = void 0;
4
+ const services_1 = require("@orion-js/services");
5
+ const resolvers_1 = require("@orion-js/resolvers");
6
+ const helpers_1 = require("@orion-js/helpers");
7
+ function Resolvers() {
8
+ return function (target) {
9
+ (0, services_1.Service)()(target);
10
+ target.prototype.service = target;
11
+ };
12
+ }
13
+ exports.Resolvers = Resolvers;
14
+ function Query(options) {
15
+ return function (target, propertyKey, descriptor) {
16
+ if (!descriptor.value)
17
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
18
+ target.resolvers = target.resolvers || {};
19
+ target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
20
+ ...options,
21
+ resolve: async (params, viewer) => {
22
+ const instance = (0, services_1.getInstance)(target.service);
23
+ return await instance[propertyKey](params, viewer);
24
+ }
25
+ });
26
+ };
27
+ }
28
+ exports.Query = Query;
29
+ function Mutation(options) {
30
+ return function (target, propertyKey, descriptor) {
31
+ if (!descriptor.value)
32
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
33
+ target.resolvers = target.resolvers || {};
34
+ target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
35
+ ...options,
36
+ mutation: true,
37
+ resolve: async (params, viewer) => {
38
+ const instance = (0, services_1.getInstance)(target.service);
39
+ return await instance[propertyKey](params, viewer);
40
+ }
41
+ });
42
+ };
43
+ }
44
+ exports.Mutation = Mutation;
45
+ function getServiceResolvers(target) {
46
+ if (!target.prototype) {
47
+ throw new helpers_1.UserError('You must pass a class to getResolvers');
48
+ }
49
+ return target.prototype.resolvers || {};
50
+ }
51
+ exports.getServiceResolvers = getServiceResolvers;
@@ -0,0 +1,2 @@
1
+ export * from './global';
2
+ export * from './model';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./global"), exports);
14
+ __exportStar(require("./model"), exports);
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ require("reflect-metadata");
13
+ const services_1 = require("@orion-js/services");
14
+ const index_1 = require("./index");
15
+ describe('Resolvers with service injection', () => {
16
+ it('should allow to pass a service as resolve', async () => {
17
+ let ExampleRepo = class ExampleRepo {
18
+ getLastName() {
19
+ return 'Lopez';
20
+ }
21
+ };
22
+ ExampleRepo = __decorate([
23
+ (0, services_1.Service)()
24
+ ], ExampleRepo);
25
+ let ExampleResolverService = class ExampleResolverService {
26
+ async sayHi(params) {
27
+ return this.addAge(`My name is ${params.name} ${this.repo.getLastName()}`);
28
+ }
29
+ async setName() {
30
+ this.repo.getLastName();
31
+ }
32
+ async addAge(params) {
33
+ return `${params} and I'm 100 years old`;
34
+ }
35
+ };
36
+ __decorate([
37
+ (0, services_1.Inject)(),
38
+ __metadata("design:type", ExampleRepo)
39
+ ], ExampleResolverService.prototype, "repo", void 0);
40
+ __decorate([
41
+ (0, index_1.Query)({
42
+ params: { name: { type: 'string' } },
43
+ returns: String
44
+ }),
45
+ __metadata("design:type", Function),
46
+ __metadata("design:paramtypes", [Object]),
47
+ __metadata("design:returntype", Promise)
48
+ ], ExampleResolverService.prototype, "sayHi", null);
49
+ __decorate([
50
+ (0, index_1.Mutation)({ returns: String }),
51
+ __metadata("design:type", Function),
52
+ __metadata("design:paramtypes", []),
53
+ __metadata("design:returntype", Promise)
54
+ ], ExampleResolverService.prototype, "setName", null);
55
+ ExampleResolverService = __decorate([
56
+ (0, index_1.Resolvers)()
57
+ ], ExampleResolverService);
58
+ const resolvers = (0, index_1.getServiceResolvers)(ExampleResolverService);
59
+ expect(resolvers.sayHi).toBeDefined();
60
+ const result = await resolvers.sayHi.execute({ params: { name: 'Orion' } });
61
+ expect(result).toBe(`My name is Orion Lopez and I'm 100 years old`);
62
+ });
63
+ });
@@ -0,0 +1,14 @@
1
+ import { GlobalResolverResolve, ResolverOptions, ModelResolverResolve, ModelResolver } from '@orion-js/resolvers';
2
+ export interface ModelResolverPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
3
+ value?: ModelResolverResolve;
4
+ }
5
+ export declare function ModelResolver(options: Omit<ResolverOptions<any>, 'resolve'>): (target: any, propertyKey: string, descriptor: ModelResolverPropertyDescriptor) => void;
6
+ export interface ModelResolversOptions {
7
+ modelName?: string;
8
+ }
9
+ export declare function ModelResolvers(typedSchema: any, options?: ModelResolversOptions): ClassDecorator;
10
+ export declare function getServiceModelResolvers(target: any): {
11
+ [key: string]: {
12
+ [key: string]: ModelResolver<GlobalResolverResolve>;
13
+ };
14
+ };
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServiceModelResolvers = exports.ModelResolvers = exports.ModelResolver = void 0;
4
+ const services_1 = require("@orion-js/services");
5
+ const resolvers_1 = require("@orion-js/resolvers");
6
+ const helpers_1 = require("@orion-js/helpers");
7
+ function ModelResolver(options) {
8
+ return function (target, propertyKey, descriptor) {
9
+ if (!descriptor.value)
10
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
11
+ target.resolvers = target.resolvers || {};
12
+ target.resolvers[propertyKey] = (0, resolvers_1.modelResolver)({
13
+ ...options,
14
+ resolve: async (item, params, viewer) => {
15
+ const instance = (0, services_1.getInstance)(target.service);
16
+ return await instance[propertyKey](item, params, viewer);
17
+ }
18
+ });
19
+ };
20
+ }
21
+ exports.ModelResolver = ModelResolver;
22
+ function ModelResolvers(typedSchema, options = {}) {
23
+ return function (target) {
24
+ (0, services_1.Service)()(target);
25
+ target.prototype.modelName = options.modelName || typedSchema.name;
26
+ if (!target.prototype.modelName) {
27
+ throw new Error(`The specified model has no name or is not a model`);
28
+ }
29
+ target.prototype.typedSchema = typedSchema;
30
+ target.prototype.service = target;
31
+ // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass
32
+ target.getModel = () => getModelForClass(target);
33
+ };
34
+ }
35
+ exports.ModelResolvers = ModelResolvers;
36
+ function getServiceModelResolvers(target) {
37
+ if (!target.prototype) {
38
+ throw new helpers_1.UserError('You must pass a class to getResolvers');
39
+ }
40
+ return {
41
+ [target.prototype.modelName]: target.prototype.resolvers || {}
42
+ };
43
+ }
44
+ exports.getServiceModelResolvers = getServiceModelResolvers;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const services_1 = require("@orion-js/services");
16
+ const typed_model_1 = require("@orion-js/typed-model");
17
+ const model_1 = require("./model");
18
+ const http_1 = require("@orion-js/http");
19
+ const supertest_1 = __importDefault(require("supertest"));
20
+ const startGraphQL_1 = __importDefault(require("../startGraphQL"));
21
+ const cleanResolvers_1 = require("../cleanResolvers");
22
+ const global_1 = require("./global");
23
+ describe('Service with graphql models', () => {
24
+ beforeEach(() => {
25
+ (0, cleanResolvers_1.cleanResolvers)();
26
+ });
27
+ it('show allow to pass a service with resolvers to typed model', async () => {
28
+ let AgeRepo = class AgeRepo {
29
+ getAge(name) {
30
+ return `${name} is 100 years old`;
31
+ }
32
+ };
33
+ AgeRepo = __decorate([
34
+ (0, services_1.Service)()
35
+ ], AgeRepo);
36
+ let Person = class Person {
37
+ };
38
+ __decorate([
39
+ (0, typed_model_1.Prop)(),
40
+ __metadata("design:type", String)
41
+ ], Person.prototype, "name", void 0);
42
+ Person = __decorate([
43
+ (0, typed_model_1.TypedSchema)()
44
+ ], Person);
45
+ let PersonResolvers = class PersonResolvers {
46
+ async getAge(person) {
47
+ const result = this.repo.getAge(person.name);
48
+ return result;
49
+ }
50
+ };
51
+ __decorate([
52
+ (0, services_1.Inject)(),
53
+ __metadata("design:type", AgeRepo)
54
+ ], PersonResolvers.prototype, "repo", void 0);
55
+ __decorate([
56
+ (0, model_1.ModelResolver)({ returns: String }),
57
+ __metadata("design:type", Function),
58
+ __metadata("design:paramtypes", [Person]),
59
+ __metadata("design:returntype", Promise)
60
+ ], PersonResolvers.prototype, "getAge", null);
61
+ PersonResolvers = __decorate([
62
+ (0, model_1.ModelResolvers)(Person)
63
+ ], PersonResolvers);
64
+ const data = (0, model_1.getServiceModelResolvers)(PersonResolvers);
65
+ const item = { name: 'Orion' };
66
+ const result = await data.Person.getAge.execute({ parent: item });
67
+ expect(result).toBe(`Orion is 100 years old`);
68
+ });
69
+ it('should startGraphQL and make a request', async () => {
70
+ let Person = class Person {
71
+ };
72
+ __decorate([
73
+ (0, typed_model_1.Prop)(),
74
+ __metadata("design:type", String)
75
+ ], Person.prototype, "name", void 0);
76
+ Person = __decorate([
77
+ (0, typed_model_1.TypedSchema)()
78
+ ], Person);
79
+ let PersonResolvers = class PersonResolvers {
80
+ async sayHi(person) {
81
+ return `My name is ${person.name}`;
82
+ }
83
+ };
84
+ __decorate([
85
+ (0, model_1.ModelResolver)({ returns: String }),
86
+ __metadata("design:type", Function),
87
+ __metadata("design:paramtypes", [Person]),
88
+ __metadata("design:returntype", Promise)
89
+ ], PersonResolvers.prototype, "sayHi", null);
90
+ PersonResolvers = __decorate([
91
+ (0, model_1.ModelResolvers)(Person)
92
+ ], PersonResolvers);
93
+ let GlobalResolvers = class GlobalResolvers {
94
+ async person() {
95
+ return { name: 'Orion' };
96
+ }
97
+ };
98
+ __decorate([
99
+ (0, global_1.Query)({ returns: Person }),
100
+ __metadata("design:type", Function),
101
+ __metadata("design:paramtypes", []),
102
+ __metadata("design:returntype", Promise)
103
+ ], GlobalResolvers.prototype, "person", null);
104
+ GlobalResolvers = __decorate([
105
+ (0, global_1.Resolvers)()
106
+ ], GlobalResolvers);
107
+ const app = (0, http_1.express)();
108
+ await (0, startGraphQL_1.default)({
109
+ resolvers: (0, global_1.getServiceResolvers)(GlobalResolvers),
110
+ modelsResolvers: (0, model_1.getServiceModelResolvers)(PersonResolvers),
111
+ app
112
+ });
113
+ const response = await (0, supertest_1.default)(app)
114
+ .post('/graphql')
115
+ .send({
116
+ operationName: 'testOperation',
117
+ query: `query testOperation {
118
+ person {
119
+ sayHi
120
+ }
121
+ }`
122
+ });
123
+ expect(response.statusCode).toBe(200);
124
+ expect(response.body.data).toEqual({ person: { sayHi: 'My name is Orion' } });
125
+ });
126
+ });
@@ -116,7 +116,7 @@ describe('Test GraphQL Server', () => {
116
116
  __metadata("design:type", String)
117
117
  ], Params.prototype, "userId", void 0);
118
118
  Params = __decorate([
119
- (0, typed_model_1.TypedModel)()
119
+ (0, typed_model_1.TypedSchema)()
120
120
  ], Params);
121
121
  let User = class User {
122
122
  };
@@ -129,7 +129,7 @@ describe('Test GraphQL Server', () => {
129
129
  __metadata("design:type", Number)
130
130
  ], User.prototype, "age", void 0);
131
131
  User = __decorate([
132
- (0, typed_model_1.TypedModel)()
132
+ (0, typed_model_1.TypedSchema)()
133
133
  ], User);
134
134
  const resolve = async ({ userId }) => {
135
135
  if (userId !== '1')
@@ -73,7 +73,7 @@ const getStartServerOptions = async () => {
73
73
  __metadata("design:type", String)
74
74
  ], TestParams.prototype, "userId", void 0);
75
75
  TestParams = __decorate([
76
- (0, typed_model_1.TypedModel)()
76
+ (0, typed_model_1.TypedSchema)()
77
77
  ], TestParams);
78
78
  let TestModel = class TestModel {
79
79
  };
@@ -86,7 +86,7 @@ const getStartServerOptions = async () => {
86
86
  __metadata("design:type", Number)
87
87
  ], TestModel.prototype, "age", void 0);
88
88
  TestModel = __decorate([
89
- (0, typed_model_1.TypedModel)()
89
+ (0, typed_model_1.TypedSchema)()
90
90
  ], TestModel);
91
91
  const modelSub = (0, _1.subscription)({
92
92
  params: (0, typed_model_1.getModelForClass)(TestParams),
@@ -104,7 +104,7 @@ const getStartServerOptions = async () => {
104
104
  resolvers,
105
105
  subscriptions
106
106
  });
107
- return { apolloOptions, subscriptions };
107
+ return { apolloOptions, resolvers, subscriptions };
108
108
  };
109
109
  const gqClient = async () => {
110
110
  // To make the point clear that we are not opening any ports here we use a randomized string that will not produce a correct port number.
@@ -1,14 +1,21 @@
1
- import { GlobalResolversMap } from '@orion-js/models';
1
+ import { GlobalResolversMap, ModelResolversMap } from '@orion-js/models';
2
2
  import { express } from '@orion-js/http';
3
3
  import { SubscriptionMap } from './subscription';
4
4
  import { GraphQLOptions } from 'apollo-server-core';
5
5
  export declare type ExecuteGraphQLCache = (req: express.Request, res: express.Response, viewer: object, executeQuery: () => Promise<string>) => Promise<string>;
6
+ export interface ModelsResolversMap {
7
+ [key: string]: ModelResolversMap;
8
+ }
6
9
  declare type SchemaOmits = 'schema' | 'schemaHash' | 'context' | 'useGraphiql';
7
10
  export interface StartGraphQLOptions extends Omit<GraphQLOptions, SchemaOmits> {
8
11
  /**
9
12
  * A map with all the global resolvers
10
13
  */
11
14
  resolvers: GlobalResolversMap;
15
+ /**
16
+ * A map with all the models resolvers. You must only add the models that you want to extend with resolvers.
17
+ */
18
+ modelsResolvers?: ModelsResolversMap;
12
19
  /**
13
20
  * A Map with all global subscriptions
14
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/graphql",
3
- "version": "3.2.3",
3
+ "version": "3.2.7",
4
4
  "main": "lib/index.js",
5
5
  "author": "nicolaslopezj",
6
6
  "license": "MIT",
@@ -14,11 +14,12 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@orion-js/helpers": "^3.2.0",
17
- "@orion-js/http": "^3.2.3",
17
+ "@orion-js/http": "^3.2.4",
18
18
  "@orion-js/models": "^3.2.0",
19
19
  "@orion-js/resolvers": "^3.2.0",
20
20
  "@orion-js/schema": "^3.2.0",
21
- "@orion-js/typed-model": "^3.2.3",
21
+ "@orion-js/services": "^3.2.0",
22
+ "@orion-js/typed-model": "^3.2.4",
22
23
  "apollo-server-core": "3.5.0",
23
24
  "graphql-iso-date": "^3.6.1",
24
25
  "graphql-subscriptions": "^2.0.0",
@@ -33,6 +34,7 @@
33
34
  "graphql": "^16.0.1",
34
35
  "jest": "27.3.1",
35
36
  "mock-socket-with-protocol": "^7.1.1",
37
+ "reflect-metadata": "^0.1.13",
36
38
  "supertest": "^6.1.6",
37
39
  "ts-jest": "27.0.7",
38
40
  "typescript": "^4.4.4"
@@ -43,5 +45,5 @@
43
45
  "publishConfig": {
44
46
  "access": "public"
45
47
  },
46
- "gitHead": "169123c560388991a3e2d3d7c96682dcb3713523"
48
+ "gitHead": "e46b899b76158da8ec8fedc6e9e39fdd728835d2"
47
49
  }