Browse Source

feat(server): Add teardown logic to AdminUiPlugin & DefaultAssetServer

Michael Bromley 6 years ago
parent
commit
f68d7225ee

+ 1 - 1
server/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@vendure/core",
-  "version": "0.1.0-alpha.10",
+  "version": "0.1.0-alpha.11",
   "description": "A modern, headless ecommerce framework",
   "repository": {
     "type": "git",

+ 7 - 1
server/src/plugin/admin-ui-plugin/admin-ui-plugin.ts

@@ -1,5 +1,6 @@
 import express from 'express';
 import fs from 'fs-extra';
+import { Server } from 'http';
 import path from 'path';
 
 import { AdminUiConfig } from '../../../../shared/shared-types';
@@ -54,6 +55,7 @@ export interface AdminUiOptions {
  * @docsCategory plugin
  */
 export class AdminUiPlugin implements VendurePlugin {
+    private server: Server;
     constructor(private options: AdminUiOptions) {}
 
     async configure(config: Required<VendureConfig>): Promise<Required<VendureConfig>> {
@@ -75,7 +77,11 @@ export class AdminUiPlugin implements VendurePlugin {
         assetServer.use((req, res) => {
             res.sendFile(path.join(adminUiPath, 'index.html'));
         });
-        assetServer.listen(this.options.port);
+        this.server = assetServer.listen(this.options.port);
+    }
+
+    onClose(): Promise<void> {
+        return new Promise(resolve => this.server.close(resolve));
     }
 
     /**

+ 7 - 1
server/src/plugin/default-asset-server-plugin/default-asset-server-plugin.ts

@@ -1,4 +1,5 @@
 import express, { NextFunction, Request, Response } from 'express';
+import { Server } from 'http';
 import path from 'path';
 
 import { AssetStorageStrategy } from '../../config/asset-storage-strategy/asset-storage-strategy';
@@ -98,6 +99,7 @@ export interface DefaultAssetServerOptions {
  * results for subsequent calls.
  */
 export class DefaultAssetServerPlugin implements VendurePlugin {
+    private server: Server;
     private assetStorage: AssetStorageStrategy;
     private readonly cacheDir = 'cache';
     private readonly presets: ImageTransformPreset[] = [
@@ -139,13 +141,17 @@ export class DefaultAssetServerPlugin implements VendurePlugin {
         this.createAssetServer();
     }
 
+    onClose(): Promise<void> {
+        return new Promise(resolve => this.server.close(resolve));
+    }
+
     /**
      * Creates the image server instance
      */
     private createAssetServer() {
         const assetServer = express();
         assetServer.use(this.serveStaticFile(), this.generateTransformedImage());
-        assetServer.listen(this.options.port);
+        this.server = assetServer.listen(this.options.port);
     }
 
     /**