/*
 * Load the units file.
 * -------------------------------------------------------------
 * This file contains an ordered object of unit files. Flitter will load these
 * one at a time to launch the application. Each unit in the sequence is passed
 * the function for the next unit in the sequence. This forms the function stack
 * by chaining the units together, ending with the Flitter App unit.
 */
const units = require('./Units.flitter')

/*
 * Create the app.
 * -------------------------------------------------------------
 * The FlitterApp object contains the wrapper for the Express app, as well as
 * the initialization function that chains together the individual units. This
 * is why we pass it the units.
 */
const { FlitterApp, RunLevelErrorHandler } = require('libflitter')
const flitter = new FlitterApp(units)
const rleh = new RunLevelErrorHandler()

/*
 * Launch the server.
 * -------------------------------------------------------------
 * This calls the first unit in the unit chain. This chain ends with the Flitter
 * server component which launches the Node HTTP server.
 */
flitter.run().catch(rleh.handle)
