@feathersjs/schema 5.0.0-pre.31 → 5.0.0-pre.33

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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.0.0-pre.33](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.32...v5.0.0-pre.33) (2022-11-08)
7
+
8
+ **Note:** Version bump only for package @feathersjs/schema
9
+
10
+ # [5.0.0-pre.32](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.31...v5.0.0-pre.32) (2022-10-26)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **schema:** Improve resolver performance ([#2822](https://github.com/feathersjs/feathers/issues/2822)) ([5fa900f](https://github.com/feathersjs/feathers/commit/5fa900f90d55859332c90283dddddab26ae3759c))
15
+ - **schema:** Use the same options for resolveData hook ([#2833](https://github.com/feathersjs/feathers/issues/2833)) ([ed3b050](https://github.com/feathersjs/feathers/commit/ed3b05051db6886729d4824825ca8f00c2459af7))
16
+
6
17
  # [5.0.0-pre.31](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.30...v5.0.0-pre.31) (2022-10-12)
7
18
 
8
19
  ### Features
@@ -1,22 +1,21 @@
1
1
  import { HookContext, NextFunction } from '@feathersjs/feathers';
2
2
  import { Resolver } from '../resolver';
3
3
  export declare type ResolverSetting<H extends HookContext> = Resolver<any, H> | Resolver<any, H>[];
4
- export declare type DataResolvers<H extends HookContext> = {
5
- create: Resolver<any, H>;
6
- patch: Resolver<any, H>;
7
- update: Resolver<any, H>;
8
- };
4
+ export declare const resolveQuery: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<any>;
5
+ export declare const resolveData: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<any>;
6
+ export declare const resolveResult: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<void>;
7
+ export declare const DISPATCH: unique symbol;
8
+ export declare const getDispatch: (value: any, fallback?: any) => any;
9
+ export declare const resolveDispatch: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<void>;
10
+ export declare const resolveExternal: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<void>;
9
11
  export declare type ResolveAllSettings<H extends HookContext> = {
10
- data?: DataResolvers<H>;
12
+ data?: {
13
+ create: Resolver<any, H>;
14
+ patch: Resolver<any, H>;
15
+ update: Resolver<any, H>;
16
+ };
11
17
  query?: Resolver<any, H>;
12
18
  result?: Resolver<any, H>;
13
19
  dispatch?: Resolver<any, H>;
14
20
  };
15
- export declare const DISPATCH: unique symbol;
16
- export declare const getDispatch: (value: any) => any;
17
- export declare const resolveQuery: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<any>;
18
- export declare const resolveData: <H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(settings: DataResolvers<H> | Resolver<any, H>) => (context: H, next?: NextFunction) => Promise<any>;
19
- export declare const resolveResult: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<void>;
20
- export declare const resolveDispatch: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<void>;
21
- export declare const resolveExternal: <T, H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(...resolvers: Resolver<T, H>[]) => (context: H, next?: NextFunction) => Promise<void>;
22
21
  export declare const resolveAll: <H extends HookContext<import("@feathersjs/feathers").Application<any, any>, any>>(map: ResolveAllSettings<H>) => (this: any, context: H, next?: import("@feathersjs/hooks").AsyncMiddleware<H>) => Promise<any>;
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveAll = exports.resolveExternal = exports.resolveDispatch = exports.resolveResult = exports.resolveData = exports.resolveQuery = exports.getDispatch = exports.DISPATCH = void 0;
3
+ exports.resolveAll = exports.resolveExternal = exports.resolveDispatch = exports.getDispatch = exports.DISPATCH = exports.resolveResult = exports.resolveData = exports.resolveQuery = void 0;
4
4
  const hooks_1 = require("@feathersjs/hooks");
5
- const resolver_1 = require("../resolver");
6
5
  const getContext = (context) => {
7
6
  return Object.freeze({
8
7
  ...context,
@@ -26,9 +25,6 @@ const runResolvers = async (resolvers, data, ctx, status) => {
26
25
  }
27
26
  return current;
28
27
  };
29
- exports.DISPATCH = Symbol('@feathersjs/schema/dispatch');
30
- const getDispatch = (value) => typeof value === 'object' && value !== null && value[exports.DISPATCH] !== undefined ? value[exports.DISPATCH] : value;
31
- exports.getDispatch = getDispatch;
32
28
  const resolveQuery = (...resolvers) => async (context, next) => {
33
29
  var _a;
34
30
  const ctx = getContext(context);
@@ -43,9 +39,8 @@ const resolveQuery = (...resolvers) => async (context, next) => {
43
39
  }
44
40
  };
45
41
  exports.resolveQuery = resolveQuery;
46
- const resolveData = (settings) => async (context, next) => {
47
- if (context.method === 'create' || context.method === 'patch' || context.method === 'update') {
48
- const resolvers = settings instanceof resolver_1.Resolver ? [settings] : [settings[context.method]];
42
+ const resolveData = (...resolvers) => async (context, next) => {
43
+ if (context.data !== undefined) {
49
44
  const ctx = getContext(context);
50
45
  const data = context.data;
51
46
  const status = {
@@ -93,38 +88,48 @@ const resolveResult = (...resolvers) => async (context, next) => {
93
88
  }
94
89
  };
95
90
  exports.resolveResult = resolveResult;
91
+ exports.DISPATCH = Symbol('@feathersjs/schema/dispatch');
92
+ const getDispatch = (value, fallback = value) => typeof value === 'object' && value !== null && value[exports.DISPATCH] !== undefined ? value[exports.DISPATCH] : fallback;
93
+ exports.getDispatch = getDispatch;
96
94
  const resolveDispatch = (...resolvers) => async (context, next) => {
97
95
  if (typeof next === 'function') {
98
96
  await next();
99
97
  }
100
98
  const ctx = getContext(context);
101
- const status = context.params.resolve;
102
- const { isPaginated, data } = getData(context);
103
- const resolveAndGetDispatch = async (current) => {
104
- const resolved = await runResolvers(resolvers, current, ctx, status);
105
- return Object.keys(resolved).reduce((res, key) => {
106
- res[key] = (0, exports.getDispatch)(resolved[key]);
107
- return res;
108
- }, {});
109
- };
110
- const result = await (Array.isArray(data)
111
- ? Promise.all(data.map(resolveAndGetDispatch))
112
- : resolveAndGetDispatch(data));
113
- const dispatch = isPaginated
114
- ? {
115
- ...context.result,
116
- data: result
117
- }
118
- : result;
119
- context.dispatch = dispatch;
120
- Object.defineProperty(context.result, exports.DISPATCH, {
121
- value: dispatch,
122
- enumerable: false,
123
- configurable: false
124
- });
99
+ const existingDispatch = (0, exports.getDispatch)(context.result, null);
100
+ if (existingDispatch !== null) {
101
+ context.dispatch = existingDispatch;
102
+ }
103
+ else {
104
+ const status = context.params.resolve;
105
+ const { isPaginated, data } = getData(context);
106
+ const resolveAndGetDispatch = async (current) => {
107
+ const resolved = await runResolvers(resolvers, current, ctx, status);
108
+ return Object.keys(resolved).reduce((res, key) => {
109
+ res[key] = (0, exports.getDispatch)(resolved[key]);
110
+ return res;
111
+ }, {});
112
+ };
113
+ const result = await (Array.isArray(data)
114
+ ? Promise.all(data.map(resolveAndGetDispatch))
115
+ : resolveAndGetDispatch(data));
116
+ const dispatch = isPaginated
117
+ ? {
118
+ ...context.result,
119
+ data: result
120
+ }
121
+ : result;
122
+ context.dispatch = dispatch;
123
+ Object.defineProperty(context.result, exports.DISPATCH, {
124
+ value: dispatch,
125
+ enumerable: false,
126
+ configurable: false
127
+ });
128
+ }
125
129
  };
126
130
  exports.resolveDispatch = resolveDispatch;
127
131
  exports.resolveExternal = exports.resolveDispatch;
132
+ const dataMethods = ['create', 'update', 'patch'];
128
133
  const resolveAll = (map) => {
129
134
  const middleware = [];
130
135
  middleware.push((0, exports.resolveDispatch)(map.dispatch));
@@ -135,7 +140,12 @@ const resolveAll = (map) => {
135
140
  middleware.push((0, exports.resolveQuery)(map.query));
136
141
  }
137
142
  if (map.data) {
138
- middleware.push((0, exports.resolveData)(map.data));
143
+ dataMethods.forEach((name) => {
144
+ if (map.data[name]) {
145
+ const resolver = (0, exports.resolveData)(map.data[name]);
146
+ middleware.push(async (context, next) => context.method === name ? resolver(context, next) : next());
147
+ }
148
+ });
139
149
  }
140
150
  return (0, hooks_1.compose)(middleware);
141
151
  };
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/hooks/resolve.ts"],"names":[],"mappings":";;;AACA,6CAA2C;AAC3C,0CAAsD;AAEtD,MAAM,UAAU,GAAG,CAAwB,OAAU,EAAE,EAAE;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,OAAO;QACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,GAAG,OAAO,CAAC,MAAM;YACjB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;SACzB,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAwB,OAAU,EAAE,EAAE;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAA;IACpE,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAA;IAE/D,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,EACxB,SAA2B,EAC3B,IAAS,EACT,GAAM,EACN,MAAsC,EACtC,EAAE;IACF,IAAI,OAAO,GAAQ,IAAI,CAAA;IAEvB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE;YACtD,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;SACvD;KACF;IAED,OAAO,OAAY,CAAA;AACrB,CAAC,CAAA;AAiBY,QAAA,QAAQ,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAA;AAEtD,MAAM,WAAW,GAAG,CAAC,KAAU,EAAE,EAAE,CACxC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,gBAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAD3F,QAAA,WAAW,eACgF;AAEjG,MAAM,YAAY,GACvB,CAA2B,GAAG,SAA2B,EAAE,EAAE,CAC7D,KAAK,EAAE,OAAU,EAAE,IAAmB,EAAE,EAAE;;IACxC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,KAAK,KAAI,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAEtD,OAAO,CAAC,MAAM,GAAG;QACf,GAAG,OAAO,CAAC,MAAM;QACjB,KAAK;KACN,CAAA;IAED,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,OAAO,IAAI,EAAE,CAAA;KACd;AACH,CAAC,CAAA;AAfU,QAAA,YAAY,gBAetB;AAEI,MAAM,WAAW,GACtB,CAAwB,QAA6C,EAAE,EAAE,CACzE,KAAK,EAAE,OAAU,EAAE,IAAmB,EAAE,EAAE;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC5F,MAAM,SAAS,GAAG,QAAQ,YAAY,mBAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QACxF,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QAEzB,MAAM,MAAM,GAAG;YACb,eAAe,EAAE,OAAO;SACzB,CAAA;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,CAAC,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;SACvG;aAAM;YACL,OAAO,CAAC,IAAI,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;SAChE;KACF;IAED,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,OAAO,IAAI,EAAE,CAAA;KACd;AACH,CAAC,CAAA;AAtBU,QAAA,WAAW,eAsBrB;AAEI,MAAM,aAAa,GACxB,CAA2B,GAAG,SAA2B,EAAE,EAAE,CAC7D,KAAK,EAAE,OAAU,EAAE,IAAmB,EAAE,EAAE;;IACxC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,GAAG,CAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,KAAK,KAAI,EAAE,CAAA;QACtE,MAAM,OAAO,GAAG;YACd,eAAe,EAAE,OAAO;YACxB,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO;YACzB,UAAU;SACX,CAAA;QAED,OAAO,CAAC,MAAM,GAAG;YACf,GAAG,OAAO,CAAC,MAAM;YACjB,OAAO;YACP,KAAK;SACN,CAAA;QAED,MAAM,IAAI,EAAE,CAAA;KACb;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAA;IACrC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAChC,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/F,CAAC,CAAC,MAAM,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;IAEpD,IAAI,WAAW,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAA;KAC7B;SAAM;QACL,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;KACxB;AACH,CAAC,CAAA;AAjCU,QAAA,aAAa,iBAiCvB;AAEI,MAAM,eAAe,GAC1B,CAA2B,GAAG,SAA2B,EAAE,EAAE,CAC7D,KAAK,EAAE,OAAU,EAAE,IAAmB,EAAE,EAAE;IACxC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,IAAI,EAAE,CAAA;KACb;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAA;IACrC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,qBAAqB,GAAG,KAAK,EAAE,OAAY,EAAE,EAAE;QACnD,MAAM,QAAQ,GAAQ,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;QAEzE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;YAErC,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,EAAS,CAAC,CAAA;IACf,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC9C,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,WAAW;QAC1B,CAAC,CAAC;YACE,GAAG,OAAO,CAAC,MAAM;YACjB,IAAI,EAAE,MAAM;SACb;QACH,CAAC,CAAC,MAAM,CAAA;IAEV,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC3B,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAQ,EAAE;QAC9C,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAA;AACJ,CAAC,CAAA;AApCU,QAAA,eAAe,mBAoCzB;AAEU,QAAA,eAAe,GAAG,uBAAe,CAAA;AAEvC,MAAM,UAAU,GAAG,CAAwB,GAA0B,EAAE,EAAE;IAC9E,MAAM,UAAU,GAAG,EAAE,CAAA;IAErB,UAAU,CAAC,IAAI,CAAC,IAAA,uBAAe,EAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE9C,IAAI,GAAG,CAAC,MAAM,EAAE;QACd,UAAU,CAAC,IAAI,CAAC,IAAA,qBAAa,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;KAC3C;IAED,IAAI,GAAG,CAAC,KAAK,EAAE;QACb,UAAU,CAAC,IAAI,CAAC,IAAA,oBAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;KACzC;IAED,IAAI,GAAG,CAAC,IAAI,EAAE;QACZ,UAAU,CAAC,IAAI,CAAC,IAAA,mBAAW,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;KACvC;IAED,OAAO,IAAA,eAAO,EAAC,UAAU,CAAC,CAAA;AAC5B,CAAC,CAAA;AAlBY,QAAA,UAAU,cAkBtB"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/hooks/resolve.ts"],"names":[],"mappings":"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"}
package/lib/resolver.d.ts CHANGED
@@ -23,12 +23,13 @@ export interface ResolverConfig<T, C> {
23
23
  export interface ResolverStatus<T, C> {
24
24
  path: string[];
25
25
  originalContext?: C;
26
- properties?: string[];
26
+ properties?: (keyof T)[];
27
27
  stack: PropertyResolver<T, any, C>[];
28
28
  }
29
29
  export declare class Resolver<T, C> {
30
30
  options: ResolverConfig<T, C>;
31
31
  readonly _type: T;
32
+ protected propertyNames: string[];
32
33
  constructor(options: ResolverConfig<T, C>);
33
34
  /**
34
35
  * Resolve a single property
package/lib/resolver.js CHANGED
@@ -5,6 +5,7 @@ const errors_1 = require("@feathersjs/errors");
5
5
  class Resolver {
6
6
  constructor(options) {
7
7
  this.options = options;
8
+ this.propertyNames = Object.keys(options.properties);
8
9
  }
9
10
  /**
10
11
  * Resolve a single property
@@ -40,11 +41,14 @@ class Resolver {
40
41
  async resolve(_data, context, status) {
41
42
  const { properties: resolvers, schema, validate } = this.options;
42
43
  const payload = await this.convert(_data, context, status);
44
+ if (!Array.isArray(status === null || status === void 0 ? void 0 : status.properties) && this.propertyNames.length === 0) {
45
+ return payload;
46
+ }
43
47
  const data = schema && validate === 'before' ? await schema.validate(payload) : payload;
44
48
  const propertyList = (Array.isArray(status === null || status === void 0 ? void 0 : status.properties)
45
49
  ? status === null || status === void 0 ? void 0 : status.properties
46
50
  : // By default get all data and resolver keys but remove duplicates
47
- [...new Set(Object.keys(data).concat(Object.keys(resolvers)))]);
51
+ [...new Set(Object.keys(data).concat(this.propertyNames))]);
48
52
  const result = {};
49
53
  const errors = {};
50
54
  let hasErrors = false;
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feathersjs/schema",
3
3
  "description": "A common data schema definition format",
4
- "version": "5.0.0-pre.31",
4
+ "version": "5.0.0-pre.33",
5
5
  "homepage": "https://feathersjs.com",
6
6
  "main": "lib/",
7
7
  "types": "lib/",
@@ -54,9 +54,9 @@
54
54
  "access": "public"
55
55
  },
56
56
  "dependencies": {
57
- "@feathersjs/commons": "^5.0.0-pre.31",
58
- "@feathersjs/errors": "^5.0.0-pre.31",
59
- "@feathersjs/feathers": "^5.0.0-pre.31",
57
+ "@feathersjs/commons": "^5.0.0-pre.33",
58
+ "@feathersjs/errors": "^5.0.0-pre.33",
59
+ "@feathersjs/feathers": "^5.0.0-pre.33",
60
60
  "@feathersjs/hooks": "^0.7.5",
61
61
  "@types/json-schema": "^7.0.11",
62
62
  "ajv": "^8.11.0",
@@ -64,13 +64,13 @@
64
64
  "json-schema-to-ts": "^2.5.5"
65
65
  },
66
66
  "devDependencies": {
67
- "@feathersjs/memory": "^5.0.0-pre.31",
67
+ "@feathersjs/memory": "^5.0.0-pre.33",
68
68
  "@types/mocha": "^10.0.0",
69
- "@types/node": "^18.8.2",
69
+ "@types/node": "^18.11.9",
70
70
  "ajv-formats": "^2.1.1",
71
- "mocha": "^10.0.0",
71
+ "mocha": "^10.1.0",
72
72
  "shx": "^0.3.4",
73
73
  "typescript": "^4.8.4"
74
74
  },
75
- "gitHead": "4500dbeb8cea566678cf88b3313a88efd93a2ed9"
75
+ "gitHead": "89f516bcb1457e23a02c6212e9cd8bacc4d267d4"
76
76
  }
@@ -38,24 +38,6 @@ const runResolvers = async <T, H extends HookContext>(
38
38
 
39
39
  export type ResolverSetting<H extends HookContext> = Resolver<any, H> | Resolver<any, H>[]
40
40
 
41
- export type DataResolvers<H extends HookContext> = {
42
- create: Resolver<any, H>
43
- patch: Resolver<any, H>
44
- update: Resolver<any, H>
45
- }
46
-
47
- export type ResolveAllSettings<H extends HookContext> = {
48
- data?: DataResolvers<H>
49
- query?: Resolver<any, H>
50
- result?: Resolver<any, H>
51
- dispatch?: Resolver<any, H>
52
- }
53
-
54
- export const DISPATCH = Symbol('@feathersjs/schema/dispatch')
55
-
56
- export const getDispatch = (value: any) =>
57
- typeof value === 'object' && value !== null && value[DISPATCH] !== undefined ? value[DISPATCH] : value
58
-
59
41
  export const resolveQuery =
60
42
  <T, H extends HookContext>(...resolvers: Resolver<T, H>[]) =>
61
43
  async (context: H, next?: NextFunction) => {
@@ -74,10 +56,9 @@ export const resolveQuery =
74
56
  }
75
57
 
76
58
  export const resolveData =
77
- <H extends HookContext>(settings: DataResolvers<H> | Resolver<any, H>) =>
59
+ <T, H extends HookContext>(...resolvers: Resolver<T, H>[]) =>
78
60
  async (context: H, next?: NextFunction) => {
79
- if (context.method === 'create' || context.method === 'patch' || context.method === 'update') {
80
- const resolvers = settings instanceof Resolver ? [settings] : [settings[context.method]]
61
+ if (context.data !== undefined) {
81
62
  const ctx = getContext(context)
82
63
  const data = context.data
83
64
 
@@ -132,6 +113,11 @@ export const resolveResult =
132
113
  }
133
114
  }
134
115
 
116
+ export const DISPATCH = Symbol('@feathersjs/schema/dispatch')
117
+
118
+ export const getDispatch = (value: any, fallback = value) =>
119
+ typeof value === 'object' && value !== null && value[DISPATCH] !== undefined ? value[DISPATCH] : fallback
120
+
135
121
  export const resolveDispatch =
136
122
  <T, H extends HookContext>(...resolvers: Resolver<T, H>[]) =>
137
123
  async (context: H, next?: NextFunction) => {
@@ -140,38 +126,57 @@ export const resolveDispatch =
140
126
  }
141
127
 
142
128
  const ctx = getContext(context)
143
- const status = context.params.resolve
144
- const { isPaginated, data } = getData(context)
145
- const resolveAndGetDispatch = async (current: any) => {
146
- const resolved: any = await runResolvers(resolvers, current, ctx, status)
129
+ const existingDispatch = getDispatch(context.result, null)
147
130
 
148
- return Object.keys(resolved).reduce((res, key) => {
149
- res[key] = getDispatch(resolved[key])
131
+ if (existingDispatch !== null) {
132
+ context.dispatch = existingDispatch
133
+ } else {
134
+ const status = context.params.resolve
135
+ const { isPaginated, data } = getData(context)
136
+ const resolveAndGetDispatch = async (current: any) => {
137
+ const resolved: any = await runResolvers(resolvers, current, ctx, status)
150
138
 
151
- return res
152
- }, {} as any)
153
- }
139
+ return Object.keys(resolved).reduce((res, key) => {
140
+ res[key] = getDispatch(resolved[key])
154
141
 
155
- const result = await (Array.isArray(data)
156
- ? Promise.all(data.map(resolveAndGetDispatch))
157
- : resolveAndGetDispatch(data))
158
- const dispatch = isPaginated
159
- ? {
160
- ...context.result,
161
- data: result
162
- }
163
- : result
164
-
165
- context.dispatch = dispatch
166
- Object.defineProperty(context.result, DISPATCH, {
167
- value: dispatch,
168
- enumerable: false,
169
- configurable: false
170
- })
142
+ return res
143
+ }, {} as any)
144
+ }
145
+
146
+ const result = await (Array.isArray(data)
147
+ ? Promise.all(data.map(resolveAndGetDispatch))
148
+ : resolveAndGetDispatch(data))
149
+ const dispatch = isPaginated
150
+ ? {
151
+ ...context.result,
152
+ data: result
153
+ }
154
+ : result
155
+
156
+ context.dispatch = dispatch
157
+ Object.defineProperty(context.result, DISPATCH, {
158
+ value: dispatch,
159
+ enumerable: false,
160
+ configurable: false
161
+ })
162
+ }
171
163
  }
172
164
 
173
165
  export const resolveExternal = resolveDispatch
174
166
 
167
+ export type ResolveAllSettings<H extends HookContext> = {
168
+ data?: {
169
+ create: Resolver<any, H>
170
+ patch: Resolver<any, H>
171
+ update: Resolver<any, H>
172
+ }
173
+ query?: Resolver<any, H>
174
+ result?: Resolver<any, H>
175
+ dispatch?: Resolver<any, H>
176
+ }
177
+
178
+ const dataMethods = ['create', 'update', 'patch'] as const
179
+
175
180
  export const resolveAll = <H extends HookContext>(map: ResolveAllSettings<H>) => {
176
181
  const middleware = []
177
182
 
@@ -186,7 +191,15 @@ export const resolveAll = <H extends HookContext>(map: ResolveAllSettings<H>) =>
186
191
  }
187
192
 
188
193
  if (map.data) {
189
- middleware.push(resolveData(map.data))
194
+ dataMethods.forEach((name) => {
195
+ if (map.data[name]) {
196
+ const resolver = resolveData(map.data[name])
197
+
198
+ middleware.push(async (context: H, next: NextFunction) =>
199
+ context.method === name ? resolver(context, next) : next()
200
+ )
201
+ }
202
+ })
190
203
  }
191
204
 
192
205
  return compose(middleware)
package/src/resolver.ts CHANGED
@@ -38,14 +38,17 @@ export interface ResolverConfig<T, C> {
38
38
  export interface ResolverStatus<T, C> {
39
39
  path: string[]
40
40
  originalContext?: C
41
- properties?: string[]
41
+ properties?: (keyof T)[]
42
42
  stack: PropertyResolver<T, any, C>[]
43
43
  }
44
44
 
45
45
  export class Resolver<T, C> {
46
46
  readonly _type!: T
47
+ protected propertyNames: string[]
47
48
 
48
- constructor(public options: ResolverConfig<T, C>) {}
49
+ constructor(public options: ResolverConfig<T, C>) {
50
+ this.propertyNames = Object.keys(options.properties)
51
+ }
49
52
 
50
53
  /**
51
54
  * Resolve a single property
@@ -93,12 +96,17 @@ export class Resolver<T, C> {
93
96
  async resolve<D>(_data: D, context: C, status?: Partial<ResolverStatus<T, C>>): Promise<T> {
94
97
  const { properties: resolvers, schema, validate } = this.options
95
98
  const payload = await this.convert(_data, context, status)
99
+
100
+ if (!Array.isArray(status?.properties) && this.propertyNames.length === 0) {
101
+ return payload as T
102
+ }
103
+
96
104
  const data = schema && validate === 'before' ? await schema.validate(payload) : payload
97
105
  const propertyList = (
98
106
  Array.isArray(status?.properties)
99
107
  ? status?.properties
100
108
  : // By default get all data and resolver keys but remove duplicates
101
- [...new Set(Object.keys(data).concat(Object.keys(resolvers)))]
109
+ [...new Set(Object.keys(data).concat(this.propertyNames))]
102
110
  ) as (keyof T)[]
103
111
 
104
112
  const result: any = {}