@orion-js/resolvers 3.4.9 → 3.5.3

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.
@@ -0,0 +1,2 @@
1
+ import { ResolverMiddleware } from './resolver/types';
2
+ export declare function createResolverMiddleware(middleware: ResolverMiddleware): ResolverMiddleware;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createResolverMiddleware = void 0;
4
+ function createResolverMiddleware(middleware) {
5
+ return middleware;
6
+ }
7
+ exports.createResolverMiddleware = createResolverMiddleware;
package/lib/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { resolver, modelResolver } from './resolver';
2
2
  export * from './resolver/types';
3
+ export * from './createResolverMiddleware';
3
4
  import checkPermissions from './resolver/getExecute/checkPermissions';
4
5
  import { addPermissionChecker } from './resolver/permisionsCheckers';
5
6
  import cleanParams from './resolver/cleanParams';
package/lib/index.js CHANGED
@@ -18,6 +18,7 @@ const resolver_1 = require("./resolver");
18
18
  Object.defineProperty(exports, "resolver", { enumerable: true, get: function () { return resolver_1.resolver; } });
19
19
  Object.defineProperty(exports, "modelResolver", { enumerable: true, get: function () { return resolver_1.modelResolver; } });
20
20
  __exportStar(require("./resolver/types"), exports);
21
+ __exportStar(require("./createResolverMiddleware"), exports);
21
22
  const checkPermissions_1 = __importDefault(require("./resolver/getExecute/checkPermissions"));
22
23
  exports.checkPermissions = checkPermissions_1.default;
23
24
  const permisionsCheckers_1 = require("./resolver/permisionsCheckers");
@@ -0,0 +1,2 @@
1
+ import { ExecuteOptions, ResolverOptions } from '../types';
2
+ export declare function getResultWithMiddlewares(options: ResolverOptions, executeOptions: ExecuteOptions): Promise<any>;
@@ -0,0 +1,20 @@
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
+ exports.getResultWithMiddlewares = void 0;
7
+ const helpers_1 = require("@orion-js/helpers");
8
+ const createResolverMiddleware_1 = require("../../createResolverMiddleware");
9
+ const getResult_1 = __importDefault(require("./getResult"));
10
+ async function getResultWithMiddlewares(options, executeOptions) {
11
+ const resolveMiddleware = (0, createResolverMiddleware_1.createResolverMiddleware)(async (executeOptions, next) => {
12
+ return await (0, getResult_1.default)(options, executeOptions);
13
+ });
14
+ const composedMiddlewares = (0, helpers_1.composeMiddlewares)([
15
+ ...(options.middlewares || []),
16
+ resolveMiddleware
17
+ ]);
18
+ return await composedMiddlewares(executeOptions);
19
+ }
20
+ exports.getResultWithMiddlewares = getResultWithMiddlewares;
@@ -1,2 +1,2 @@
1
1
  import { ResolverOptions, Execute } from '../types';
2
- export default function (options: ResolverOptions): Execute<Function, undefined>;
2
+ export default function getExecute(options: ResolverOptions): Execute<Function, undefined>;
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const checkPermissions_1 = __importDefault(require("./checkPermissions"));
7
7
  const cleanAndValidate_1 = __importDefault(require("./cleanAndValidate"));
8
8
  const initResult_1 = __importDefault(require("./initResult"));
9
- const getResult_1 = __importDefault(require("./getResult"));
10
- function default_1(options) {
9
+ const getResultWithMiddlewares_1 = require("./getResultWithMiddlewares");
10
+ function getExecute(options) {
11
11
  const execute = async (executeParams) => {
12
12
  const executeOptions = {
13
13
  params: await (0, cleanAndValidate_1.default)({
@@ -18,9 +18,9 @@ function default_1(options) {
18
18
  parent: executeParams.parent
19
19
  };
20
20
  await (0, checkPermissions_1.default)(executeOptions, options);
21
- const result = await (0, getResult_1.default)(options, executeOptions);
21
+ const result = await (0, getResultWithMiddlewares_1.getResultWithMiddlewares)(options, executeOptions);
22
22
  return (0, initResult_1.default)(options, result);
23
23
  };
24
24
  return execute;
25
25
  }
26
- exports.default = default_1;
26
+ exports.default = getExecute;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const __1 = require("..");
4
+ const createResolverMiddleware_1 = require("../../createResolverMiddleware");
5
+ it('should call middlewares in the correct order', async () => {
6
+ const order = [];
7
+ const middleware1 = (0, createResolverMiddleware_1.createResolverMiddleware)(async (executeOptions, next) => {
8
+ order.push(1);
9
+ const result = await next();
10
+ order.push(result);
11
+ order.push(3);
12
+ return 'middleware1';
13
+ });
14
+ const middleware2 = (0, createResolverMiddleware_1.createResolverMiddleware)(async ({ params, viewer }, next) => {
15
+ order.push(2);
16
+ const result = await next();
17
+ order.push(result);
18
+ order.push(4);
19
+ return 'middleware2';
20
+ });
21
+ const testResolver = (0, __1.resolver)({
22
+ params: {},
23
+ middlewares: [middleware1, middleware2],
24
+ async resolve() {
25
+ order.push(5);
26
+ return 'resolve';
27
+ }
28
+ });
29
+ const finalResult = await testResolver.resolve();
30
+ expect(finalResult).toEqual('middleware1');
31
+ expect(order).toEqual([1, 2, 5, 'resolve', 4, 'middleware2', 3]);
32
+ });
33
+ it('should let you throw an error inside a middleware', () => {
34
+ const middleware1 = (0, createResolverMiddleware_1.createResolverMiddleware)(async (executeOptions, next) => {
35
+ throw new Error('middleware1');
36
+ });
37
+ const testResolver = (0, __1.resolver)({
38
+ params: {},
39
+ middlewares: [middleware1],
40
+ async resolve() {
41
+ return 'resolve';
42
+ }
43
+ });
44
+ expect(testResolver.resolve()).rejects.toEqual(new Error('middleware1'));
45
+ });
46
+ it('should work with model resolvers and modify its params', async () => {
47
+ const middleware1 = (0, createResolverMiddleware_1.createResolverMiddleware)(async (executeOptions, next) => {
48
+ executeOptions.params.number = 2;
49
+ executeOptions.parent.text = 'middleware';
50
+ const result = await next();
51
+ return result;
52
+ });
53
+ const testResolver = (0, __1.modelResolver)({
54
+ params: { number: { type: Number } },
55
+ middlewares: [middleware1],
56
+ async resolve(model, params, viewer) {
57
+ return `${model.text} ${params.number}`;
58
+ }
59
+ });
60
+ const finalResult = await testResolver.execute({
61
+ params: { number: 1 },
62
+ parent: { text: 'test' }
63
+ });
64
+ expect(finalResult).toEqual('middleware 2');
65
+ });
@@ -10,7 +10,7 @@ const helpers_1 = require("@orion-js/helpers");
10
10
  const cache_1 = require("@orion-js/cache");
11
11
  const cleanReturns_1 = __importDefault(require("./cleanReturns"));
12
12
  const getArgs_1 = require("./getArgs");
13
- const createResolver = function (options) {
13
+ function createResolver(options) {
14
14
  options.params = (0, cleanParams_1.default)(options.params);
15
15
  options.returns = (0, cleanReturns_1.default)(options.returns);
16
16
  if (!options.cacheProvider) {
@@ -19,6 +19,9 @@ const createResolver = function (options) {
19
19
  if (!options.resolverId) {
20
20
  options.resolverId = (0, helpers_1.generateId)();
21
21
  }
22
+ if (!options.middlewares) {
23
+ options.middlewares = [];
24
+ }
22
25
  const execute = (0, getExecute_1.default)(options);
23
26
  const resolve = async (...args) => {
24
27
  const params = (0, getArgs_1.getArgs)(...args);
@@ -30,7 +33,7 @@ const createResolver = function (options) {
30
33
  execute
31
34
  };
32
35
  return resolver;
33
- };
36
+ }
34
37
  const resolver = createResolver;
35
38
  exports.resolver = resolver;
36
39
  const modelResolver = createResolver;
@@ -1,4 +1,5 @@
1
1
  import { OrionCache } from '@orion-js/cache';
2
+ import { Blackbox } from '@orion-js/schema';
2
3
  export declare type GlobalResolverResolve = (params: any, viewer: any) => Promise<any>;
3
4
  export declare type ModelResolverResolve = (item: any, params: any, viewer: any) => Promise<any>;
4
5
  export declare type GlobalCheckPermissions = (params: any, viewer: any) => Promise<string | void>;
@@ -6,7 +7,7 @@ export declare type ModelCheckPermissions = (parent: any, params: any, viewer: a
6
7
  export declare type GlobalGetCacheKey = (params: any, viewer: any) => Promise<any>;
7
8
  export declare type ModelGetCacheKey = (parent: any, params: any, viewer: any) => Promise<any>;
8
9
  export interface ExecuteOptions {
9
- params: object;
10
+ params: Blackbox;
10
11
  viewer: any;
11
12
  parent?: any;
12
13
  }
@@ -30,6 +31,7 @@ export interface SharedResolverOptions {
30
31
  cache?: number;
31
32
  cacheProvider?: OrionCache;
32
33
  permissionsOptions?: any;
34
+ middlewares?: ResolverMiddleware[];
33
35
  }
34
36
  export interface ResolverOptions<Resolve = Function> extends SharedResolverOptions {
35
37
  resolve: Resolve;
@@ -50,4 +52,5 @@ export interface PermissionCheckerOptions {
50
52
  viewer: any;
51
53
  }
52
54
  export declare type PermissionChecker = (options: PermissionCheckerOptions) => Promise<string | void>;
55
+ export declare type ResolverMiddleware = (executeOptions: ExecuteOptions, next: () => Promise<any>) => Promise<any>;
53
56
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/resolvers",
3
- "version": "3.4.9",
3
+ "version": "3.5.3",
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.4.1",
21
- "@orion-js/helpers": "^3.4.1",
22
- "@orion-js/schema": "^3.4.9"
20
+ "@orion-js/cache": "^3.5.3",
21
+ "@orion-js/helpers": "^3.5.3",
22
+ "@orion-js/schema": "^3.5.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": "e9c223e70752b6c613f58e63f8fd9fab471618de"
36
+ "gitHead": "34430096bb765afdc07b6f3c079915d424491b9c"
37
37
  }