@orion-js/resolvers 3.9.0 → 3.11.6-alpha.0

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.
@@ -2,8 +2,10 @@ export declare const getArgs: (...args: any[]) => {
2
2
  parent: any;
3
3
  params: any;
4
4
  viewer: any;
5
+ info: any;
5
6
  } | {
6
7
  params: any;
7
8
  viewer: any;
9
+ info: any;
8
10
  parent?: undefined;
9
11
  };
@@ -2,21 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getArgs = void 0;
4
4
  const getArgs = function getArgs(...args) {
5
- if (args.length === 3) {
5
+ if (args.length === 4) {
6
6
  return {
7
7
  parent: args[0],
8
8
  params: args[1] || {},
9
- viewer: args[2] || {}
9
+ viewer: args[2] || {},
10
+ info: args[3] || {},
10
11
  };
11
12
  }
12
- else if (args.length < 3) {
13
+ if (args.length < 4) {
13
14
  return {
14
15
  params: args[0] || {},
15
- viewer: args[1] || {}
16
+ viewer: args[1] || {},
17
+ info: args[2] || {},
16
18
  };
17
19
  }
18
- else {
19
- throw new Error('A resolver must be called with 2 parameters only');
20
- }
20
+ throw new Error('A resolver must be called with 2 parameters only');
21
21
  };
22
22
  exports.getArgs = getArgs;
@@ -3,25 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const permisionsCheckers_1 = require("../permisionsCheckers");
4
4
  const helpers_1 = require("@orion-js/helpers");
5
5
  async function default_1(executeOptions, options) {
6
- const { parent, params, viewer } = executeOptions;
6
+ const { parent, params, viewer, info } = executeOptions;
7
7
  if (viewer.app)
8
8
  return;
9
9
  await (0, permisionsCheckers_1.checkPermissions)({
10
10
  resolver: options,
11
11
  parent,
12
12
  params,
13
- viewer
13
+ viewer,
14
+ info,
14
15
  });
15
16
  if (options.checkPermission) {
16
17
  const execute = async () => {
17
18
  if (parent) {
18
19
  const checker = options.checkPermission;
19
- return checker(parent, params, viewer);
20
- }
21
- else {
22
- const checker = options.checkPermission;
23
- return checker(params, viewer);
20
+ return checker(parent, params, viewer, info);
24
21
  }
22
+ const checker = options.checkPermission;
23
+ return checker(params, viewer, info);
25
24
  };
26
25
  const error = await execute();
27
26
  if (error) {
@@ -2,25 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const helpers_1 = require("@orion-js/helpers");
4
4
  const getBaseKey = async (executeOptions) => {
5
- const { parent, params, viewer, options } = executeOptions;
5
+ const { parent, params, viewer, info, options } = executeOptions;
6
6
  if (parent) {
7
7
  const getKey = options.getCacheKey;
8
- return await getKey(parent, params, viewer);
9
- }
10
- else {
11
- const getKey = options.getCacheKey;
12
- return await getKey(params, viewer);
8
+ return await getKey(parent, params, viewer, info);
13
9
  }
10
+ const getKey = options.getCacheKey;
11
+ return await getKey(params, viewer, info);
14
12
  };
15
13
  async function default_1(executeOptions) {
16
- const { parent, params, viewer, options } = executeOptions;
14
+ const { parent, params, options } = executeOptions;
17
15
  if (options.getCacheKey) {
18
16
  const baseKey = await getBaseKey(executeOptions);
19
- return options.resolverId + '_' + baseKey;
20
- }
21
- else {
22
- const key = (0, helpers_1.hashObject)({ parent, params, resolverId: options.resolverId });
23
- return key;
17
+ return `${options.resolverId}_${baseKey}`;
24
18
  }
19
+ const key = (0, helpers_1.hashObject)({ parent, params, resolverId: options.resolverId });
20
+ return key;
25
21
  }
26
22
  exports.default = default_1;
@@ -5,26 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getCacheKey_1 = __importDefault(require("./getCacheKey"));
7
7
  async function default_1(executeOptions) {
8
- const { parent, params, viewer, options } = executeOptions;
8
+ const { parent, params, viewer, info, options } = executeOptions;
9
9
  const executeResolver = async () => {
10
10
  const resultFunc = options.resolve;
11
11
  if (parent) {
12
- return await resultFunc(parent, params, viewer);
13
- }
14
- else {
15
- return await resultFunc(params, viewer);
12
+ return await resultFunc(parent, params, viewer, info);
16
13
  }
14
+ return await resultFunc(params, viewer, info);
17
15
  };
18
16
  if (options.cache && options.cacheProvider) {
19
17
  const key = await (0, getCacheKey_1.default)(executeOptions);
20
18
  const result = await options.cacheProvider.get(key, {
21
19
  fallback: executeResolver,
22
- ttl: options.cache
20
+ ttl: options.cache,
23
21
  });
24
22
  return result.value;
25
23
  }
26
- else {
27
- return await executeResolver();
28
- }
24
+ return await executeResolver();
29
25
  }
30
26
  exports.default = default_1;
@@ -8,16 +8,19 @@ const helpers_1 = require("@orion-js/helpers");
8
8
  const getResult_1 = __importDefault(require("./getResult"));
9
9
  const cacheProvider = cache_1.defaultCache;
10
10
  it('should execute the function', async () => {
11
- const resolve = async function ({ num }) {
12
- return num * 2;
13
- };
11
+ const resolve = async ({ num }) => num * 2;
14
12
  const params = { num: 321 };
15
- const result = await (0, getResult_1.default)({ options: { resolve }, params, viewer: {} });
13
+ const result = await (0, getResult_1.default)({
14
+ options: { resolve },
15
+ params,
16
+ viewer: {},
17
+ info: undefined,
18
+ });
16
19
  expect(result).toBe(321 * 2);
17
20
  });
18
21
  it('should use the cache if passed', async () => {
19
22
  let index = 1;
20
- const resolve = async function () {
23
+ const resolve = async () => {
21
24
  index++;
22
25
  return index;
23
26
  };
@@ -27,7 +30,7 @@ it('should use the cache if passed', async () => {
27
30
  resolve,
28
31
  cacheProvider,
29
32
  cache,
30
- resolverId
33
+ resolverId,
31
34
  };
32
35
  const emptyCall = { options: resolver, params: {}, viewer: {} };
33
36
  const result1 = await (0, getResult_1.default)(emptyCall);
@@ -39,15 +42,13 @@ it('should use the cache if passed', async () => {
39
42
  expect(result3).toBe(3);
40
43
  });
41
44
  it('should use the custom cache Provider', async () => {
42
- const resolve = async function () {
43
- return 1;
44
- };
45
+ const resolve = async () => 1;
45
46
  const provider = {
46
47
  async get() {
47
48
  return { value: 'fromcache' };
48
49
  },
49
50
  async set() { },
50
- async invalidate() { }
51
+ async invalidate() { },
51
52
  };
52
53
  const cache = 10;
53
54
  const resolverId = '1234';
@@ -8,12 +8,12 @@ const helpers_1 = require("@orion-js/helpers");
8
8
  const createResolverMiddleware_1 = require("../../createResolverMiddleware");
9
9
  const getResult_1 = __importDefault(require("./getResult"));
10
10
  async function getResultWithMiddlewares(executeOptions) {
11
- const resolveMiddleware = (0, createResolverMiddleware_1.createResolverMiddleware)(async (executeOptions, next) => {
11
+ const resolveMiddleware = (0, createResolverMiddleware_1.createResolverMiddleware)(async (executeOptions) => {
12
12
  return await (0, getResult_1.default)(executeOptions);
13
13
  });
14
14
  const composedMiddlewares = (0, helpers_1.composeMiddlewares)([
15
15
  ...(executeOptions.options.middlewares || []),
16
- resolveMiddleware
16
+ resolveMiddleware,
17
17
  ]);
18
18
  return await composedMiddlewares(executeOptions);
19
19
  }
@@ -12,11 +12,12 @@ function getExecute(options) {
12
12
  const executeOptions = {
13
13
  params: await (0, cleanAndValidate_1.default)({
14
14
  params: options.params,
15
- callParams: executeParams.params
15
+ callParams: executeParams.params,
16
16
  }),
17
17
  viewer: executeParams.viewer || {},
18
+ info: executeParams.info || {},
18
19
  parent: executeParams.parent,
19
- options: options
20
+ options: options,
20
21
  };
21
22
  await (0, checkPermissions_1.default)(executeOptions, options);
22
23
  const result = await (0, getResultWithMiddlewares_1.getResultWithMiddlewares)(executeOptions);
@@ -6,7 +6,7 @@ it('should return a function with a resolver id', () => {
6
6
  const resolver = (0, index_1.resolver)({
7
7
  params: {},
8
8
  returns: String,
9
- async resolve() { }
9
+ async resolve() { },
10
10
  });
11
11
  expect(typeof resolver).toBe('object');
12
12
  expect(typeof resolver.resolve).toBe('function');
@@ -17,13 +17,13 @@ it('should execute the function', async () => {
17
17
  const resolver = (0, index_1.resolver)({
18
18
  params: {
19
19
  value: {
20
- type: Number
21
- }
20
+ type: Number,
21
+ },
22
22
  },
23
23
  returns: Number,
24
24
  async resolve({ value }) {
25
25
  return value * 2;
26
- }
26
+ },
27
27
  });
28
28
  const result = await resolver.execute({ params: { value: 2 } });
29
29
  expect(result).toBe(4);
@@ -33,14 +33,14 @@ it('should get from cache', async () => {
33
33
  const resolver = (0, index_1.resolver)({
34
34
  params: {
35
35
  value: {
36
- type: Number
37
- }
36
+ type: Number,
37
+ },
38
38
  },
39
39
  returns: Number,
40
40
  cache: 100,
41
41
  async resolve(params) {
42
42
  return index++;
43
- }
43
+ },
44
44
  });
45
45
  const result1 = await resolver.execute({ params: { value: 1 } }); // 1
46
46
  expect(result1).toBe(1);
@@ -58,19 +58,19 @@ it('should create typed resolvers', async () => {
58
58
  const resolver = (0, index_1.resolver)({
59
59
  params: {
60
60
  value: {
61
- type: Number
62
- }
61
+ type: Number,
62
+ },
63
63
  },
64
64
  returns: Number,
65
65
  resolve: async (params) => {
66
66
  return params.value * 2;
67
- }
67
+ },
68
68
  });
69
69
  const result1 = await resolver.resolve({
70
- value: 2
70
+ value: 2,
71
71
  });
72
72
  const result2 = await resolver.execute({
73
- params: { value: 2 }
73
+ params: { value: 2 },
74
74
  });
75
75
  expect(result1).toBe(4);
76
76
  expect(result2).toBe(4);
@@ -78,15 +78,13 @@ it('should create typed resolvers', async () => {
78
78
  it('should create typed model resolvers', async () => {
79
79
  const resolver = (0, index_1.modelResolver)({
80
80
  returns: Number,
81
- resolve: async function (model, params) {
82
- return model.value * params.times;
83
- }
81
+ resolve: async (model, params) => model.value * params.times,
84
82
  });
85
83
  await resolver.resolve({ value: 1 }, { times: 2 });
86
84
  const inModel = resolver.modelResolve;
87
85
  await resolver.execute({
88
86
  parent: { value: 1 },
89
- params: { times: 2 }
87
+ params: { times: 2 },
90
88
  });
91
89
  });
92
90
  it('should accept a model as params', async () => {
@@ -96,13 +94,13 @@ it('should accept a model as params', async () => {
96
94
  getSchema() {
97
95
  return {
98
96
  value: {
99
- type: 'string'
100
- }
97
+ type: 'string',
98
+ },
101
99
  };
102
100
  },
103
101
  initItem(item) {
104
102
  return item;
105
- }
103
+ },
106
104
  };
107
105
  class TypedParams {
108
106
  constructor() {
@@ -117,7 +115,7 @@ it('should accept a model as params', async () => {
117
115
  returns: Number,
118
116
  resolve: async function (item, params) {
119
117
  return params.value * 2;
120
- }
118
+ },
121
119
  });
122
120
  const inModel = resolver.modelResolve;
123
121
  });
@@ -128,13 +126,13 @@ it('should accept a model as returns', async () => {
128
126
  getSchema() {
129
127
  return {
130
128
  value: {
131
- type: 'string'
132
- }
129
+ type: 'string',
130
+ },
133
131
  };
134
132
  },
135
133
  initItem(item) {
136
134
  return item;
137
- }
135
+ },
138
136
  };
139
137
  class Returns {
140
138
  constructor() {
@@ -148,7 +146,7 @@ it('should accept a model as returns', async () => {
148
146
  returns: Returns,
149
147
  resolve: async () => {
150
148
  return { value: 2 };
151
- }
149
+ },
152
150
  });
153
151
  const result = await resolver.resolve();
154
152
  expect(result.value).toBe(2);
@@ -157,7 +155,7 @@ it('should correctly clean params when no params are passed', async () => {
157
155
  const resolver = (0, index_1.resolver)({
158
156
  resolve: async ({ title }) => {
159
157
  return `${title}`;
160
- }
158
+ },
161
159
  });
162
160
  expect(await resolver.execute({ params: { title: 'test' } })).toBe('test');
163
161
  });
@@ -165,12 +163,12 @@ it('should allow calling resolver.resolve', async () => {
165
163
  const resolver = (0, index_1.resolver)({
166
164
  resolve: async ({ title }) => {
167
165
  return `${title}`;
168
- }
166
+ },
169
167
  });
170
168
  const modelResolver = (0, index_1.modelResolver)({
171
169
  resolve: async ({ title }) => {
172
170
  return `${title}`;
173
- }
171
+ },
174
172
  });
175
173
  expect(await resolver.resolve({ title: 'test' })).toBe('test');
176
174
  expect(await modelResolver.resolve({ title: 'test' })).toBe('test');
@@ -179,11 +177,41 @@ it('only allow compliant resolve function', async () => {
179
177
  const resolver = (0, index_1.resolver)({
180
178
  resolve: async () => {
181
179
  return 'hello';
182
- }
180
+ },
183
181
  });
184
182
  const modelResolver = (0, index_1.modelResolver)({
185
183
  resolve: async () => {
186
184
  return 'hello';
187
- }
185
+ },
186
+ });
187
+ });
188
+ it('should allow to pass a fourth param with the info', async () => {
189
+ const resolver = (0, index_1.resolver)({
190
+ resolve: async (_params, _viewer, info) => {
191
+ expect(info.test).toBe(1);
192
+ return 'hello';
193
+ },
194
+ });
195
+ const modelResolver = (0, index_1.modelResolver)({
196
+ resolve: async (_parent, _params, _viewer, info) => {
197
+ expect(info.test).toBe(1);
198
+ return 'hello';
199
+ },
200
+ });
201
+ await resolver.execute({
202
+ params: {},
203
+ viewer: {},
204
+ info: {
205
+ test: 1,
206
+ },
207
+ });
208
+ await modelResolver.execute({
209
+ parent: {},
210
+ params: {},
211
+ viewer: {},
212
+ info: {
213
+ test: 1,
214
+ },
188
215
  });
216
+ expect.assertions(2);
189
217
  });
@@ -1,15 +1,16 @@
1
1
  import { OrionCache } from '@orion-js/cache';
2
2
  import { Blackbox } from '@orion-js/schema';
3
- export declare type GlobalResolverResolve = (params: any, viewer: any) => Promise<any>;
4
- export declare type ModelResolverResolve = (item: any, params: any, viewer: any) => Promise<any>;
5
- export declare type GlobalCheckPermissions = (params: any, viewer: any) => Promise<string | void>;
6
- export declare type ModelCheckPermissions = (parent: any, params: any, viewer: any) => Promise<string | void>;
7
- export declare type GlobalGetCacheKey = (params: any, viewer: any) => Promise<any>;
8
- export declare type ModelGetCacheKey = (parent: any, params: any, viewer: any) => Promise<any>;
3
+ export declare type GlobalResolverResolve = (params: any, viewer: any, info?: any) => Promise<any>;
4
+ export declare type ModelResolverResolve = (item: any, params: any, viewer: any, info?: any) => Promise<any>;
5
+ export declare type GlobalCheckPermissions = (params: any, viewer: any, info?: any) => Promise<string | void>;
6
+ export declare type ModelCheckPermissions = (parent: any, params: any, viewer: any, info?: any) => Promise<string | void>;
7
+ export declare type GlobalGetCacheKey = (params: any, viewer: any, info: any) => Promise<any>;
8
+ export declare type ModelGetCacheKey = (parent: any, params: any, viewer: any, info: any) => Promise<any>;
9
9
  export interface ExecuteOptions {
10
10
  params: Blackbox;
11
11
  viewer: any;
12
12
  parent?: any;
13
+ info?: any;
13
14
  options: ResolverOptions;
14
15
  }
15
16
  declare type Parameters<T> = T extends (...args: infer P) => any ? P : never;
@@ -19,6 +20,7 @@ export interface ExecuteParams<Resolve = Function, IsModel = undefined> {
19
20
  params?: ResolverParams<Resolve, IsModel>;
20
21
  viewer?: any;
21
22
  parent?: IsModel extends undefined ? undefined : Parameters<Resolve>[0];
23
+ info?: any;
22
24
  }
23
25
  export declare type Execute<Resolve = Function, IsModel = undefined> = (executeOptions: ExecuteParams<Resolve, IsModel>) => ReturnType<Resolve>;
24
26
  export interface SharedResolverOptions {
@@ -51,6 +53,7 @@ export interface PermissionCheckerOptions {
51
53
  parent: any;
52
54
  params: any;
53
55
  viewer: any;
56
+ info: any;
54
57
  }
55
58
  export declare type PermissionChecker = (options: PermissionCheckerOptions) => Promise<string | void>;
56
59
  export declare type ResolverMiddleware = (executeOptions: ExecuteOptions, next: () => Promise<any>) => Promise<any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/resolvers",
3
- "version": "3.9.0",
3
+ "version": "3.11.6-alpha.0",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "files": [
@@ -17,9 +17,9 @@
17
17
  "upgrade-interactive": "yarn upgrade-interactive"
18
18
  },
19
19
  "dependencies": {
20
- "@orion-js/cache": "^3.9.0",
21
- "@orion-js/helpers": "^3.9.0",
22
- "@orion-js/schema": "^3.9.0"
20
+ "@orion-js/cache": "^3.11.6-alpha.0",
21
+ "@orion-js/helpers": "^3.11.6-alpha.0",
22
+ "@orion-js/schema": "^3.11.6-alpha.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@shelf/jest-mongodb": "^2.1.0",
@@ -33,5 +33,5 @@
33
33
  "publishConfig": {
34
34
  "access": "public"
35
35
  },
36
- "gitHead": "23e0eda5348153dcc07b307a97b641d52eb41f39"
36
+ "gitHead": "cdcf47aed25cb864126e624cd808c08d7959b8a4"
37
37
  }