Merge pull request #1317 from spotify/mob/update-scaffolder-to-latest-boilerplate

Updating Scaffolder Boilerplate
This commit is contained in:
Ben Lambert
2020-06-16 16:42:39 +02:00
committed by GitHub
3 changed files with 24 additions and 77 deletions
@@ -1,55 +0,0 @@
/*
* Copyright 2020 Spotify AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
errorHandler,
notFoundHandler,
requestLoggingHandler,
} from '@backstage/backend-common';
import compression from 'compression';
import cors from 'cors';
import express from 'express';
import helmet from 'helmet';
import { Logger } from 'winston';
import { StorageBase, TemplaterBase } from '../scaffolder';
import { createRouter } from './router';
export interface ApplicationOptions {
enableCors: boolean;
storage: StorageBase;
templater: TemplaterBase;
logger: Logger;
}
export async function createStandaloneApplication(
options: ApplicationOptions,
): Promise<express.Application> {
const { enableCors, storage, templater, logger } = options;
const app = express();
app.use(helmet());
if (enableCors) {
app.use(cors());
}
app.use(compression());
app.use(express.json());
app.use(requestLoggingHandler());
app.use('/', await createRouter({ templater, storage, logger }));
app.use(notFoundHandler());
app.use(errorHandler());
return app;
}
@@ -22,8 +22,8 @@ import {
DiskStorage,
CookieCutter,
} from '../scaffolder';
import { createStandaloneApplication } from './standaloneApplication';
import { createServiceBuilder, useHotMemoize } from '@backstage/backend-common';
import { createRouter } from './router';
export interface ServerOptions {
port: number;
enableCors: boolean;
@@ -34,27 +34,24 @@ export async function startStandaloneServer(
options: ServerOptions,
): Promise<Server> {
const logger = options.logger.child({ service: 'scaffolder-backend' });
const store = new DiskStorage({ logger });
const store = useHotMemoize(module, () => new DiskStorage({ logger }));
const templater = new CookieCutter();
logger.debug('Creating application...');
const app = await createStandaloneApplication({
enableCors: options.enableCors,
const router = await createRouter({
storage: createStorage({ store, logger }),
templater: createTemplater({ templater }),
logger,
});
logger.debug('Starting application server...');
return await new Promise((resolve, reject) => {
const server = app.listen(options.port, (err?: Error) => {
if (err) {
reject(err);
return;
}
const service = createServiceBuilder(module)
.enableCors({ origin: 'http://localhost:3000' })
.addRouter('/catalog', router);
logger.info(`Listening on port ${options.port}`);
resolve(server);
});
return await service.start().catch(err => {
logger.error(err);
process.exit(1);
});
}
module.hot?.accept();
+12 -7
View File
@@ -1,11 +1,16 @@
{
"extends": "../../packages/backend/tsconfig.json",
"include": [
"./src"
],
"include": ["src"],
"compilerOptions": {
"baseUrl": "./src",
"outDir": "./dist",
"skipLibCheck": true
"outDir": "dist",
"incremental": true,
"sourceMap": true,
"declaration": true,
"strict": true,
"target": "es2019",
"module": "commonjs",
"esModuleInterop": true,
"allowJs": true,
"lib": ["es2019"],
"types": ["node", "jest", "webpack-env"]
}
}