@shrub/express 0.5.62 → 0.5.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,13 @@
1
1
  import { ModuleLoader } from "@shrub/core";
2
+ import { IHttpServer } from "@shrub/http";
3
+ import { createHttpTerminator } from "http-terminator";
2
4
  import { IExpressApplication } from "./app";
3
5
  import { ExpressModule } from "./module";
4
- /** A factory class for registering modules within an Express application context. */
6
+ /**
7
+ * A factory class for registering and managing modules within an Express application context. The factory
8
+ * will provide an Express app instance, automatically close open connections, and dispose the modules when
9
+ * the server has been terminated.
10
+ */
5
11
  export class ExpressFactory {
6
12
  constructor() {
7
13
  this.modules = [ExpressModule];
@@ -27,7 +33,20 @@ export class ExpressFactory {
27
33
  .configureServices(this.configureCallback)
28
34
  .useModules(this.modules);
29
35
  this.settings.forEach(cur => loader.useSettings(cur));
30
- return loader.load().then(modules => modules.services.get(IExpressApplication));
36
+ return loader.load().then(modules => {
37
+ // grab the http server instance used by the app
38
+ const server = modules.services.get(IHttpServer);
39
+ // the http terminator will monitor connections so they can be closed when terminating the process
40
+ const httpTerminator = createHttpTerminator({ server });
41
+ // terminate all open connections and dispose the module collection
42
+ process.once("SIGTERM", () => httpTerminator.terminate().then(() => modules.dispose()
43
+ .then(() => process.exit(0))
44
+ .catch(error => {
45
+ console.log("Failed to close gracefully.", error);
46
+ process.exit(1);
47
+ })));
48
+ return modules.services.get(IExpressApplication);
49
+ });
31
50
  }
32
51
  configureServices(callback) {
33
52
  const base = this.configureCallback;
@@ -46,4 +65,4 @@ export class ExpressFactory {
46
65
  return this;
47
66
  }
48
67
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0YsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpDLHFGQUFxRjtBQUNyRixNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUNxQixZQUFPLEdBQWtDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekQsYUFBUSxHQUFnQyxFQUFFLENBQUM7UUFDcEQsc0JBQWlCLEdBQWlELEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQWlEdkYsQ0FBQztJQTlDRyxzQ0FBc0M7SUFDdEMsTUFBTSxDQUFDLE1BQU07UUFDVCxPQUFPLElBQUksY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFzRDtRQUMzRSxPQUFPLElBQUksY0FBYyxFQUFFLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBc0M7UUFDcEQsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFtQztRQUNsRCxPQUFPLElBQUksY0FBYyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCw2SEFBNkg7SUFDN0gsTUFBTTtRQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFO2FBQzVCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzthQUN6QyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBc0Q7UUFDcEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsRUFBRTtZQUNwQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBc0M7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQW1DO1FBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiJ9
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0YsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBQ3FCLFlBQU8sR0FBa0MsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxhQUFRLEdBQWdDLEVBQUUsQ0FBQztRQUNwRCxzQkFBaUIsR0FBaUQsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBZ0V2RixDQUFDO0lBN0RHLHNDQUFzQztJQUN0QyxNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFFBQXNEO1FBQzNFLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFzQztRQUNwRCxPQUFPLElBQUksY0FBYyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQW1DO1FBQ2xELE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELDZIQUE2SDtJQUM3SCxNQUFNO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUU7YUFDNUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLGdEQUFnRDtZQUNoRCxNQUFNLE1BQU0sR0FBUSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RCxrR0FBa0c7WUFDbEcsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRXhELG1FQUFtRTtZQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7aUJBQ2hGLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQixLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFVCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBc0Q7UUFDcEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsRUFBRTtZQUNwQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBc0M7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQW1DO1FBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiJ9
package/dist/factory.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  import { IModuleSettingsCollection, IServiceRegistration, ModuleInstanceOrConstructor } from "@shrub/core";
2
2
  import { IExpressApplication } from "./app";
3
- /** A factory class for registering modules within an Express application context. */
3
+ /**
4
+ * A factory class for registering and managing modules within an Express application context. The factory
5
+ * will provide an Express app instance, automatically close open connections, and dispose the modules when
6
+ * the server has been terminated.
7
+ */
4
8
  export declare class ExpressFactory {
5
9
  private readonly modules;
6
10
  private readonly settings;
package/dist/factory.js CHANGED
@@ -2,9 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExpressFactory = void 0;
4
4
  const core_1 = require("@shrub/core");
5
+ const http_1 = require("@shrub/http");
6
+ const http_terminator_1 = require("http-terminator");
5
7
  const app_1 = require("./app");
6
8
  const module_1 = require("./module");
7
- /** A factory class for registering modules within an Express application context. */
9
+ /**
10
+ * A factory class for registering and managing modules within an Express application context. The factory
11
+ * will provide an Express app instance, automatically close open connections, and dispose the modules when
12
+ * the server has been terminated.
13
+ */
8
14
  class ExpressFactory {
9
15
  constructor() {
10
16
  this.modules = [module_1.ExpressModule];
@@ -30,7 +36,20 @@ class ExpressFactory {
30
36
  .configureServices(this.configureCallback)
31
37
  .useModules(this.modules);
32
38
  this.settings.forEach(cur => loader.useSettings(cur));
33
- return loader.load().then(modules => modules.services.get(app_1.IExpressApplication));
39
+ return loader.load().then(modules => {
40
+ // grab the http server instance used by the app
41
+ const server = modules.services.get(http_1.IHttpServer);
42
+ // the http terminator will monitor connections so they can be closed when terminating the process
43
+ const httpTerminator = http_terminator_1.createHttpTerminator({ server });
44
+ // terminate all open connections and dispose the module collection
45
+ process.once("SIGTERM", () => httpTerminator.terminate().then(() => modules.dispose()
46
+ .then(() => process.exit(0))
47
+ .catch(error => {
48
+ console.log("Failed to close gracefully.", error);
49
+ process.exit(1);
50
+ })));
51
+ return modules.services.get(app_1.IExpressApplication);
52
+ });
34
53
  }
35
54
  configureServices(callback) {
36
55
  const base = this.configureCallback;
@@ -50,4 +69,4 @@ class ExpressFactory {
50
69
  }
51
70
  }
52
71
  exports.ExpressFactory = ExpressFactory;
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNDQUF5SDtBQUN6SCwrQkFBNEM7QUFDNUMscUNBQXlDO0FBRXpDLHFGQUFxRjtBQUNyRixNQUFhLGNBQWM7SUFBM0I7UUFDcUIsWUFBTyxHQUFrQyxDQUFDLHNCQUFhLENBQUMsQ0FBQztRQUN6RCxhQUFRLEdBQWdDLEVBQUUsQ0FBQztRQUNwRCxzQkFBaUIsR0FBaUQsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBaUR2RixDQUFDO0lBOUNHLHNDQUFzQztJQUN0QyxNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFFBQXNEO1FBQzNFLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFzQztRQUNwRCxPQUFPLElBQUksY0FBYyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQW1DO1FBQ2xELE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELDZIQUE2SDtJQUM3SCxNQUFNO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQkFBWSxFQUFFO2FBQzVCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzthQUN6QyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHlCQUFtQixDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBc0Q7UUFDcEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsRUFBRTtZQUNwQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBc0M7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQW1DO1FBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSjtBQXBERCx3Q0FvREMifQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNDQUF5SDtBQUN6SCxzQ0FBMEM7QUFDMUMscURBQXVEO0FBQ3ZELCtCQUE0QztBQUM1QyxxQ0FBeUM7QUFFekM7Ozs7R0FJRztBQUNILE1BQWEsY0FBYztJQUEzQjtRQUNxQixZQUFPLEdBQWtDLENBQUMsc0JBQWEsQ0FBQyxDQUFDO1FBQ3pELGFBQVEsR0FBZ0MsRUFBRSxDQUFDO1FBQ3BELHNCQUFpQixHQUFpRCxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFnRXZGLENBQUM7SUE3REcsc0NBQXNDO0lBQ3RDLE1BQU0sQ0FBQyxNQUFNO1FBQ1QsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBc0Q7UUFDM0UsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQXNDO1FBQ3BELE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBbUM7UUFDbEQsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsNkhBQTZIO0lBQzdILE1BQU07UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFZLEVBQUU7YUFDNUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLGdEQUFnRDtZQUNoRCxNQUFNLE1BQU0sR0FBUSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBVyxDQUFDLENBQUM7WUFDdEQsa0dBQWtHO1lBQ2xHLE1BQU0sY0FBYyxHQUFHLHNDQUFvQixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUV4RCxtRUFBbUU7WUFDbkUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO2lCQUNoRixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRVQsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyx5QkFBbUIsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQXNEO1FBQ3BFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQXNDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFtQztRQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFuRUQsd0NBbUVDIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shrub/express",
3
3
  "description": "A module that adds support for Express based apps.",
4
- "version": "0.5.62",
4
+ "version": "0.5.63",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -25,12 +25,13 @@
25
25
  "test": "jest"
26
26
  },
27
27
  "dependencies": {
28
- "@shrub/core": "0.5.62",
29
- "@shrub/http": "0.5.62",
30
- "express": "^4.17.1"
28
+ "@shrub/core": "0.5.63",
29
+ "@shrub/http": "0.5.63",
30
+ "express": "^4.17.1",
31
+ "http-terminator": "^3.2.0"
31
32
  },
32
33
  "devDependencies": {
33
34
  "@types/express": "4.17.9"
34
35
  },
35
- "gitHead": "6f71a2e83f1609ac912e5bcda23cfe2ad41cb90e"
36
+ "gitHead": "5707c44f7cba7e1db6a1df20af24ad8d781f1d97"
36
37
  }