@feathersjs/express 5.0.0-pre.1 → 5.0.0-pre.15

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/lib/rest/index.js DELETED
@@ -1,129 +0,0 @@
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.rest = exports.formatter = exports.getDefaultRoutes = exports.getServiceRoutes = exports.parseRoute = exports.getDefaultUri = exports.httpMethod = void 0;
7
- const debug_1 = __importDefault(require("debug"));
8
- const commons_1 = require("@feathersjs/commons");
9
- const authentication_1 = require("../authentication");
10
- const getHandler_1 = require("./getHandler");
11
- const debug = debug_1.default('@feathersjs/express/rest');
12
- const HTTP_METHOD = Symbol('@feathersjs/express/rest/HTTP_METHOD');
13
- function httpMethod(verb, uris) {
14
- return (method) => {
15
- Object.defineProperty(method, HTTP_METHOD, {
16
- enumerable: false,
17
- configurable: true,
18
- writable: false,
19
- value: (Array.isArray(uris) ? uris : [uris])
20
- .reduce((result, uri) => ([...result, { verb, uri }]), method[HTTP_METHOD] || [])
21
- });
22
- return method;
23
- };
24
- }
25
- exports.httpMethod = httpMethod;
26
- function getDefaultUri(path, methods, method) {
27
- return methods[method].indexOf('id') === -1
28
- ? `/${path}/${method}`
29
- : `/${path}/:__feathersId/${method}`;
30
- }
31
- exports.getDefaultUri = getDefaultUri;
32
- function parseRoute(path, methods, method, route) {
33
- return {
34
- method,
35
- verb: route.verb,
36
- uri: route.uri ? `/${path}/${commons_1.stripSlashes(route.uri)}` : getDefaultUri(path, methods, method)
37
- };
38
- }
39
- exports.parseRoute = parseRoute;
40
- function getServiceRoutes(service, path, defaultRoutes) {
41
- const { methods } = service;
42
- return Object.keys(methods)
43
- .filter(method => (service[method] && service[method][HTTP_METHOD]))
44
- .reduce((result, method) => {
45
- const routes = service[method][HTTP_METHOD];
46
- if (Array.isArray(routes)) {
47
- return [
48
- ...result,
49
- ...routes.map(route => parseRoute(path, methods, method, route))
50
- ];
51
- }
52
- return [
53
- ...result,
54
- parseRoute(path, methods, method, routes)
55
- ];
56
- }, defaultRoutes);
57
- }
58
- exports.getServiceRoutes = getServiceRoutes;
59
- function getDefaultRoutes(uri) {
60
- const idUri = `${uri}/:__feathersId`;
61
- return [
62
- { method: 'find', verb: 'GET', uri },
63
- { method: 'get', verb: 'GET', uri: idUri },
64
- { method: 'create', verb: 'POST', uri },
65
- { method: 'patch', verb: 'PATCH', uri: idUri },
66
- { method: 'patch', verb: 'PATCH', uri },
67
- { method: 'update', verb: 'PUT', uri: idUri },
68
- { method: 'update', verb: 'PUT', uri },
69
- { method: 'remove', verb: 'DELETE', uri: idUri },
70
- { method: 'remove', verb: 'DELETE', uri } // remove(null, data, params)
71
- ];
72
- }
73
- exports.getDefaultRoutes = getDefaultRoutes;
74
- function formatter(_req, res, next) {
75
- if (res.data === undefined) {
76
- return next();
77
- }
78
- res.format({
79
- 'application/json'() {
80
- res.json(res.data);
81
- }
82
- });
83
- }
84
- exports.formatter = formatter;
85
- function rest(handler = formatter) {
86
- return function () {
87
- const app = this;
88
- if (typeof app.route !== 'function') {
89
- throw new Error('@feathersjs/express/rest needs an Express compatible app. Feathers apps have to wrapped with feathers-express first.');
90
- }
91
- if (!app.version || app.version < '3.0.0') {
92
- throw new Error(`@feathersjs/express/rest requires an instance of a Feathers application version 3.x or later (got ${app.version})`);
93
- }
94
- app.rest = {
95
- find: getHandler_1.getHandler('find'),
96
- get: getHandler_1.getHandler('get'),
97
- create: getHandler_1.getHandler('create'),
98
- update: getHandler_1.getHandler('update'),
99
- patch: getHandler_1.getHandler('patch'),
100
- remove: getHandler_1.getHandler('remove')
101
- };
102
- app.use((req, _res, next) => {
103
- req.feathers = Object.assign({
104
- provider: 'rest',
105
- headers: req.headers
106
- }, req.feathers);
107
- next();
108
- });
109
- app.use(authentication_1.parseAuthentication());
110
- // Register the REST provider
111
- app.providers.push(function (service, path, options) {
112
- const baseUri = `/${path}`;
113
- const { middleware: { before } } = options;
114
- let { middleware: { after } } = options;
115
- if (typeof handler === 'function') {
116
- after = after.concat(handler);
117
- }
118
- debug(`Adding REST provider for service \`${path}\` at base route \`${baseUri}\``);
119
- const routes = getServiceRoutes(service, path, getDefaultRoutes(baseUri));
120
- for (const { method, verb, uri } of routes) {
121
- app.route(uri)[verb.toLowerCase()](...before, getHandler_1.getHandler(method)(service, routes), ...after);
122
- }
123
- });
124
- };
125
- }
126
- exports.rest = rest;
127
- rest.formatter = formatter;
128
- rest.httpMethod = httpMethod;
129
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rest/index.ts"],"names":[],"mappings":"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"}
@@ -1,115 +0,0 @@
1
- import Debug from 'debug';
2
- import { Request, Response, NextFunction } from 'express';
3
- import { MethodNotAllowed } from '@feathersjs/errors';
4
- import { _ } from '@feathersjs/commons';
5
- import { HookContext } from '@feathersjs/feathers';
6
-
7
- const { omit } = _;
8
- const debug = Debug('@feathersjs/express/rest');
9
-
10
- export const statusCodes = {
11
- created: 201,
12
- noContent: 204,
13
- methodNotAllowed: 405
14
- };
15
- export const methodMap = {
16
- find: 'GET',
17
- get: 'GET',
18
- create: 'POST',
19
- update: 'PUT',
20
- patch: 'PATCH',
21
- remove: 'DELETE'
22
- };
23
-
24
- export function getAllowedMethods (service: any, routes: any) {
25
- if (routes) {
26
- return routes
27
- .filter(({ method }: any) => typeof service[method] === 'function')
28
- .map((methodRoute: any) => methodRoute.verb.toUpperCase())
29
- .filter((value: any, index: number, list: any) => list.indexOf(value) === index);
30
- }
31
-
32
- return Object.keys(methodMap)
33
- .filter((method: any) => typeof service[method] === 'function')
34
- .map((method: any) => (methodMap as any)[method])
35
- // Filter out duplicates
36
- .filter((value: any, index: number, list: any) => list.indexOf(value) === index);
37
- }
38
-
39
- export function makeArgsGetter (argsOrder: any) {
40
- return (req: Request, params: any) => argsOrder.map((argName: string) => {
41
- switch (argName) {
42
- case 'id':
43
- return req.params.__feathersId || null;
44
- case 'data':
45
- return req.body;
46
- case 'params':
47
- return params;
48
- }
49
- });
50
- }
51
-
52
- // A function that returns the middleware for a given method and service
53
- // `getArgs` is a function that should return additional leading service arguments
54
- export function getHandler (method: string) {
55
- return (service: any, routes: any) => {
56
- const getArgs = makeArgsGetter(service.methods[method]);
57
- const allowedMethods = getAllowedMethods(service, routes);
58
-
59
- return (req: Request, res: Response, next: NextFunction) => {
60
- const { query } = req;
61
- const route = omit(req.params, '__feathersId');
62
-
63
- res.setHeader('Allow', allowedMethods.join(','));
64
-
65
- // Check if the method exists on the service at all. Send 405 (Method not allowed) if not
66
- if (typeof service[method] !== 'function') {
67
- debug(`Method '${method}' not allowed on '${req.url}'`);
68
- res.status(statusCodes.methodNotAllowed);
69
-
70
- return next(new MethodNotAllowed(`Method \`${method}\` is not supported by this endpoint.`));
71
- }
72
-
73
- // Grab the service parameters. Use req.feathers
74
- // and set the query to req.query merged with req.params
75
- const params = Object.assign({
76
- query, route
77
- }, req.feathers);
78
-
79
- Object.defineProperty(params, '__returnHook', {
80
- value: true
81
- });
82
-
83
- const args = getArgs(req, params);
84
-
85
- debug(`REST handler calling \`${method}\` from \`${req.url}\``);
86
-
87
- service[method](...args, true)
88
- .then((hook: HookContext) => {
89
- const data = hook.dispatch !== undefined ? hook.dispatch : hook.result;
90
-
91
- res.data = data;
92
- res.hook = hook;
93
-
94
- if (hook.statusCode) {
95
- res.status(hook.statusCode);
96
- } else if (!data) {
97
- debug(`No content returned for '${req.url}'`);
98
- res.status(statusCodes.noContent);
99
- } else if (method === 'create') {
100
- res.status(statusCodes.created);
101
- }
102
-
103
- return next();
104
- })
105
- .catch((hook: HookContext) => {
106
- const { error } = hook;
107
-
108
- debug(`Error in handler: \`${error.message}\``);
109
- res.hook = hook;
110
-
111
- return next(hook.error);
112
- });
113
- };
114
- };
115
- }
package/src/rest/index.ts DELETED
@@ -1,148 +0,0 @@
1
- import Debug from 'debug';
2
- import { stripSlashes } from '@feathersjs/commons';
3
- import { Request, Response, NextFunction, RequestHandler } from 'express';
4
- import { parseAuthentication } from '../authentication';
5
- import { getHandler } from './getHandler';
6
-
7
- const debug = Debug('@feathersjs/express/rest');
8
- const HTTP_METHOD = Symbol('@feathersjs/express/rest/HTTP_METHOD');
9
-
10
- export function httpMethod (verb: any, uris?: any) {
11
- return (method: any) => {
12
- Object.defineProperty(method, HTTP_METHOD, {
13
- enumerable: false,
14
- configurable: true,
15
- writable: false,
16
- value: (Array.isArray(uris) ? uris : [uris])
17
- .reduce(
18
- (result, uri) => ([...result, { verb, uri }]),
19
- method[HTTP_METHOD] || []
20
- )
21
- });
22
-
23
- return method;
24
- };
25
- }
26
-
27
- export function getDefaultUri (path: string, methods: any, method: any) {
28
- return methods[method].indexOf('id') === -1
29
- ? `/${path}/${method}`
30
- : `/${path}/:__feathersId/${method}`;
31
- }
32
-
33
- export function parseRoute (path: any, methods: any, method: any, route: any) {
34
- return {
35
- method,
36
- verb: route.verb,
37
- uri: route.uri ? `/${path}/${stripSlashes(route.uri)}` : getDefaultUri(path, methods, method)
38
- };
39
- }
40
-
41
- export function getServiceRoutes (service: any, path: any, defaultRoutes: any) {
42
- const { methods } = service;
43
-
44
- return Object.keys(methods)
45
- .filter(method => (service[method] && service[method][HTTP_METHOD]))
46
- .reduce((result, method) => {
47
- const routes = service[method][HTTP_METHOD];
48
-
49
- if (Array.isArray(routes)) {
50
- return [
51
- ...result,
52
- ...routes.map(route => parseRoute(path, methods, method, route))
53
- ];
54
- }
55
-
56
- return [
57
- ...result,
58
- parseRoute(path, methods, method, routes)
59
- ];
60
- }, defaultRoutes);
61
- }
62
-
63
- export function getDefaultRoutes (uri: string) {
64
- const idUri = `${uri}/:__feathersId`;
65
-
66
- return [
67
- { method: 'find', verb: 'GET', uri }, // find(params)
68
- { method: 'get', verb: 'GET', uri: idUri }, // get(id, params)
69
- { method: 'create', verb: 'POST', uri }, // create(data, params)
70
- { method: 'patch', verb: 'PATCH', uri: idUri }, // patch(id, data, params)
71
- { method: 'patch', verb: 'PATCH', uri }, // patch(null, data, params)
72
- { method: 'update', verb: 'PUT', uri: idUri }, // update(id, data, params)
73
- { method: 'update', verb: 'PUT', uri }, // update(null, data, params)
74
- { method: 'remove', verb: 'DELETE', uri: idUri }, // remove(id, data, params)
75
- { method: 'remove', verb: 'DELETE', uri } // remove(null, data, params)
76
- ];
77
- }
78
-
79
- export function formatter (_req: Request, res: Response, next: NextFunction) {
80
- if (res.data === undefined) {
81
- return next();
82
- }
83
-
84
- res.format({
85
- 'application/json' () {
86
- res.json(res.data);
87
- }
88
- });
89
- }
90
-
91
- export function rest (handler: RequestHandler = formatter) {
92
- return function (this: any) {
93
- const app = this;
94
-
95
- if (typeof app.route !== 'function') {
96
- throw new Error('@feathersjs/express/rest needs an Express compatible app. Feathers apps have to wrapped with feathers-express first.');
97
- }
98
-
99
- if (!app.version || app.version < '3.0.0') {
100
- throw new Error(`@feathersjs/express/rest requires an instance of a Feathers application version 3.x or later (got ${app.version})`);
101
- }
102
-
103
- app.rest = {
104
- find: getHandler('find'),
105
- get: getHandler('get'),
106
- create: getHandler('create'),
107
- update: getHandler('update'),
108
- patch: getHandler('patch'),
109
- remove: getHandler('remove')
110
- };
111
-
112
- app.use((req: Request, _res: Response, next: NextFunction) => {
113
- req.feathers = Object.assign({
114
- provider: 'rest',
115
- headers: req.headers
116
- }, req.feathers);
117
- next();
118
- });
119
-
120
- app.use(parseAuthentication());
121
-
122
- // Register the REST provider
123
- app.providers.push(function (service: any, path: string, options: any) {
124
- const baseUri = `/${path}`;
125
- const { middleware: { before } } = options;
126
- let { middleware: { after } } = options;
127
-
128
- if (typeof handler === 'function') {
129
- after = after.concat(handler);
130
- }
131
-
132
- debug(`Adding REST provider for service \`${path}\` at base route \`${baseUri}\``);
133
-
134
- const routes = getServiceRoutes(service, path, getDefaultRoutes(baseUri));
135
-
136
- for (const { method, verb, uri } of routes) {
137
- app.route(uri)[verb.toLowerCase()](
138
- ...before,
139
- getHandler(method)(service, routes),
140
- ...after
141
- );
142
- }
143
- });
144
- };
145
- }
146
-
147
- rest.formatter = formatter;
148
- rest.httpMethod = httpMethod;