@feathersjs/feathers 5.0.0-pre.25 → 5.0.0-pre.28

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,34 @@
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.28](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.27...v5.0.0-pre.28) (2022-08-03)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **cli:** Improve generated application and client ([#2701](https://github.com/feathersjs/feathers/issues/2701)) ([bd55ffb](https://github.com/feathersjs/feathers/commit/bd55ffb812e89bf215f4515e7f137656ea888c3f))
12
+ * **core:** Get hooks to work reliably with custom methods ([#2714](https://github.com/feathersjs/feathers/issues/2714)) ([8d7e04a](https://github.com/feathersjs/feathers/commit/8d7e04acd0f0e2af9f4c13efee652d296dd3bc51))
13
+
14
+
15
+
16
+
17
+
18
+ # [5.0.0-pre.27](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.26...v5.0.0-pre.27) (2022-07-13)
19
+
20
+ **Note:** Version bump only for package @feathersjs/feathers
21
+
22
+
23
+
24
+
25
+
26
+ # [5.0.0-pre.26](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.25...v5.0.0-pre.26) (2022-06-22)
27
+
28
+ **Note:** Version bump only for package @feathersjs/feathers
29
+
30
+
31
+
32
+
33
+
6
34
  # [5.0.0-pre.25](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.24...v5.0.0-pre.25) (2022-06-22)
7
35
 
8
36
  **Note:** Version bump only for package @feathersjs/feathers
package/lib/hooks.d.ts CHANGED
@@ -1,10 +1,30 @@
1
1
  import { HookContextData, HookManager, Middleware } from '@feathersjs/hooks';
2
2
  import { Service, ServiceOptions, HookContext, FeathersService, HookMap, AroundHookFunction, HookFunction } from './declarations';
3
- export declare function collectHooks(target: any, method: string): any;
3
+ declare type HookStore = {
4
+ around: {
5
+ [method: string]: AroundHookFunction[];
6
+ };
7
+ before: {
8
+ [method: string]: HookFunction[];
9
+ };
10
+ after: {
11
+ [method: string]: HookFunction[];
12
+ };
13
+ error: {
14
+ [method: string]: HookFunction[];
15
+ };
16
+ collected: {
17
+ [method: string]: AroundHookFunction[];
18
+ };
19
+ };
20
+ declare type HookEnabled = {
21
+ __hooks: HookStore;
22
+ };
4
23
  export declare function convertHookData(input: any): {
5
- [method: string]: HookFunction<import("./declarations").Application<any, any>, Service<any, Partial<any>, import("./declarations").Params<import("./declarations").Query>>>[] | AroundHookFunction<import("./declarations").Application<any, any>, Service<any, Partial<any>, import("./declarations").Params<import("./declarations").Query>>>[];
24
+ [method: string]: AroundHookFunction<import("./declarations").Application<any, any>, Service<any, Partial<any>, import("./declarations").Params<import("./declarations").Query>>>[] | HookFunction<import("./declarations").Application<any, any>, Service<any, Partial<any>, import("./declarations").Params<import("./declarations").Query>>>[];
6
25
  };
7
- export declare function enableHooks(object: any, methods?: string[]): (this: any, input: HookMap<any, any>) => any;
26
+ export declare function collectHooks(target: HookEnabled, method: string): AroundHookFunction<import("./declarations").Application<any, any>, Service<any, Partial<any>, import("./declarations").Params<import("./declarations").Query>>>[];
27
+ export declare function enableHooks(object: any): (this: HookEnabled, input: HookMap<any, any>) => HookEnabled;
8
28
  export declare function createContext(service: Service, method: string, data?: HookContextData): HookContext<import("./declarations").Application<any, any>, any>;
9
29
  export declare class FeathersHookManager<A> extends HookManager {
10
30
  app: A;
@@ -15,3 +35,4 @@ export declare class FeathersHookManager<A> extends HookManager {
15
35
  middleware(mw: Middleware[]): this;
16
36
  }
17
37
  export declare function hookMixin<A>(this: A, service: FeathersService<A>, path: string, options: ServiceOptions): FeathersService<A, Service<any, Partial<any>, import("./declarations").Params<import("./declarations").Query>>>;
38
+ export {};
package/lib/hooks.js CHANGED
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hookMixin = exports.FeathersHookManager = exports.createContext = exports.enableHooks = exports.convertHookData = exports.collectHooks = void 0;
3
+ exports.hookMixin = exports.FeathersHookManager = exports.createContext = exports.enableHooks = exports.collectHooks = exports.convertHookData = void 0;
4
4
  const hooks_1 = require("@feathersjs/hooks");
5
5
  const service_1 = require("./service");
6
- function collectHooks(target, method) {
7
- return target.__hooks.hooks[method] || [];
8
- }
9
- exports.collectHooks = collectHooks;
6
+ const types = ['before', 'after', 'error', 'around'];
7
+ const isType = (value) => types.includes(value);
10
8
  // Converts different hook registration formats into the
11
9
  // same internal format
12
10
  function convertHookData(input) {
@@ -26,55 +24,25 @@ function convertHookData(input) {
26
24
  return result;
27
25
  }
28
26
  exports.convertHookData = convertHookData;
29
- const types = ['before', 'after', 'error', 'around'];
30
- const isType = (value) => types.includes(value);
31
- const createMap = (input, methods) => {
32
- const map = {};
33
- Object.keys(input).forEach((type) => {
34
- if (!isType(type)) {
35
- throw new Error(`'${type}' is not a valid hook type`);
36
- }
37
- const data = convertHookData(input[type]);
38
- Object.keys(data).forEach((method) => {
39
- if (method !== 'all' && !methods.includes(method) && !service_1.defaultServiceMethods.includes(method)) {
40
- throw new Error(`'${method}' is not a valid hook method`);
41
- }
42
- });
43
- map[type] = data;
44
- });
45
- return map;
46
- };
47
- const updateStore = (store, map) => Object.keys(store.hooks).forEach((method) => {
48
- Object.keys(map).forEach((key) => {
49
- var _a;
50
- const type = key;
51
- const allHooks = map[type].all || [];
52
- const methodHooks = map[type][method] || [];
53
- if (allHooks.length || methodHooks.length) {
54
- const list = [...allHooks, ...methodHooks];
55
- const hooks = ((_a = store[type])[method] || (_a[method] = []));
56
- hooks.push(...list);
57
- }
58
- });
59
- const collected = (0, hooks_1.collect)({
60
- before: store.before[method] || [],
61
- after: store.after[method] || [],
62
- error: store.error[method] || []
63
- });
64
- store.hooks[method] = [...(store.around[method] || []), collected];
65
- });
27
+ function collectHooks(target, method) {
28
+ const { collected, around } = target.__hooks;
29
+ return [
30
+ ...(around.all || []),
31
+ ...(around[method] || []),
32
+ ...(collected.all || []),
33
+ ...(collected[method] || [])
34
+ ];
35
+ }
36
+ exports.collectHooks = collectHooks;
66
37
  // Add `.hooks` functionality to an object
67
- function enableHooks(object, methods = service_1.defaultServiceMethods) {
38
+ function enableHooks(object) {
68
39
  const store = {
69
40
  around: {},
70
41
  before: {},
71
42
  after: {},
72
43
  error: {},
73
- hooks: {}
44
+ collected: {}
74
45
  };
75
- for (const method of methods) {
76
- store.hooks[method] = [];
77
- }
78
46
  Object.defineProperty(object, '__hooks', {
79
47
  configurable: true,
80
48
  value: store,
@@ -82,8 +50,28 @@ function enableHooks(object, methods = service_1.defaultServiceMethods) {
82
50
  });
83
51
  return function registerHooks(input) {
84
52
  const store = this.__hooks;
85
- const map = createMap(input, methods);
86
- updateStore(store, map);
53
+ const map = Object.keys(input).reduce((map, type) => {
54
+ if (!isType(type)) {
55
+ throw new Error(`'${type}' is not a valid hook type`);
56
+ }
57
+ map[type] = convertHookData(input[type]);
58
+ return map;
59
+ }, {});
60
+ const types = Object.keys(map);
61
+ types.forEach((type) => Object.keys(map[type]).forEach((method) => {
62
+ var _a;
63
+ const mapHooks = map[type][method];
64
+ const storeHooks = ((_a = store[type])[method] || (_a[method] = []));
65
+ storeHooks.push(...mapHooks);
66
+ if (store.before[method] || store.after[method] || store.error[method]) {
67
+ const collected = (0, hooks_1.collect)({
68
+ before: store.before[method] || [],
69
+ after: store.after[method] || [],
70
+ error: store.error[method] || []
71
+ });
72
+ store.collected[method] = [collected];
73
+ }
74
+ }));
87
75
  return this;
88
76
  };
89
77
  }
@@ -145,7 +133,7 @@ function hookMixin(service, path, options) {
145
133
  });
146
134
  return res;
147
135
  }, {});
148
- const registerHooks = enableHooks(service, hookMethods);
136
+ const registerHooks = enableHooks(service);
149
137
  (0, hooks_1.hooks)(service, serviceMethodHooks);
150
138
  service.hooks = function (hookOptions) {
151
139
  if (hookOptions.before || hookOptions.after || hookOptions.error || hookOptions.around) {
package/lib/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const _default: "5.0.0-pre.25";
1
+ declare const _default: "5.0.0-pre.28";
2
2
  export default _default;
package/lib/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = '5.0.0-pre.25';
3
+ exports.default = '5.0.0-pre.28';
4
4
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feathersjs/feathers",
3
3
  "description": "A framework for real-time applications and REST API with JavaScript and TypeScript",
4
- "version": "5.0.0-pre.25",
4
+ "version": "5.0.0-pre.28",
5
5
  "homepage": "http://feathersjs.com",
6
6
  "repository": {
7
7
  "type": "git",
@@ -47,7 +47,8 @@
47
47
  "prepublish": "npm run compile",
48
48
  "version": "npm run write-version",
49
49
  "publish": "npm run reset-version",
50
- "compile": "shx rm -rf lib/ && tsc",
50
+ "pack": "npm pack --pack-destination ../cli/test",
51
+ "compile": "shx rm -rf lib/ && tsc && npm run pack",
51
52
  "test": "mocha --config ../../.mocharc.json --recursive test/"
52
53
  },
53
54
  "engines": {
@@ -57,17 +58,17 @@
57
58
  "access": "public"
58
59
  },
59
60
  "dependencies": {
60
- "@feathersjs/commons": "^5.0.0-pre.25",
61
+ "@feathersjs/commons": "^5.0.0-pre.28",
61
62
  "@feathersjs/hooks": "^0.7.5",
62
63
  "events": "^3.3.0"
63
64
  },
64
65
  "devDependencies": {
65
66
  "@types/mocha": "^9.1.1",
66
- "@types/node": "^17.0.40",
67
+ "@types/node": "^18.6.3",
67
68
  "mocha": "^10.0.0",
68
69
  "shx": "^0.3.4",
69
- "ts-node": "^10.8.1",
70
- "typescript": "^4.7.3"
70
+ "ts-node": "^10.9.1",
71
+ "typescript": "^4.7.4"
71
72
  },
72
- "gitHead": "c0ab3b603920dff6e9c912b2767cf168094d45c8"
73
+ "gitHead": "bf8e54fddc14d688ba8f505e72c9630a71656ff1"
73
74
  }
package/src/hooks.ts CHANGED
@@ -16,12 +16,26 @@ import {
16
16
  AroundHookFunction,
17
17
  HookFunction
18
18
  } from './declarations'
19
- import { defaultServiceArguments, defaultServiceMethods, getHookMethods } from './service'
19
+ import { defaultServiceArguments, getHookMethods } from './service'
20
20
 
21
- export function collectHooks(target: any, method: string) {
22
- return target.__hooks.hooks[method] || []
21
+ type HookType = 'before' | 'after' | 'error' | 'around'
22
+
23
+ type ConvertedMap = { [type in HookType]: ReturnType<typeof convertHookData> }
24
+
25
+ type HookStore = {
26
+ around: { [method: string]: AroundHookFunction[] }
27
+ before: { [method: string]: HookFunction[] }
28
+ after: { [method: string]: HookFunction[] }
29
+ error: { [method: string]: HookFunction[] }
30
+ collected: { [method: string]: AroundHookFunction[] }
23
31
  }
24
32
 
33
+ type HookEnabled = { __hooks: HookStore }
34
+
35
+ const types: HookType[] = ['before', 'after', 'error', 'around']
36
+
37
+ const isType = (value: any): value is HookType => types.includes(value)
38
+
25
39
  // Converts different hook registration formats into the
26
40
  // same internal format
27
41
  export function convertHookData(input: any) {
@@ -41,80 +55,25 @@ export function convertHookData(input: any) {
41
55
  return result
42
56
  }
43
57
 
44
- type HookTypes = 'before' | 'after' | 'error' | 'around'
45
-
46
- type ConvertedMap = { [type in HookTypes]: ReturnType<typeof convertHookData> }
47
-
48
- type HookStore = {
49
- around: { [method: string]: AroundHookFunction[] }
50
- before: { [method: string]: HookFunction[] }
51
- after: { [method: string]: HookFunction[] }
52
- error: { [method: string]: HookFunction[] }
53
- hooks: { [method: string]: AroundHookFunction[] }
54
- }
55
-
56
- const types: HookTypes[] = ['before', 'after', 'error', 'around']
57
-
58
- const isType = (value: any): value is HookTypes => types.includes(value)
59
-
60
- const createMap = (input: HookMap<any, any>, methods: string[]) => {
61
- const map = {} as ConvertedMap
62
-
63
- Object.keys(input).forEach((type) => {
64
- if (!isType(type)) {
65
- throw new Error(`'${type}' is not a valid hook type`)
66
- }
67
-
68
- const data = convertHookData(input[type])
69
-
70
- Object.keys(data).forEach((method) => {
71
- if (method !== 'all' && !methods.includes(method) && !defaultServiceMethods.includes(method)) {
72
- throw new Error(`'${method}' is not a valid hook method`)
73
- }
74
- })
75
-
76
- map[type] = data
77
- })
58
+ export function collectHooks(target: HookEnabled, method: string) {
59
+ const { collected, around } = target.__hooks
78
60
 
79
- return map
61
+ return [
62
+ ...(around.all || []),
63
+ ...(around[method] || []),
64
+ ...(collected.all || []),
65
+ ...(collected[method] || [])
66
+ ] as AroundHookFunction[]
80
67
  }
81
68
 
82
- const updateStore = (store: HookStore, map: ConvertedMap) =>
83
- Object.keys(store.hooks).forEach((method) => {
84
- Object.keys(map).forEach((key) => {
85
- const type = key as HookTypes
86
- const allHooks = map[type].all || []
87
- const methodHooks = map[type][method] || []
88
-
89
- if (allHooks.length || methodHooks.length) {
90
- const list = [...allHooks, ...methodHooks] as any
91
- const hooks = (store[type][method] ||= [])
92
-
93
- hooks.push(...list)
94
- }
95
- })
96
-
97
- const collected = collect({
98
- before: store.before[method] || [],
99
- after: store.after[method] || [],
100
- error: store.error[method] || []
101
- })
102
-
103
- store.hooks[method] = [...(store.around[method] || []), collected]
104
- })
105
-
106
69
  // Add `.hooks` functionality to an object
107
- export function enableHooks(object: any, methods: string[] = defaultServiceMethods) {
70
+ export function enableHooks(object: any) {
108
71
  const store: HookStore = {
109
72
  around: {},
110
73
  before: {},
111
74
  after: {},
112
75
  error: {},
113
- hooks: {}
114
- }
115
-
116
- for (const method of methods) {
117
- store.hooks[method] = []
76
+ collected: {}
118
77
  }
119
78
 
120
79
  Object.defineProperty(object, '__hooks', {
@@ -123,11 +82,37 @@ export function enableHooks(object: any, methods: string[] = defaultServiceMetho
123
82
  writable: true
124
83
  })
125
84
 
126
- return function registerHooks(this: any, input: HookMap<any, any>) {
85
+ return function registerHooks(this: HookEnabled, input: HookMap<any, any>) {
127
86
  const store = this.__hooks
128
- const map = createMap(input, methods)
87
+ const map = Object.keys(input).reduce((map, type) => {
88
+ if (!isType(type)) {
89
+ throw new Error(`'${type}' is not a valid hook type`)
90
+ }
91
+
92
+ map[type] = convertHookData(input[type])
93
+
94
+ return map
95
+ }, {} as ConvertedMap)
96
+ const types = Object.keys(map) as HookType[]
97
+
98
+ types.forEach((type) =>
99
+ Object.keys(map[type]).forEach((method) => {
100
+ const mapHooks = map[type][method]
101
+ const storeHooks: any[] = (store[type][method] ||= [])
102
+
103
+ storeHooks.push(...mapHooks)
104
+
105
+ if (store.before[method] || store.after[method] || store.error[method]) {
106
+ const collected = collect({
107
+ before: store.before[method] || [],
108
+ after: store.after[method] || [],
109
+ error: store.error[method] || []
110
+ })
129
111
 
130
- updateStore(store, map)
112
+ store.collected[method] = [collected]
113
+ }
114
+ })
115
+ )
131
116
 
132
117
  return this
133
118
  }
@@ -150,7 +135,7 @@ export class FeathersHookManager<A> extends HookManager {
150
135
  }
151
136
 
152
137
  collectMiddleware(self: any, args: any[]): Middleware[] {
153
- const appHooks = collectHooks(this.app, this.method)
138
+ const appHooks = collectHooks(this.app as any as HookEnabled, this.method)
154
139
  const middleware = super.collectMiddleware(self, args)
155
140
  const methodHooks = collectHooks(self, this.method)
156
141
 
@@ -200,7 +185,7 @@ export function hookMixin<A>(this: A, service: FeathersService<A>, path: string,
200
185
  return res
201
186
  }, {} as BaseHookMap)
202
187
 
203
- const registerHooks = enableHooks(service, hookMethods)
188
+ const registerHooks = enableHooks(service)
204
189
 
205
190
  hooks(service, serviceMethodHooks)
206
191
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export default '5.0.0-pre.25'
1
+ export default '5.0.0-pre.28'