From d5f5e83fe75aab48d4533a5e640c0d2f79ea79e9 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 16 Jun 2020 15:03:21 +0200 Subject: [PATCH] chore(scaffolder): Updating the boilerplate for the scaffolder backend --- .../src/service/standaloneApplication.ts | 55 ------------------- .../src/service/standaloneServer.ts | 27 ++++----- plugins/scaffolder-backend/tsconfig.json | 19 ++++--- 3 files changed, 24 insertions(+), 77 deletions(-) delete mode 100644 plugins/scaffolder-backend/src/service/standaloneApplication.ts diff --git a/plugins/scaffolder-backend/src/service/standaloneApplication.ts b/plugins/scaffolder-backend/src/service/standaloneApplication.ts deleted file mode 100644 index 3ff1de01eb..0000000000 --- a/plugins/scaffolder-backend/src/service/standaloneApplication.ts +++ /dev/null @@ -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 { - 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; -} diff --git a/plugins/scaffolder-backend/src/service/standaloneServer.ts b/plugins/scaffolder-backend/src/service/standaloneServer.ts index b89e806f72..7f553bf4bf 100644 --- a/plugins/scaffolder-backend/src/service/standaloneServer.ts +++ b/plugins/scaffolder-backend/src/service/standaloneServer.ts @@ -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 { 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(); diff --git a/plugins/scaffolder-backend/tsconfig.json b/plugins/scaffolder-backend/tsconfig.json index 7d4ea182e2..9ca38dca27 100644 --- a/plugins/scaffolder-backend/tsconfig.json +++ b/plugins/scaffolder-backend/tsconfig.json @@ -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"] } }