22'use strict' ;
33
44const argv = require ( 'yargs' ) . argv ;
5+ const path = require ( 'path' ) ;
56
6- // hoist bootstrap function and export
7- bootstrap ( argv ) ;
7+ // hoist start function and export
8+ start ( argv ) ;
89
910/**
1011 * The main function that signals the start of the application
@@ -13,7 +14,7 @@ bootstrap(argv);
1314 * @param {Object } [args] CLI arguments
1415 * @returns {undefined }
1516 */
16- async function bootstrap ( args ) {
17+ async function start ( args ) {
1718
1819 // Extract the settings
1920 const { overridesFile } = args || { } ;
@@ -22,42 +23,54 @@ async function bootstrap(args) {
2223 ? require ( overridesFile )
2324 : { } ;
2425
25- const mvp = require ( '.. ' ) ;
26+ const boot = require ( '@eq8/mvp-boot ' ) ;
2627
27- // Call MVP with a set of options from the CLI which initializes the core components of MVP:
28- // - Logger
29- // - API
30- // - HTTP server
31- const { options, logger, store, server } = await mvp ( { overrides } ) ;
32- const defaults = {
33- port : 8000 ,
34- retryInterval : 1000
35- } ;
36- const { port, storeUri, retryInterval } = options . init ( args , defaults ) ;
28+ const extensions = path . join ( __dirname , '../lib/ext' ) ;
29+ const define = boot ( { overrides, extensions } ) ;
3730
38- logger . info ( 'initialized' , { overrides } ) ;
31+ define ( [
32+ '-/options/index.js' ,
33+ '-/logger/index.js' ,
34+ '-/store/index.js' ,
35+ '-/server/index.js' ,
36+ '-/ext/controller/index.js'
37+ ] , ( options , logger , store , server , controller ) => {
38+ const defaults = {
39+ port : 8000 ,
40+ retryInterval : 1000
41+ } ;
42+ const { port, storeUri, retryInterval } = options . init ( args , defaults ) ;
3943
40- try {
41- const { success } = await server . listen ( { port } ) || { } ;
44+ logger . info ( 'initialized' , { overrides } ) ;
4245
43- logger . info ( 'server is listening' , { port, success } ) ;
44- } catch ( err ) {
45- logger . error ( 'server unable to listen' , { port, err } ) ;
46- process . exitCode = 1 ;
47- }
46+ listen ( ) . then ( connect , err => {
47+ throw new Error ( err ) ;
48+ } ) ;
4849
49- connect ( ) ;
50+ async function listen ( ) {
51+ try {
52+ server . use ( controller . middleware ( ) ) ;
5053
51- async function connect ( callback ) {
52- try {
53- const { success } = await store . connect ( { storeUri } ) || { } ;
54+ const { success } = await server . listen ( { port } ) || { } ;
5455
55- logger . info ( 'store has connected' , { storeUri, success } ) ;
56+ logger . info ( 'server is listening' , { port, success } ) ;
57+ } catch ( err ) {
58+ logger . error ( 'server unable to listen' , { port, err } ) ;
59+ process . exitCode = 1 ;
60+ }
61+ }
62+
63+ async function connect ( ) {
64+ try {
65+ const { success } = await store . connect ( { storeUri } ) || { } ;
66+
67+ logger . info ( 'store has connected' , { storeUri, success } ) ;
5668
57- server . setState ( 'ready' ) ; // TODO: replace with connected, ready if db was created
58- } catch ( err ) {
59- logger . error ( 'store unable to connect' , { storeUri, err } ) ;
60- setTimeout ( connect , retryInterval , callback ) ;
69+ server . setState ( 'ready' ) ; // TODO: replace with connected, ready if db was created
70+ } catch ( err ) {
71+ logger . error ( 'store unable to connect' , { storeUri, err } ) ;
72+ setTimeout ( connect , retryInterval ) ;
73+ }
6174 }
62- }
75+ } ) ;
6376}
0 commit comments