UNPKG

7.69 kBJavaScriptView Raw
1"use strict";
2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3 if (k2 === undefined) k2 = k;
4 var desc = Object.getOwnPropertyDescriptor(m, k);
5 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6 desc = { enumerable: true, get: function() { return m[k]; } };
7 }
8 Object.defineProperty(o, k2, desc);
9}) : (function(o, m, k, k2) {
10 if (k2 === undefined) k2 = k;
11 o[k2] = m[k];
12}));
13var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14 Object.defineProperty(o, "default", { enumerable: true, value: v });
15}) : function(o, v) {
16 o["default"] = v;
17});
18var __importStar = (this && this.__importStar) || function (mod) {
19 if (mod && mod.__esModule) return mod;
20 var result = {};
21 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22 __setModuleDefault(result, mod);
23 return result;
24};
25var __importDefault = (this && this.__importDefault) || function (mod) {
26 return (mod && mod.__esModule) ? mod : { "default": mod };
27};
28Object.defineProperty(exports, "__esModule", { value: true });
29exports.compression = exports.cors = exports.authenticate = exports.parseAuthentication = exports.notFound = exports.errorHandler = exports.formatter = exports.rest = exports.query = exports.urlencoded = exports.text = exports.raw = exports.json = exports.static = exports.serveStatic = exports.original = void 0;
30const express_1 = __importDefault(require("express"));
31const feathers_1 = require("@feathersjs/feathers");
32const transport_commons_1 = require("@feathersjs/transport-commons");
33const commons_1 = require("@feathersjs/commons");
34const cors_1 = __importDefault(require("cors"));
35exports.cors = cors_1.default;
36const compression_1 = __importDefault(require("compression"));
37exports.compression = compression_1.default;
38const rest_1 = require("./rest");
39Object.defineProperty(exports, "rest", { enumerable: true, get: function () { return rest_1.rest; } });
40Object.defineProperty(exports, "formatter", { enumerable: true, get: function () { return rest_1.formatter; } });
41const handlers_1 = require("./handlers");
42Object.defineProperty(exports, "errorHandler", { enumerable: true, get: function () { return handlers_1.errorHandler; } });
43Object.defineProperty(exports, "notFound", { enumerable: true, get: function () { return handlers_1.notFound; } });
44const authentication_1 = require("./authentication");
45Object.defineProperty(exports, "authenticate", { enumerable: true, get: function () { return authentication_1.authenticate; } });
46Object.defineProperty(exports, "parseAuthentication", { enumerable: true, get: function () { return authentication_1.parseAuthentication; } });
47const express_2 = __importStar(require("express"));
48Object.defineProperty(exports, "original", { enumerable: true, get: function () { return express_2.default; } });
49Object.defineProperty(exports, "serveStatic", { enumerable: true, get: function () { return express_2.static; } });
50Object.defineProperty(exports, "static", { enumerable: true, get: function () { return express_2.static; } });
51Object.defineProperty(exports, "json", { enumerable: true, get: function () { return express_2.json; } });
52Object.defineProperty(exports, "raw", { enumerable: true, get: function () { return express_2.raw; } });
53Object.defineProperty(exports, "text", { enumerable: true, get: function () { return express_2.text; } });
54Object.defineProperty(exports, "urlencoded", { enumerable: true, get: function () { return express_2.urlencoded; } });
55Object.defineProperty(exports, "query", { enumerable: true, get: function () { return express_2.query; } });
56const debug = (0, commons_1.createDebug)('@feathersjs/express');
57function feathersExpress(feathersApp, expressApp = (0, express_1.default)()) {
58 if (!feathersApp) {
59 return expressApp;
60 }
61 if (typeof feathersApp.setup !== 'function') {
62 throw new Error('@feathersjs/express requires a valid Feathers application instance');
63 }
64 const app = expressApp;
65 const { use: expressUse, listen: expressListen } = expressApp;
66 const { use: feathersUse, teardown: feathersTeardown } = feathersApp;
67 Object.assign(app, {
68 use(location, ...rest) {
69 let service;
70 let options = {};
71 const middleware = rest.reduce(function (middleware, arg) {
72 if (typeof arg === 'function' || Array.isArray(arg)) {
73 middleware[service ? 'after' : 'before'].push(arg);
74 }
75 else if (!service) {
76 service = arg;
77 }
78 else if (arg.methods || arg.events || arg.express || arg.koa) {
79 options = arg;
80 }
81 else {
82 throw new Error('Invalid options passed to app.use');
83 }
84 return middleware;
85 }, {
86 before: [],
87 after: []
88 });
89 const hasMethod = (methods) => methods.some((name) => service && typeof service[name] === 'function');
90 // Check for service (any object with at least one service method)
91 if (hasMethod(['handle', 'set']) || !hasMethod(feathers_1.defaultServiceMethods)) {
92 debug('Passing app.use call to Express app');
93 return expressUse.call(this, location, ...rest);
94 }
95 debug('Registering service with middleware', middleware);
96 // Since this is a service, call Feathers `.use`
97 feathersUse.call(this, location, service, {
98 express: middleware,
99 ...options
100 });
101 return this;
102 },
103 async listen(...args) {
104 const server = expressListen.call(this, ...args);
105 this.server = server;
106 await this.setup(server);
107 debug('Feathers application listening');
108 return server;
109 }
110 });
111 const appDescriptors = {
112 ...Object.getOwnPropertyDescriptors(Object.getPrototypeOf(app)),
113 ...Object.getOwnPropertyDescriptors(app)
114 };
115 const newDescriptors = {
116 ...Object.getOwnPropertyDescriptors(Object.getPrototypeOf(feathersApp)),
117 ...Object.getOwnPropertyDescriptors(feathersApp)
118 };
119 // Copy all non-existing properties (including non-enumerables)
120 // that don't already exist on the Express app
121 Object.keys(newDescriptors).forEach((prop) => {
122 const appProp = appDescriptors[prop];
123 const newProp = newDescriptors[prop];
124 if (appProp === undefined && newProp !== undefined) {
125 Object.defineProperty(expressApp, prop, newProp);
126 }
127 });
128 // Assign teardown and setup which will also make sure that hooks are initialized
129 app.setup = feathersApp.setup;
130 app.teardown = async function teardown(server) {
131 return feathersTeardown.call(this, server).then(() => new Promise((resolve, reject) => {
132 if (this.server) {
133 this.server.close((e) => (e ? reject(e) : resolve(this)));
134 }
135 else {
136 resolve(this);
137 }
138 }));
139 };
140 app.configure((0, transport_commons_1.routing)());
141 app.use((req, _res, next) => {
142 req.feathers = { ...req.feathers, provider: 'rest' };
143 return next();
144 });
145 return app;
146}
147exports.default = feathersExpress;
148if (typeof module !== 'undefined') {
149 module.exports = Object.assign(feathersExpress, module.exports);
150}
151//# sourceMappingURL=index.js.map
\No newline at end of file