var ConfigLoader = require('./lib/config-loader'); var compile = require('./lib/compiler'); var execute = require('./lib/executor'); /** * Initialize an application from an options object or * a set of JSON and JavaScript files. * * This function takes an optional argument that is either a string * or an object. * * If the argument is a string, then it sets the application root directory * based on the string value. Then it: * * 1. Creates DataSources from the `datasources.json` file in the application * root directory. * * 2. Creates Models from the `models.json` file in the application * root directory. * * If the argument is an object, then it looks for `model`, `dataSources`, * and `appRootDir` properties of the object. * If the object has no `appRootDir` property then it sets the current working * directory as the application root directory. * Then it: * * 1. Creates DataSources from the `options.dataSources` object. * * 2. Creates Models from the `options.models` object. * * In both cases, the function loads JavaScript files in the `/models` and * `/boot` subdirectories of the application root directory with `require()`. * * **NOTE:** mixing `app.boot()` and `app.model(name, config)` in multiple * files may result in models being **undefined** due to race conditions. * To avoid this when using `app.boot()` make sure all models are passed * as part of the `models` definition. * * Throws an error if the config object is not valid or if boot fails. * * @param app LoopBack application created by `loopback()`. * @options {String|Object} options Boot options; If String, this is * the application root directory; if object, has below properties. * @property {String} appRootDir Directory to use when loading JSON and * JavaScript files (optional). * Defaults to the current directory (`process.cwd()`). * @property {Object} models Object containing `Model` definitions (optional). * @property {Object} dataSources Object containing `DataSource` * definitions (optional). * @property {String} modelsRootDir Directory to use when loading `models.json` * and `models/*.js`. Defaults to `appRootDir`. * @property {String} datasourcesRootDir Directory to use when loading * `datasources.json`. Defaults to `appRootDir`. * @property {String} env Environment type, defaults to `process.env.NODE_ENV` * or `development`. Common values are `development`, `staging` and * `production`; however the applications are free to use any names. * @end * * @header bootLoopBackApp(app, [options]) */ exports = module.exports = function bootLoopBackApp(app, options) { // backwards compatibility with loopback's app.boot options.env = options.env || app.get('env'); var instructions = compile(options); execute(app, instructions); }; exports.ConfigLoader = ConfigLoader; exports.compile = compile; exports.execute = execute;