@orion-js/graphql 3.2.1 → 3.2.4

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.
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,18 @@
1
+ import { GlobalResolverResolve, ResolverOptions, ModelResolverResolve, Resolver, ModelResolver } from '@orion-js/resolvers';
2
+ export interface GlobalResolverPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
3
+ value?: GlobalResolverResolve;
4
+ }
5
+ export declare function Query(options: Omit<ResolverOptions<any>, 'resolve' | 'mutation'>): (target: any, propertyKey: string, descriptor: GlobalResolverPropertyDescriptor) => void;
6
+ export declare function Mutation(options: Omit<ResolverOptions<any>, 'resolve' | 'mutation'>): (target: any, propertyKey: string, descriptor: GlobalResolverPropertyDescriptor) => void;
7
+ export declare function getServiceResolvers(target: any): {
8
+ [key: string]: Resolver<GlobalResolverResolve>;
9
+ };
10
+ export interface ModelResolverPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
11
+ value?: ModelResolverResolve;
12
+ }
13
+ export declare function ModelResolver(options: Omit<ResolverOptions<any>, 'resolve'>): (target: any, propertyKey: string, descriptor: ModelResolverPropertyDescriptor) => void;
14
+ export declare function getServiceModelResolvers(target: any): {
15
+ [key: string]: ModelResolver<GlobalResolverResolve>;
16
+ };
17
+ export declare function Resolvers(): ClassDecorator;
18
+ export declare function Model(typedModel: any): ClassDecorator;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Model = exports.Resolvers = exports.getServiceModelResolvers = exports.ModelResolver = exports.getServiceResolvers = exports.Mutation = exports.Query = 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 Query(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.resolver)({
13
+ ...options,
14
+ resolve: async (params, viewer) => {
15
+ const instance = (0, services_1.getInstance)(target.service);
16
+ return await instance[propertyKey](params, viewer);
17
+ }
18
+ });
19
+ };
20
+ }
21
+ exports.Query = Query;
22
+ function Mutation(options) {
23
+ return function (target, propertyKey, descriptor) {
24
+ if (!descriptor.value)
25
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
26
+ target.resolvers = target.resolvers || {};
27
+ target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
28
+ ...options,
29
+ mutation: true,
30
+ resolve: async (params, viewer) => {
31
+ const instance = (0, services_1.getInstance)(target.service);
32
+ return await instance[propertyKey](params, viewer);
33
+ }
34
+ });
35
+ };
36
+ }
37
+ exports.Mutation = Mutation;
38
+ function getServiceResolvers(target) {
39
+ if (!target.prototype) {
40
+ throw new helpers_1.UserError('You must pass a class to getResolvers');
41
+ }
42
+ return target.prototype.resolvers || {};
43
+ }
44
+ exports.getServiceResolvers = getServiceResolvers;
45
+ function ModelResolver(options) {
46
+ return function (target, propertyKey, descriptor) {
47
+ if (!descriptor.value)
48
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
49
+ target.resolvers = target.resolvers || {};
50
+ target.resolvers[propertyKey] = (0, resolvers_1.modelResolver)({
51
+ ...options,
52
+ resolve: async (item, params, viewer) => {
53
+ const instance = (0, services_1.getInstance)(target.service);
54
+ return await instance[propertyKey](item, params, viewer);
55
+ }
56
+ });
57
+ };
58
+ }
59
+ exports.ModelResolver = ModelResolver;
60
+ function getServiceModelResolvers(target) {
61
+ if (!target.prototype) {
62
+ throw new helpers_1.UserError('You must pass a class to getResolvers');
63
+ }
64
+ return target.prototype.resolvers || {};
65
+ }
66
+ exports.getServiceModelResolvers = getServiceModelResolvers;
67
+ function Resolvers() {
68
+ return function (target) {
69
+ (0, services_1.Service)()(target);
70
+ target.prototype.service = target;
71
+ };
72
+ }
73
+ exports.Resolvers = Resolvers;
74
+ function Model(typedModel) {
75
+ return function (target) {
76
+ (0, services_1.Service)()(target);
77
+ target.prototype.typedModel = typedModel;
78
+ target.prototype.service = target;
79
+ // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass
80
+ target.getModel = () => getModelForClass(target);
81
+ };
82
+ }
83
+ exports.Model = Model;
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,105 @@
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 typed_model_1 = require("@orion-js/typed-model");
15
+ const _1 = require(".");
16
+ describe('Resolvers with service injection', () => {
17
+ it('should allow to pass a service as resolve', async () => {
18
+ let ExampleRepo = class ExampleRepo {
19
+ getLastName() {
20
+ return 'Lopez';
21
+ }
22
+ };
23
+ ExampleRepo = __decorate([
24
+ (0, services_1.Service)()
25
+ ], ExampleRepo);
26
+ let ExampleResolverService = class ExampleResolverService {
27
+ async sayHi(params) {
28
+ return this.addAge(`My name is ${params.name} ${this.repo.getLastName()}`);
29
+ }
30
+ async setName() {
31
+ this.repo.getLastName();
32
+ }
33
+ async addAge(params) {
34
+ return `${params} and I'm 100 years old`;
35
+ }
36
+ };
37
+ __decorate([
38
+ (0, services_1.Inject)(),
39
+ __metadata("design:type", ExampleRepo)
40
+ ], ExampleResolverService.prototype, "repo", void 0);
41
+ __decorate([
42
+ (0, _1.Query)({
43
+ params: { name: { type: 'string' } },
44
+ returns: String
45
+ }),
46
+ __metadata("design:type", Function),
47
+ __metadata("design:paramtypes", [Object]),
48
+ __metadata("design:returntype", Promise)
49
+ ], ExampleResolverService.prototype, "sayHi", null);
50
+ __decorate([
51
+ (0, _1.Mutation)({ returns: String }),
52
+ __metadata("design:type", Function),
53
+ __metadata("design:paramtypes", []),
54
+ __metadata("design:returntype", Promise)
55
+ ], ExampleResolverService.prototype, "setName", null);
56
+ ExampleResolverService = __decorate([
57
+ (0, _1.Resolvers)()
58
+ ], ExampleResolverService);
59
+ const resolvers = (0, _1.getServiceResolvers)(ExampleResolverService);
60
+ expect(resolvers.sayHi).toBeDefined();
61
+ const result = await resolvers.sayHi.execute({ params: { name: 'Orion' } });
62
+ expect(result).toBe(`My name is Orion Lopez and I'm 100 years old`);
63
+ });
64
+ it('show allow to pass a service with resolvers to typed model', async () => {
65
+ let AgeRepo = class AgeRepo {
66
+ getAge(name) {
67
+ return `${name} is 100 years old`;
68
+ }
69
+ };
70
+ AgeRepo = __decorate([
71
+ (0, services_1.Service)()
72
+ ], AgeRepo);
73
+ let PersonSchema = class PersonSchema {
74
+ };
75
+ __decorate([
76
+ (0, typed_model_1.Prop)(),
77
+ __metadata("design:type", String)
78
+ ], PersonSchema.prototype, "name", void 0);
79
+ PersonSchema = __decorate([
80
+ (0, typed_model_1.TypedSchema)()
81
+ ], PersonSchema);
82
+ let PersonModel = class PersonModel {
83
+ async getAge(person) {
84
+ const result = this.repo.getAge(person.name);
85
+ return result;
86
+ }
87
+ };
88
+ __decorate([
89
+ (0, services_1.Inject)(),
90
+ __metadata("design:type", AgeRepo)
91
+ ], PersonModel.prototype, "repo", void 0);
92
+ __decorate([
93
+ (0, _1.ModelResolver)({ returns: String }),
94
+ __metadata("design:type", Function),
95
+ __metadata("design:paramtypes", [PersonSchema]),
96
+ __metadata("design:returntype", Promise)
97
+ ], PersonModel.prototype, "getAge", null);
98
+ PersonModel = __decorate([
99
+ (0, _1.Model)(PersonSchema)
100
+ ], PersonModel);
101
+ const model = (0, typed_model_1.getModelForClass)(PersonModel);
102
+ const item = model.initItem({ name: 'Orion' });
103
+ expect(await item.getAge()).toBe(`Orion is 100 years old`);
104
+ });
105
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/graphql",
3
- "version": "3.2.1",
3
+ "version": "3.2.4",
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.0",
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.1",
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": "582bfdbd33b30a1259cc2c35f46111992aeeff81"
48
+ "gitHead": "a1c4cff581b31f24896ec96a0a180d043dbf802a"
47
49
  }