@backstage/backend-defaults
Version:
Backend defaults used by Backstage backend apps
95 lines (89 loc) • 3.58 kB
JavaScript
;
var backendPluginApi = require('@backstage/backend-plugin-api');
var express = require('express');
var config = require('./http/config.cjs.js');
var createHttpServer = require('./http/createHttpServer.cjs.js');
var MiddlewareFactory = require('./http/MiddlewareFactory.cjs.js');
require('minimatch');
require('helmet');
require('lodash/kebabCase');
var DefaultRootHttpRouter = require('./DefaultRootHttpRouter.cjs.js');
var createHealthRouter = require('./createHealthRouter.cjs.js');
var types = require('@backstage/types');
var config$1 = require('@backstage/config');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
function defaultConfigure({ applyDefaults }) {
applyDefaults();
}
const rootHttpRouterServiceFactoryWithOptions = (options) => backendPluginApi.createServiceFactory({
service: backendPluginApi.coreServices.rootHttpRouter,
deps: {
config: backendPluginApi.coreServices.rootConfig,
rootLogger: backendPluginApi.coreServices.rootLogger,
lifecycle: backendPluginApi.coreServices.rootLifecycle,
health: backendPluginApi.coreServices.rootHealth
},
async factory({ config: config$2, rootLogger, lifecycle, health }) {
const { indexPath, configure = defaultConfigure } = options ?? {};
const logger = rootLogger.child({ service: "rootHttpRouter" });
const app = express__default.default();
const trustProxy = config$2.getOptional("backend.trustProxy");
const router = DefaultRootHttpRouter.DefaultRootHttpRouter.create({ indexPath });
const middleware = MiddlewareFactory.MiddlewareFactory.create({ config: config$2, logger });
const routes = router.handler();
const healthRouter = createHealthRouter.createHealthRouter({ config: config$2, health });
const server = await createHttpServer.createHttpServer(
app,
config.readHttpServerOptions(config$2.getOptionalConfig("backend")),
{ logger }
);
configure({
app,
server,
routes,
middleware,
config: config$2,
logger,
lifecycle,
healthRouter,
applyDefaults() {
if (process.env.NODE_ENV === "development") {
app.set("json spaces", 2);
}
if (trustProxy !== void 0) {
app.set("trust proxy", trustProxy);
}
app.use(middleware.helmet());
app.use(middleware.cors());
app.use(middleware.compression());
app.use(middleware.logging());
app.use(middleware.rateLimit());
app.use(healthRouter);
app.use(routes);
app.use(middleware.notFound());
app.use(middleware.error());
}
});
if (config$2.has("backend.lifecycle.serverShutdownDelay")) {
const serverShutdownDelay = config$1.readDurationFromConfig(config$2, {
key: "backend.lifecycle.serverShutdownDelay"
});
lifecycle.addBeforeShutdownHook(async () => {
const timeoutMs = types.durationToMilliseconds(serverShutdownDelay);
return await new Promise((resolve) => {
setTimeout(resolve, timeoutMs);
});
});
}
lifecycle.addShutdownHook(() => server.stop());
await server.start();
return router;
}
});
const rootHttpRouterServiceFactory = Object.assign(
rootHttpRouterServiceFactoryWithOptions,
rootHttpRouterServiceFactoryWithOptions()
);
exports.rootHttpRouterServiceFactory = rootHttpRouterServiceFactory;
//# sourceMappingURL=rootHttpRouterServiceFactory.cjs.js.map