@feathersjs/feathers 5.0.0-pre.9 → 5.0.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.
- package/CHANGELOG.md +258 -233
- package/LICENSE +1 -1
- package/{readme.md → README.md} +7 -8
- package/lib/application.d.ts +20 -15
- package/lib/application.js +83 -44
- package/lib/application.js.map +1 -1
- package/lib/declarations.d.ts +193 -78
- package/lib/events.d.ts +2 -2
- package/lib/events.js +5 -6
- package/lib/events.js.map +1 -1
- package/lib/hooks.d.ts +42 -0
- package/lib/hooks.js +176 -0
- package/lib/hooks.js.map +1 -0
- package/lib/index.d.ts +2 -2
- package/lib/index.js +8 -4
- package/lib/index.js.map +1 -1
- package/lib/service.d.ts +3 -1
- package/lib/service.js +27 -26
- package/lib/service.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +17 -16
- package/src/application.ts +162 -101
- package/src/declarations.ts +281 -147
- package/src/events.ts +15 -15
- package/src/hooks.ts +234 -0
- package/src/index.ts +13 -12
- package/src/service.ts +38 -50
- package/src/version.ts +1 -1
- package/lib/dependencies.d.ts +0 -4
- package/lib/dependencies.js +0 -18
- package/lib/dependencies.js.map +0 -1
- package/lib/hooks/index.d.ts +0 -14
- package/lib/hooks/index.js +0 -84
- package/lib/hooks/index.js.map +0 -1
- package/lib/hooks/legacy.d.ts +0 -7
- package/lib/hooks/legacy.js +0 -114
- package/lib/hooks/legacy.js.map +0 -1
- package/src/dependencies.ts +0 -5
- package/src/hooks/index.ts +0 -109
- package/src/hooks/legacy.ts +0 -138
package/LICENSE
CHANGED
package/{readme.md → README.md}
RENAMED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
<img style="width: 100%; max-width: 400px;" src="http://feathersjs.com/img/feathers-logo-wide.png" alt="Feathers logo">
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## The API and real-time application framework
|
|
4
4
|
|
|
5
5
|
[](https://github.com/feathersjs/feathers/actions?query=workflow%3ACI)
|
|
6
6
|
[](https://codeclimate.com/github/feathersjs/feathers/maintainability)
|
|
7
7
|
[](https://codeclimate.com/github/feathersjs/feathers/test_coverage)
|
|
8
8
|
[](https://www.npmjs.com/package/@feathersjs/feathers)
|
|
9
|
+
[](https://discord.gg/qa8kez8QBx)
|
|
9
10
|
|
|
10
|
-
Feathers is a lightweight web-framework for creating real-time applications
|
|
11
|
+
Feathers is a lightweight web-framework for creating APIs and real-time applications using TypeScript or JavaScript.
|
|
11
12
|
|
|
12
|
-
Feathers can interact with any backend technology, supports
|
|
13
|
+
Feathers can interact with any backend technology, supports many databases out of the box and works with any frontend technology like React, VueJS, Angular, React Native, Android or iOS.
|
|
13
14
|
|
|
14
15
|
## Getting started
|
|
15
16
|
|
|
16
17
|
You can build your first real-time and REST API in just 4 commands:
|
|
17
18
|
|
|
18
19
|
```bash
|
|
19
|
-
$ npm
|
|
20
|
-
$
|
|
21
|
-
$ cd my-new-app/
|
|
22
|
-
$ feathers generate app
|
|
20
|
+
$ npm init feathers my-new-app
|
|
21
|
+
$ cd my-new-app
|
|
23
22
|
$ npm start
|
|
24
23
|
```
|
|
25
24
|
|
|
@@ -31,6 +30,6 @@ The [Feathers docs](http://docs.feathersjs.com) are loaded with awesome stuff an
|
|
|
31
30
|
|
|
32
31
|
## License
|
|
33
32
|
|
|
34
|
-
Copyright (c)
|
|
33
|
+
Copyright (c) 2023 [Feathers contributors](https://github.com/feathersjs/feathers/graphs/contributors)
|
|
35
34
|
|
|
36
35
|
Licensed under the [MIT license](LICENSE).
|
package/lib/application.d.ts
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { EventEmitter } from '
|
|
3
|
-
import { FeathersApplication, ServiceMixin, Service, ServiceOptions, ServiceInterface, Application,
|
|
4
|
-
export declare class Feathers<
|
|
5
|
-
services:
|
|
6
|
-
settings:
|
|
7
|
-
mixins: ServiceMixin<Application<
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { FeathersApplication, ServiceMixin, Service, ServiceOptions, ServiceInterface, Application, FeathersService, ApplicationHookOptions } from './declarations';
|
|
4
|
+
export declare class Feathers<Services, Settings> extends EventEmitter implements FeathersApplication<Services, Settings> {
|
|
5
|
+
services: Services;
|
|
6
|
+
settings: Settings;
|
|
7
|
+
mixins: ServiceMixin<Application<Services, Settings>>[];
|
|
8
8
|
version: string;
|
|
9
9
|
_isSetup: boolean;
|
|
10
|
-
|
|
11
|
-
private legacyHooks;
|
|
10
|
+
protected registerHooks: (this: any, allHooks: any) => any;
|
|
12
11
|
constructor();
|
|
13
|
-
get<L extends keyof
|
|
14
|
-
set<L extends keyof
|
|
12
|
+
get<L extends keyof Settings & string>(name: L): Settings[L];
|
|
13
|
+
set<L extends keyof Settings & string>(name: L, value: Settings[L]): this;
|
|
15
14
|
configure(callback: (this: this, app: this) => void): this;
|
|
16
|
-
defaultService(location: string): ServiceInterface
|
|
17
|
-
service<L extends keyof
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
setup(
|
|
15
|
+
defaultService(location: string): ServiceInterface;
|
|
16
|
+
service<L extends keyof Services & string>(location: L): FeathersService<this, keyof any extends keyof Services ? Service : Services[L]>;
|
|
17
|
+
protected _setup(): Promise<this>;
|
|
18
|
+
get setup(): () => Promise<this>;
|
|
19
|
+
set setup(value: () => Promise<this>);
|
|
20
|
+
protected _teardown(): Promise<this>;
|
|
21
|
+
get teardown(): () => Promise<this>;
|
|
22
|
+
set teardown(value: () => Promise<this>);
|
|
23
|
+
use<L extends keyof Services & string>(path: L, service: keyof any extends keyof Services ? ServiceInterface | Application : Services[L], options?: ServiceOptions<keyof any extends keyof Services ? string : keyof Services[L]>): this;
|
|
24
|
+
unuse<L extends keyof Services & string>(location: L): Promise<FeathersService<this, keyof any extends keyof Services ? Service : Services[L]>>;
|
|
25
|
+
hooks(hookMap: ApplicationHookOptions<this>): this;
|
|
21
26
|
}
|
package/lib/application.js
CHANGED
|
@@ -5,24 +5,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Feathers = void 0;
|
|
7
7
|
const version_1 = __importDefault(require("./version"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
8
|
+
const events_1 = require("events");
|
|
9
|
+
const commons_1 = require("@feathersjs/commons");
|
|
10
|
+
const hooks_1 = require("@feathersjs/hooks");
|
|
11
|
+
const events_2 = require("./events");
|
|
12
|
+
const hooks_2 = require("./hooks");
|
|
11
13
|
const service_1 = require("./service");
|
|
12
|
-
const
|
|
13
|
-
const debug =
|
|
14
|
-
class Feathers extends
|
|
14
|
+
const hooks_3 = require("./hooks");
|
|
15
|
+
const debug = (0, commons_1.createDebug)('@feathersjs/feathers');
|
|
16
|
+
class Feathers extends events_1.EventEmitter {
|
|
15
17
|
constructor() {
|
|
16
18
|
super();
|
|
17
19
|
this.services = {};
|
|
18
20
|
this.settings = {};
|
|
19
|
-
this.mixins = [
|
|
21
|
+
this.mixins = [hooks_2.hookMixin, events_2.eventMixin];
|
|
20
22
|
this.version = version_1.default;
|
|
21
23
|
this._isSetup = false;
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
this.registerHooks = (0, hooks_3.enableHooks)(this);
|
|
25
|
+
this.registerHooks({
|
|
26
|
+
around: [events_2.eventHook]
|
|
27
|
+
});
|
|
26
28
|
}
|
|
27
29
|
get(name) {
|
|
28
30
|
return this.settings[name];
|
|
@@ -39,7 +41,7 @@ class Feathers extends dependencies_1.EventEmitter {
|
|
|
39
41
|
throw new Error(`Can not find service '${location}'`);
|
|
40
42
|
}
|
|
41
43
|
service(location) {
|
|
42
|
-
const path = (
|
|
44
|
+
const path = ((0, commons_1.stripSlashes)(location) || '/');
|
|
43
45
|
const current = this.services[path];
|
|
44
46
|
if (typeof current === 'undefined') {
|
|
45
47
|
this.use(path, this.defaultService(path));
|
|
@@ -47,19 +49,63 @@ class Feathers extends dependencies_1.EventEmitter {
|
|
|
47
49
|
}
|
|
48
50
|
return current;
|
|
49
51
|
}
|
|
52
|
+
_setup() {
|
|
53
|
+
this._isSetup = true;
|
|
54
|
+
return Object.keys(this.services)
|
|
55
|
+
.reduce((current, path) => current.then(() => {
|
|
56
|
+
const service = this.service(path);
|
|
57
|
+
if (typeof service.setup === 'function') {
|
|
58
|
+
debug(`Setting up service for \`${path}\``);
|
|
59
|
+
return service.setup(this, path);
|
|
60
|
+
}
|
|
61
|
+
}), Promise.resolve())
|
|
62
|
+
.then(() => this);
|
|
63
|
+
}
|
|
64
|
+
get setup() {
|
|
65
|
+
return this._setup;
|
|
66
|
+
}
|
|
67
|
+
set setup(value) {
|
|
68
|
+
this._setup = value[hooks_1.HOOKS]
|
|
69
|
+
? value
|
|
70
|
+
: (0, hooks_1.hooks)(value, (0, hooks_1.middleware)().params('server').props({
|
|
71
|
+
app: this
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
_teardown() {
|
|
75
|
+
this._isSetup = false;
|
|
76
|
+
return Object.keys(this.services)
|
|
77
|
+
.reduce((current, path) => current.then(() => {
|
|
78
|
+
const service = this.service(path);
|
|
79
|
+
if (typeof service.teardown === 'function') {
|
|
80
|
+
debug(`Tearing down service for \`${path}\``);
|
|
81
|
+
return service.teardown(this, path);
|
|
82
|
+
}
|
|
83
|
+
}), Promise.resolve())
|
|
84
|
+
.then(() => this);
|
|
85
|
+
}
|
|
86
|
+
get teardown() {
|
|
87
|
+
return this._teardown;
|
|
88
|
+
}
|
|
89
|
+
set teardown(value) {
|
|
90
|
+
this._teardown = value[hooks_1.HOOKS]
|
|
91
|
+
? value
|
|
92
|
+
: (0, hooks_1.hooks)(value, (0, hooks_1.middleware)().params('server').props({
|
|
93
|
+
app: this
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
50
96
|
use(path, service, options) {
|
|
51
97
|
if (typeof path !== 'string') {
|
|
52
98
|
throw new Error(`'${path}' is not a valid service path.`);
|
|
53
99
|
}
|
|
54
|
-
const location = (
|
|
100
|
+
const location = ((0, commons_1.stripSlashes)(path) || '/');
|
|
55
101
|
const subApp = service;
|
|
56
102
|
const isSubApp = typeof subApp.service === 'function' && subApp.services;
|
|
57
103
|
if (isSubApp) {
|
|
58
|
-
Object.keys(subApp.services).forEach(subPath => this.use(`${location}/${subPath}`, subApp.service(subPath)));
|
|
104
|
+
Object.keys(subApp.services).forEach((subPath) => this.use(`${location}/${subPath}`, subApp.service(subPath)));
|
|
59
105
|
return this;
|
|
60
106
|
}
|
|
61
|
-
const protoService = service_1.wrapService(location, service, options);
|
|
62
|
-
const serviceOptions = service_1.getServiceOptions(
|
|
107
|
+
const protoService = (0, service_1.wrapService)(location, service, options);
|
|
108
|
+
const serviceOptions = (0, service_1.getServiceOptions)(protoService);
|
|
63
109
|
for (const name of service_1.protectedMethods) {
|
|
64
110
|
if (serviceOptions.methods.includes(name)) {
|
|
65
111
|
throw new Error(`'${name}' on service '${location}' is not allowed as a custom method name`);
|
|
@@ -67,49 +113,42 @@ class Feathers extends dependencies_1.EventEmitter {
|
|
|
67
113
|
}
|
|
68
114
|
debug(`Registering new service at \`${location}\``);
|
|
69
115
|
// Add all the mixins
|
|
70
|
-
this.mixins.forEach(fn => fn.call(this, protoService, location, serviceOptions));
|
|
116
|
+
this.mixins.forEach((fn) => fn.call(this, protoService, location, serviceOptions));
|
|
117
|
+
this.services[location] = protoService;
|
|
71
118
|
// If we ran setup already, set this service up explicitly, this will not `await`
|
|
72
119
|
if (this._isSetup && typeof protoService.setup === 'function') {
|
|
73
120
|
debug(`Setting up service for \`${location}\``);
|
|
74
121
|
protoService.setup(this, location);
|
|
75
122
|
}
|
|
76
|
-
this.services[location] = protoService;
|
|
77
123
|
return this;
|
|
78
124
|
}
|
|
125
|
+
async unuse(location) {
|
|
126
|
+
const path = ((0, commons_1.stripSlashes)(location) || '/');
|
|
127
|
+
const service = this.services[path];
|
|
128
|
+
if (service && typeof service.teardown === 'function') {
|
|
129
|
+
await service.teardown(this, path);
|
|
130
|
+
}
|
|
131
|
+
delete this.services[path];
|
|
132
|
+
return service;
|
|
133
|
+
}
|
|
79
134
|
hooks(hookMap) {
|
|
80
|
-
const
|
|
81
|
-
if (
|
|
82
|
-
|
|
135
|
+
const untypedMap = hookMap;
|
|
136
|
+
if (untypedMap.before || untypedMap.after || untypedMap.error || untypedMap.around) {
|
|
137
|
+
// regular hooks for all service methods
|
|
138
|
+
this.registerHooks(untypedMap);
|
|
83
139
|
}
|
|
84
|
-
if (
|
|
85
|
-
|
|
140
|
+
else if (untypedMap.setup || untypedMap.teardown) {
|
|
141
|
+
// .setup and .teardown application hooks
|
|
142
|
+
(0, hooks_1.hooks)(this, untypedMap);
|
|
86
143
|
}
|
|
87
144
|
else {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.appHooks[key] = methodHooks.concat(methodHookMap[key]);
|
|
145
|
+
// Other registration formats are just `around` hooks
|
|
146
|
+
this.registerHooks({
|
|
147
|
+
around: untypedMap
|
|
92
148
|
});
|
|
93
149
|
}
|
|
94
150
|
return this;
|
|
95
151
|
}
|
|
96
|
-
setup() {
|
|
97
|
-
let promise = Promise.resolve();
|
|
98
|
-
// Setup each service (pass the app so that they can look up other services etc.)
|
|
99
|
-
for (const path of Object.keys(this.services)) {
|
|
100
|
-
promise = promise.then(() => {
|
|
101
|
-
const service = this.service(path);
|
|
102
|
-
if (typeof service.setup === 'function') {
|
|
103
|
-
debug(`Setting up service for \`${path}\``);
|
|
104
|
-
return service.setup(this, path);
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
return promise.then(() => {
|
|
109
|
-
this._isSetup = true;
|
|
110
|
-
return this;
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
152
|
}
|
|
114
153
|
exports.Feathers = Feathers;
|
|
115
154
|
//# sourceMappingURL=application.js.map
|
package/lib/application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"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"}
|