@orion-js/graphql 3.12.0 → 3.13.1

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 (121) hide show
  1. package/LICENSE +21 -0
  2. package/jest.config.js +8 -0
  3. package/lib/buildSchema/getArgs/getField.d.ts +1 -0
  4. package/lib/buildSchema/getArgs/getField.js +49 -0
  5. package/lib/buildSchema/getArgs/index.d.ts +1 -0
  6. package/lib/buildSchema/getArgs/index.js +24 -0
  7. package/lib/buildSchema/getMutation.d.ts +3 -0
  8. package/lib/buildSchema/getMutation.js +18 -0
  9. package/lib/buildSchema/getQuery.d.ts +3 -0
  10. package/lib/buildSchema/getQuery.js +18 -0
  11. package/lib/buildSchema/getResolvers/index.d.ts +3 -0
  12. package/lib/buildSchema/getResolvers/index.js +43 -0
  13. package/lib/buildSchema/getResolvers/index.test.d.ts +1 -0
  14. package/lib/buildSchema/getResolvers/index.test.js +65 -0
  15. package/lib/buildSchema/getResolvers/resolversStore.d.ts +3 -0
  16. package/lib/buildSchema/getResolvers/resolversStore.js +5 -0
  17. package/lib/buildSchema/getSubscription.d.ts +3 -0
  18. package/lib/buildSchema/getSubscription.js +17 -0
  19. package/lib/buildSchema/getSubscriptions/index.d.ts +2 -0
  20. package/lib/buildSchema/getSubscriptions/index.js +26 -0
  21. package/lib/buildSchema/getSubscriptions/index.test.d.ts +1 -0
  22. package/lib/buildSchema/getSubscriptions/index.test.js +52 -0
  23. package/lib/buildSchema/getType/BigIntScalar.d.ts +3 -0
  24. package/lib/buildSchema/getType/BigIntScalar.js +35 -0
  25. package/lib/buildSchema/getType/DateScalar.d.ts +3 -0
  26. package/lib/buildSchema/getType/DateScalar.js +10 -0
  27. package/lib/buildSchema/getType/JSONScalar.d.ts +3 -0
  28. package/lib/buildSchema/getType/JSONScalar.js +42 -0
  29. package/lib/buildSchema/getType/enum.test.d.ts +1 -0
  30. package/lib/buildSchema/getType/enum.test.js +80 -0
  31. package/lib/buildSchema/getType/getScalar.d.ts +1 -0
  32. package/lib/buildSchema/getType/getScalar.js +58 -0
  33. package/lib/buildSchema/getType/getTypeAsResolver.d.ts +10 -0
  34. package/lib/buildSchema/getType/getTypeAsResolver.js +26 -0
  35. package/lib/buildSchema/getType/index.d.ts +2 -0
  36. package/lib/buildSchema/getType/index.js +86 -0
  37. package/lib/buildSchema/index.d.ts +3 -0
  38. package/lib/buildSchema/index.js +17 -0
  39. package/lib/cleanResolvers.d.ts +1 -0
  40. package/lib/cleanResolvers.js +8 -0
  41. package/lib/errorHandler.d.ts +1 -0
  42. package/lib/errorHandler.js +42 -0
  43. package/lib/getApolloOptions/formatError.d.ts +1 -0
  44. package/lib/getApolloOptions/formatError.js +14 -0
  45. package/lib/getApolloOptions/index.d.ts +3 -0
  46. package/lib/getApolloOptions/index.js +26 -0
  47. package/lib/index.d.ts +12 -0
  48. package/lib/index.js +51 -0
  49. package/lib/pubsub.d.ts +3 -0
  50. package/lib/pubsub.js +12 -0
  51. package/lib/resolversSchemas/ResolverParamsInfo.d.ts +9 -0
  52. package/lib/resolversSchemas/ResolverParamsInfo.js +47 -0
  53. package/lib/resolversSchemas/getBasicResultQuery.d.ts +1 -0
  54. package/lib/resolversSchemas/getBasicResultQuery.js +24 -0
  55. package/lib/resolversSchemas/getDynamicFields.d.ts +2 -0
  56. package/lib/resolversSchemas/getDynamicFields.js +19 -0
  57. package/lib/resolversSchemas/getField.d.ts +1 -0
  58. package/lib/resolversSchemas/getField.js +50 -0
  59. package/lib/resolversSchemas/getField.test.d.ts +1 -0
  60. package/lib/resolversSchemas/getField.test.js +56 -0
  61. package/lib/resolversSchemas/getModelLoadedResolvers.d.ts +3 -0
  62. package/lib/resolversSchemas/getModelLoadedResolvers.js +21 -0
  63. package/lib/resolversSchemas/getStaticFields.d.ts +3 -0
  64. package/lib/resolversSchemas/getStaticFields.js +20 -0
  65. package/lib/resolversSchemas/index.d.ts +7 -0
  66. package/lib/resolversSchemas/index.js +9 -0
  67. package/lib/resolversSchemas/params.d.ts +5 -0
  68. package/lib/resolversSchemas/params.js +31 -0
  69. package/lib/resolversSchemas/params.test.d.ts +1 -0
  70. package/lib/resolversSchemas/params.test.js +131 -0
  71. package/lib/resolversSchemas/serializeSchema.d.ts +2 -0
  72. package/lib/resolversSchemas/serializeSchema.js +22 -0
  73. package/lib/resolversSchemas/serializeSchema.test.d.ts +1 -0
  74. package/lib/resolversSchemas/serializeSchema.test.js +56 -0
  75. package/lib/service/global.d.ts +10 -0
  76. package/lib/service/global.js +60 -0
  77. package/lib/service/index.d.ts +4 -0
  78. package/lib/service/index.js +20 -0
  79. package/lib/service/index.test.d.ts +1 -0
  80. package/lib/service/index.test.js +63 -0
  81. package/lib/service/middlewares.test.d.ts +1 -0
  82. package/lib/service/middlewares.test.js +125 -0
  83. package/lib/service/model.d.ts +14 -0
  84. package/lib/service/model.js +48 -0
  85. package/lib/service/model.test.d.ts +1 -0
  86. package/lib/service/model.test.js +126 -0
  87. package/lib/service/otherParams.d.ts +7 -0
  88. package/lib/service/otherParams.js +28 -0
  89. package/lib/service/subscription.d.ts +6 -0
  90. package/lib/service/subscription.js +43 -0
  91. package/lib/service/subscription.test.d.ts +1 -0
  92. package/lib/service/subscription.test.js +55 -0
  93. package/lib/startGraphQL.d.ts +2 -0
  94. package/lib/startGraphQL.js +43 -0
  95. package/lib/startGraphQL.test.d.ts +1 -0
  96. package/lib/startGraphQL.test.js +414 -0
  97. package/lib/startGraphiQL.d.ts +3 -0
  98. package/lib/startGraphiQL.js +207 -0
  99. package/lib/startWebsocket.d.ts +11 -0
  100. package/lib/startWebsocket.js +48 -0
  101. package/lib/startWebsocket.test.d.ts +1 -0
  102. package/lib/startWebsocket.test.js +303 -0
  103. package/lib/subscription/getChannelName.d.ts +1 -0
  104. package/lib/subscription/getChannelName.js +9 -0
  105. package/lib/subscription/getChannelName.test.d.ts +1 -0
  106. package/lib/subscription/getChannelName.test.js +26 -0
  107. package/lib/subscription/index.d.ts +3 -0
  108. package/lib/subscription/index.js +34 -0
  109. package/lib/types/index.d.ts +3 -0
  110. package/lib/types/index.js +19 -0
  111. package/lib/types/startGraphQL.d.ts +41 -0
  112. package/lib/types/startGraphQL.js +2 -0
  113. package/lib/types/subscription.d.ts +15 -0
  114. package/lib/types/subscription.js +2 -0
  115. package/lib/websockerViewer.d.ts +2 -0
  116. package/lib/websockerViewer.js +20 -0
  117. package/package.json +22 -31
  118. package/tsconfig.json +20 -0
  119. package/dist/index.cjs +0 -107852
  120. package/dist/index.d.ts +0 -116
  121. package/dist/index.js +0 -107825
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const resolvers_1 = require("@orion-js/resolvers");
7
+ const helpers_1 = require("@orion-js/helpers");
8
+ const ResolverParamsInfo_1 = __importDefault(require("./ResolverParamsInfo"));
9
+ const resolversStore_1 = require("../buildSchema/getResolvers/resolversStore");
10
+ exports.default = (0, resolvers_1.resolver)({
11
+ params: {
12
+ name: {
13
+ type: 'ID'
14
+ },
15
+ mutation: {
16
+ type: Boolean
17
+ }
18
+ },
19
+ returns: ResolverParamsInfo_1.default,
20
+ mutation: false,
21
+ resolve: async function ({ mutation, name }, viewer) {
22
+ const resolver = resolversStore_1.resolversStore[name];
23
+ if (!resolver) {
24
+ throw new helpers_1.UserError('notFound', `${mutation ? 'Mutation' : 'Query'} named "${name}" not found`);
25
+ }
26
+ if (!!resolver.mutation !== !!mutation) {
27
+ throw new helpers_1.UserError('incorrectType', `"${name}" is ${mutation ? 'not' : ''} a mutation`);
28
+ }
29
+ return { resolver, name };
30
+ }
31
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const params_1 = __importDefault(require("./params"));
7
+ const resolversStore_1 = require("../buildSchema/getResolvers/resolversStore");
8
+ const resolvers_1 = require("@orion-js/resolvers");
9
+ const models_1 = require("@orion-js/models");
10
+ describe('Get params tests', () => {
11
+ it('Should return the correct information for a resolver that returns a string array', async () => {
12
+ resolversStore_1.resolversStore.aResolver = (0, resolvers_1.resolver)({
13
+ params: {
14
+ aParam: {
15
+ type: String
16
+ }
17
+ },
18
+ returns: [String],
19
+ async resolve() {
20
+ return ['a', 'b'];
21
+ }
22
+ });
23
+ const response = (await params_1.default.execute({
24
+ params: {
25
+ name: 'aResolver',
26
+ mutation: false
27
+ }
28
+ }));
29
+ const params = await response.params();
30
+ const result = await response.result();
31
+ const basicResultQuery = await response.basicResultQuery();
32
+ expect(response.name).toEqual('aResolver');
33
+ expect(params).toEqual({ aParam: { type: 'string', __graphQLType: 'String' } });
34
+ expect(result).toEqual(undefined);
35
+ expect(basicResultQuery).toEqual('');
36
+ });
37
+ it('Should return the correct information for a resolver that returns a string', async () => {
38
+ resolversStore_1.resolversStore.aaResolver = (0, resolvers_1.resolver)({
39
+ params: {
40
+ aParam: {
41
+ type: String
42
+ }
43
+ },
44
+ returns: [String],
45
+ async resolve() {
46
+ return 'a';
47
+ }
48
+ });
49
+ const response = (await params_1.default.execute({
50
+ params: {
51
+ name: 'aaResolver',
52
+ mutation: false
53
+ }
54
+ }));
55
+ const params = await response.params();
56
+ const result = await response.result();
57
+ const basicResultQuery = await response.basicResultQuery();
58
+ expect(response.name).toEqual('aaResolver');
59
+ expect(params).toEqual({ aParam: { type: 'string', __graphQLType: 'String' } });
60
+ expect(result).toEqual(undefined);
61
+ expect(basicResultQuery).toEqual('');
62
+ });
63
+ it('Should return the correct information for a resolver that returns a array of a model', async () => {
64
+ const model = (0, models_1.createModel)({
65
+ name: 'Item',
66
+ schema: {
67
+ name: {
68
+ type: String
69
+ }
70
+ }
71
+ });
72
+ resolversStore_1.resolversStore.bResolver = (0, resolvers_1.resolver)({
73
+ params: {
74
+ aParam: {
75
+ type: String
76
+ }
77
+ },
78
+ returns: [model],
79
+ async resolve() {
80
+ return [{ name: 'Nico' }];
81
+ }
82
+ });
83
+ const response = (await params_1.default.execute({
84
+ params: {
85
+ name: 'bResolver',
86
+ mutation: false
87
+ }
88
+ }));
89
+ const params = await response.params();
90
+ const result = await response.result();
91
+ const basicResultQuery = await response.basicResultQuery();
92
+ expect(response.name).toEqual('bResolver');
93
+ expect(params).toEqual({ aParam: { type: 'string', __graphQLType: 'String' } });
94
+ expect(result).toEqual('Item');
95
+ expect(basicResultQuery).toEqual('{ name }');
96
+ });
97
+ it('Should return the correct information for a resolver that returns a model', async () => {
98
+ const model2 = (0, models_1.createModel)({
99
+ name: 'Item2',
100
+ schema: {
101
+ name: {
102
+ type: String
103
+ }
104
+ }
105
+ });
106
+ resolversStore_1.resolversStore.cResolver = (0, resolvers_1.resolver)({
107
+ params: {
108
+ aParam: {
109
+ type: String
110
+ }
111
+ },
112
+ returns: model2,
113
+ async resolve() {
114
+ return [{ name: 'Nico' }];
115
+ }
116
+ });
117
+ const response = (await params_1.default.execute({
118
+ params: {
119
+ name: 'cResolver',
120
+ mutation: false
121
+ }
122
+ }));
123
+ const params = await response.params();
124
+ const result = await response.result();
125
+ const basicResultQuery = await response.basicResultQuery();
126
+ expect(response.name).toEqual('cResolver');
127
+ expect(params).toEqual({ aParam: { type: 'string', __graphQLType: 'String' } });
128
+ expect(result).toEqual('Item2');
129
+ expect(basicResultQuery).toEqual('{ name }');
130
+ });
131
+ });
@@ -0,0 +1,2 @@
1
+ import { Schema } from '@orion-js/schema';
2
+ export default function serializeSchema(params: any): Promise<Schema>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const getField_1 = __importDefault(require("./getField"));
7
+ async function serializeSchema(params) {
8
+ if (!params)
9
+ return;
10
+ if (typeof params === 'function' && params.getModel && params.__schemaId) {
11
+ params = params.getModel().getCleanSchema(); // typed model
12
+ }
13
+ if (Object.keys(params).length === 0)
14
+ return;
15
+ const fields = {};
16
+ for (const key of Object.keys(params)) {
17
+ const field = params[key];
18
+ fields[key] = await (0, getField_1.default)(field);
19
+ }
20
+ return fields;
21
+ }
22
+ exports.default = serializeSchema;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,56 @@
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 typed_model_1 = require("@orion-js/typed-model");
16
+ const serializeSchema_1 = __importDefault(require("./serializeSchema"));
17
+ it('should create a JSON of the schema', async () => {
18
+ const schema = {
19
+ name: {
20
+ type: String
21
+ }
22
+ };
23
+ const result = await (0, serializeSchema_1.default)(schema);
24
+ expect(result).toEqual({ name: { type: 'string', __graphQLType: 'String' } });
25
+ });
26
+ it('should pass field options', async () => {
27
+ const schema = {
28
+ name: {
29
+ type: [String],
30
+ label: '1234'
31
+ }
32
+ };
33
+ const result = await (0, serializeSchema_1.default)(schema);
34
+ expect(result.name).toEqual({
35
+ type: ['string'],
36
+ label: '1234',
37
+ __graphQLType: '[String]'
38
+ });
39
+ });
40
+ it('should serialize a typed model', async () => {
41
+ let Point = class Point {
42
+ };
43
+ __decorate([
44
+ (0, typed_model_1.Prop)({ label: 'Name' }),
45
+ __metadata("design:type", String)
46
+ ], Point.prototype, "name", void 0);
47
+ Point = __decorate([
48
+ (0, typed_model_1.TypedModel)()
49
+ ], Point);
50
+ const result = await (0, serializeSchema_1.default)(Point);
51
+ expect(result.name).toEqual({
52
+ type: 'string',
53
+ label: 'Name',
54
+ __graphQLType: 'String'
55
+ });
56
+ });
@@ -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,60 @@
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
+ const otherParams_1 = require("./otherParams");
8
+ function Resolvers() {
9
+ return (target) => {
10
+ (0, services_1.Service)()(target);
11
+ target.prototype.service = target;
12
+ };
13
+ }
14
+ exports.Resolvers = Resolvers;
15
+ function Query(options) {
16
+ return (target, propertyKey, descriptor) => {
17
+ if (!descriptor.value)
18
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
19
+ target.resolvers = target.resolvers || {};
20
+ target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
21
+ resolverId: propertyKey,
22
+ params: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'params'),
23
+ returns: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'returns'),
24
+ middlewares: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'middlewares'),
25
+ ...options,
26
+ resolve: async (params, viewer, info) => {
27
+ const instance = (0, services_1.getInstance)(target.service);
28
+ return await instance[propertyKey](params, viewer, info);
29
+ },
30
+ });
31
+ };
32
+ }
33
+ exports.Query = Query;
34
+ function Mutation(options) {
35
+ return (target, propertyKey, descriptor) => {
36
+ if (!descriptor.value)
37
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
38
+ target.resolvers = target.resolvers || {};
39
+ target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
40
+ resolverId: propertyKey,
41
+ params: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'params'),
42
+ returns: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'returns'),
43
+ middlewares: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'middlewares'),
44
+ ...options,
45
+ mutation: true,
46
+ resolve: async (params, viewer, info) => {
47
+ const instance = (0, services_1.getInstance)(target.service);
48
+ return await instance[propertyKey](params, viewer, info);
49
+ },
50
+ });
51
+ };
52
+ }
53
+ exports.Mutation = Mutation;
54
+ function getServiceResolvers(target) {
55
+ if (!target.prototype) {
56
+ throw new helpers_1.UserError('You must pass a class to getResolvers');
57
+ }
58
+ return target.prototype.resolvers || {};
59
+ }
60
+ exports.getServiceResolvers = getServiceResolvers;
@@ -0,0 +1,4 @@
1
+ export * from './global';
2
+ export * from './model';
3
+ export * from './subscription';
4
+ export * from './otherParams';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./global"), exports);
18
+ __exportStar(require("./model"), exports);
19
+ __exportStar(require("./subscription"), exports);
20
+ __exportStar(require("./otherParams"), 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 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,125 @@
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
+ const otherParams_1 = require("./otherParams");
16
+ const resolvers_1 = require("@orion-js/resolvers");
17
+ const typed_model_1 = require("@orion-js/typed-model");
18
+ describe('Resolvers with service injection and middlewares', () => {
19
+ it('should allow to pass resolver middlewares with decorators', async () => {
20
+ expect.assertions(3);
21
+ let ExampleRepo = class ExampleRepo {
22
+ getLastName() {
23
+ return 'Lopez';
24
+ }
25
+ };
26
+ ExampleRepo = __decorate([
27
+ (0, services_1.Service)()
28
+ ], ExampleRepo);
29
+ const exampleMiddleware = (0, resolvers_1.createResolverMiddleware)(async (executeOptions, next) => {
30
+ const result = await next();
31
+ expect(result).toBe('intercepted2');
32
+ return 'intercepted';
33
+ });
34
+ const CheckRoles = (rolesToCheck) => {
35
+ return (0, otherParams_1.UseMiddleware)(async (executeOptions, next) => {
36
+ // check roles here
37
+ await next();
38
+ return 'intercepted2';
39
+ });
40
+ };
41
+ let ExampleResolverService = class ExampleResolverService {
42
+ async sayHi(params) {
43
+ return 'text';
44
+ }
45
+ };
46
+ __decorate([
47
+ (0, index_1.Query)(),
48
+ (0, otherParams_1.ResolverParams)({ name: { type: 'string' } }),
49
+ (0, otherParams_1.ResolverReturns)(String),
50
+ (0, otherParams_1.UseMiddleware)(exampleMiddleware),
51
+ CheckRoles(['admin']),
52
+ __metadata("design:type", Function),
53
+ __metadata("design:paramtypes", [Object]),
54
+ __metadata("design:returntype", Promise)
55
+ ], ExampleResolverService.prototype, "sayHi", null);
56
+ ExampleResolverService = __decorate([
57
+ (0, index_1.Resolvers)()
58
+ ], ExampleResolverService);
59
+ const resolvers = (0, index_1.getServiceResolvers)(ExampleResolverService);
60
+ expect(resolvers.sayHi).toBeDefined();
61
+ const result = await resolvers.sayHi.execute({ params: { name: 'Orion' } });
62
+ expect(result).toBe(`intercepted`);
63
+ });
64
+ it('show also work with model resolvers', async () => {
65
+ let Person = class Person {
66
+ };
67
+ __decorate([
68
+ (0, typed_model_1.Prop)(),
69
+ __metadata("design:type", String)
70
+ ], Person.prototype, "name", void 0);
71
+ Person = __decorate([
72
+ (0, typed_model_1.TypedSchema)()
73
+ ], Person);
74
+ const NiceToMeetYou = (0, otherParams_1.UseMiddleware)(async (executeOptions, next) => {
75
+ const result = await next();
76
+ return `${result}, nice to meet you`;
77
+ });
78
+ let PersonResolvers = class PersonResolvers {
79
+ async getAge(person) {
80
+ return `hello ${person.name}`;
81
+ }
82
+ };
83
+ __decorate([
84
+ (0, index_1.ModelResolver)(),
85
+ (0, otherParams_1.ResolverReturns)(String),
86
+ NiceToMeetYou,
87
+ __metadata("design:type", Function),
88
+ __metadata("design:paramtypes", [Person]),
89
+ __metadata("design:returntype", Promise)
90
+ ], PersonResolvers.prototype, "getAge", null);
91
+ PersonResolvers = __decorate([
92
+ (0, index_1.ModelResolvers)(Person)
93
+ ], PersonResolvers);
94
+ const data = (0, index_1.getServiceModelResolvers)(PersonResolvers);
95
+ const item = { name: 'Orion' };
96
+ const result = await data.Person.getAge.execute({ parent: item });
97
+ expect(result).toBe(`hello Orion, nice to meet you`);
98
+ });
99
+ it('should pass the mutation name in the middleware', async () => {
100
+ let mutationName = '';
101
+ const exampleMiddleware = (0, resolvers_1.createResolverMiddleware)(async (executeOptions, next) => {
102
+ mutationName = executeOptions.options.resolverId;
103
+ await next();
104
+ });
105
+ let ExampleResolverService = class ExampleResolverService {
106
+ async sayHi(params) {
107
+ return 'text';
108
+ }
109
+ };
110
+ __decorate([
111
+ (0, index_1.Query)(),
112
+ (0, otherParams_1.ResolverReturns)(String),
113
+ (0, otherParams_1.UseMiddleware)(exampleMiddleware),
114
+ __metadata("design:type", Function),
115
+ __metadata("design:paramtypes", [Object]),
116
+ __metadata("design:returntype", Promise)
117
+ ], ExampleResolverService.prototype, "sayHi", null);
118
+ ExampleResolverService = __decorate([
119
+ (0, index_1.Resolvers)()
120
+ ], ExampleResolverService);
121
+ const resolvers = (0, index_1.getServiceResolvers)(ExampleResolverService);
122
+ await resolvers.sayHi.execute({ params: {} });
123
+ expect(mutationName).toBe('sayHi');
124
+ });
125
+ });
@@ -0,0 +1,14 @@
1
+ import { GlobalResolverResolve, ResolverOptions, ModelResolverResolve, ModelResolver as ModelResolverType } 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' | 'middlewares'>): (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]: ModelResolverType<GlobalResolverResolve>;
13
+ };
14
+ };
@@ -0,0 +1,48 @@
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
+ const otherParams_1 = require("./otherParams");
8
+ function ModelResolver(options) {
9
+ return (target, propertyKey, descriptor) => {
10
+ if (!descriptor.value)
11
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
12
+ target.resolvers = target.resolvers || {};
13
+ target.resolvers[propertyKey] = (0, resolvers_1.modelResolver)({
14
+ params: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'params'),
15
+ returns: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'returns'),
16
+ middlewares: (0, otherParams_1.getTargetMetadata)(target, propertyKey, 'middlewares'),
17
+ ...options,
18
+ resolve: async (item, params, viewer, info) => {
19
+ const instance = (0, services_1.getInstance)(target.service);
20
+ return await instance[propertyKey](item, params, viewer, info);
21
+ },
22
+ });
23
+ };
24
+ }
25
+ exports.ModelResolver = ModelResolver;
26
+ function ModelResolvers(typedSchema, options = {}) {
27
+ return (target) => {
28
+ (0, services_1.Service)()(target);
29
+ target.prototype.modelName = options.modelName || typedSchema.name;
30
+ if (!target.prototype.modelName) {
31
+ throw new Error('The specified model has no name or is not a model');
32
+ }
33
+ target.prototype.typedSchema = typedSchema;
34
+ target.prototype.service = target;
35
+ // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass
36
+ target.getModel = () => getModelForClass(target);
37
+ };
38
+ }
39
+ exports.ModelResolvers = ModelResolvers;
40
+ function getServiceModelResolvers(target) {
41
+ if (!target.prototype) {
42
+ throw new helpers_1.UserError('You must pass a class to getResolvers');
43
+ }
44
+ return {
45
+ [target.prototype.modelName]: target.prototype.resolvers || {},
46
+ };
47
+ }
48
+ exports.getServiceModelResolvers = getServiceModelResolvers;
@@ -0,0 +1 @@
1
+ export {};