@feathersjs/express
Version:
Feathers Express framework bindings and REST provider
162 lines • 8.15 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compression = exports.cors = exports.authenticate = exports.parseAuthentication = exports.notFound = exports.errorHandler = exports.formatter = exports.Router = exports.rest = exports.query = exports.urlencoded = exports.text = exports.raw = exports.json = exports.static = exports.serveStatic = exports.original = void 0;
exports.default = feathersExpress;
const express_1 = __importDefault(require("express"));
const feathers_1 = require("@feathersjs/feathers");
const transport_commons_1 = require("@feathersjs/transport-commons");
const commons_1 = require("@feathersjs/commons");
const cors_1 = __importDefault(require("cors"));
exports.cors = cors_1.default;
const compression_1 = __importDefault(require("compression"));
exports.compression = compression_1.default;
const rest_1 = require("./rest");
Object.defineProperty(exports, "rest", { enumerable: true, get: function () { return rest_1.rest; } });
Object.defineProperty(exports, "formatter", { enumerable: true, get: function () { return rest_1.formatter; } });
const handlers_1 = require("./handlers");
Object.defineProperty(exports, "errorHandler", { enumerable: true, get: function () { return handlers_1.errorHandler; } });
Object.defineProperty(exports, "notFound", { enumerable: true, get: function () { return handlers_1.notFound; } });
const authentication_1 = require("./authentication");
Object.defineProperty(exports, "authenticate", { enumerable: true, get: function () { return authentication_1.authenticate; } });
Object.defineProperty(exports, "parseAuthentication", { enumerable: true, get: function () { return authentication_1.parseAuthentication; } });
const express_2 = __importStar(require("express"));
Object.defineProperty(exports, "original", { enumerable: true, get: function () { return express_2.default; } });
Object.defineProperty(exports, "serveStatic", { enumerable: true, get: function () { return express_2.static; } });
Object.defineProperty(exports, "static", { enumerable: true, get: function () { return express_2.static; } });
Object.defineProperty(exports, "json", { enumerable: true, get: function () { return express_2.json; } });
Object.defineProperty(exports, "raw", { enumerable: true, get: function () { return express_2.raw; } });
Object.defineProperty(exports, "text", { enumerable: true, get: function () { return express_2.text; } });
Object.defineProperty(exports, "urlencoded", { enumerable: true, get: function () { return express_2.urlencoded; } });
Object.defineProperty(exports, "query", { enumerable: true, get: function () { return express_2.query; } });
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return express_2.Router; } });
const debug = (0, commons_1.createDebug)('@feathersjs/express');
function feathersExpress(feathersApp, expressApp = (0, express_1.default)()) {
if (!feathersApp) {
return expressApp;
}
if (typeof feathersApp.setup !== 'function') {
throw new Error('@feathersjs/express requires a valid Feathers application instance');
}
const app = expressApp;
const { use: expressUse, listen: expressListen } = expressApp;
const { use: feathersUse, teardown: feathersTeardown } = feathersApp;
Object.assign(app, {
use(location, ...rest) {
let service;
let options = {};
const middleware = rest.reduce(function (middleware, arg) {
if (typeof arg === 'function' || Array.isArray(arg)) {
middleware[service ? 'after' : 'before'].push(arg);
}
else if (!service) {
service = arg;
}
else if (arg.methods || arg.events || arg.express || arg.koa) {
options = arg;
}
else {
throw new Error('Invalid options passed to app.use');
}
return middleware;
}, {
before: [],
after: []
});
const hasMethod = (methods) => methods.some((name) => service && typeof service[name] === 'function');
// Check for service (any object with at least one service method)
if (hasMethod(['handle', 'set']) || !hasMethod(feathers_1.defaultServiceMethods)) {
debug('Passing app.use call to Express app');
return expressUse.call(this, location, ...rest);
}
debug('Registering service with middleware', middleware);
// Since this is a service, call Feathers `.use`
feathersUse.call(this, location, service, {
express: middleware,
...options
});
return this;
},
async listen(...args) {
const server = expressListen.call(this, ...args);
this.server = server;
await this.setup(server);
debug('Feathers application listening');
return server;
}
});
const appDescriptors = {
...Object.getOwnPropertyDescriptors(Object.getPrototypeOf(app)),
...Object.getOwnPropertyDescriptors(app)
};
const newDescriptors = {
...Object.getOwnPropertyDescriptors(Object.getPrototypeOf(feathersApp)),
...Object.getOwnPropertyDescriptors(feathersApp)
};
// Copy all non-existing properties (including non-enumerables)
// that don't already exist on the Express app
Object.keys(newDescriptors).forEach((prop) => {
const appProp = appDescriptors[prop];
const newProp = newDescriptors[prop];
if (appProp === undefined && newProp !== undefined) {
Object.defineProperty(expressApp, prop, newProp);
}
});
// Assign teardown and setup which will also make sure that hooks are initialized
app.setup = feathersApp.setup;
app.teardown = async function teardown(server) {
return feathersTeardown.call(this, server).then(() => new Promise((resolve, reject) => {
if (this.server) {
this.server.close((e) => (e ? reject(e) : resolve(this)));
}
else {
resolve(this);
}
}));
};
app.configure((0, transport_commons_1.routing)());
app.use((req, _res, next) => {
req.feathers = { ...req.feathers, provider: 'rest' };
return next();
});
return app;
}
if (typeof module !== 'undefined') {
module.exports = Object.assign(feathersExpress, module.exports);
}
//# sourceMappingURL=index.js.map
;