2014-05-26 15:30:02 +00:00
|
|
|
var ConfigLoader = require('./lib/config-loader');
|
2014-06-02 16:47:46 +00:00
|
|
|
var compile = require('./lib/compiler');
|
|
|
|
var execute = require('./lib/executor');
|
2014-06-03 12:08:34 +00:00
|
|
|
var addInstructionsToBrowserify = require('./lib/bundler');
|
2014-05-23 14:39:34 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialize an application from an options object or
|
|
|
|
* a set of JSON and JavaScript files.
|
2014-06-16 13:15:36 +00:00
|
|
|
*
|
2014-06-06 17:11:46 +00:00
|
|
|
* > **NOTE**: This module is primarily intended for use with LoopBack 2.0.
|
|
|
|
* It _does_ work with LoopBack 1.x applications, but
|
|
|
|
* none of the LoopBack 1.x examples or generated code (scaffolding) use it.
|
2014-06-16 13:15:36 +00:00
|
|
|
*
|
2014-05-23 14:39:34 +00:00
|
|
|
* 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()`.
|
|
|
|
*
|
2014-06-16 13:15:36 +00:00
|
|
|
* **NOTE:** Mixing `bootLoopBackApp(app, bootConfig)` and
|
|
|
|
* `app.model(name, modelConfig)` in multiple
|
2014-06-06 17:11:46 +00:00
|
|
|
* files may result in models being undefined due to race conditions.
|
|
|
|
* To avoid this when using `bootLoopBackApp()` make sure all models are passed
|
2014-05-23 14:39:34 +00:00
|
|
|
* 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).
|
2014-05-27 12:46:20 +00:00
|
|
|
* @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`.
|
2014-06-02 16:47:46 +00:00
|
|
|
* @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.
|
2014-05-23 14:39:34 +00:00
|
|
|
* @end
|
|
|
|
*
|
2014-06-02 08:40:13 +00:00
|
|
|
* @header bootLoopBackApp(app, [options])
|
2014-05-23 14:39:34 +00:00
|
|
|
*/
|
|
|
|
|
2014-05-26 15:30:02 +00:00
|
|
|
exports = module.exports = function bootLoopBackApp(app, options) {
|
2014-06-02 16:47:46 +00:00
|
|
|
// backwards compatibility with loopback's app.boot
|
|
|
|
options.env = options.env || app.get('env');
|
2014-05-23 14:39:34 +00:00
|
|
|
|
2014-06-02 16:47:46 +00:00
|
|
|
var instructions = compile(options);
|
|
|
|
execute(app, instructions);
|
2014-05-23 14:39:34 +00:00
|
|
|
};
|
|
|
|
|
2014-06-03 12:08:34 +00:00
|
|
|
/**
|
|
|
|
* Compile boot instructions and add them to a browserify bundler.
|
|
|
|
* @param {Object|String} options as described in `bootLoopBackApp` above.
|
|
|
|
* @param {Object} bundler A browserify bundler created by `browserify()`.
|
|
|
|
*
|
|
|
|
* @header boot.compileToBrowserify(options, bundler)
|
|
|
|
*/
|
|
|
|
exports.compileToBrowserify = function(options, bundler) {
|
|
|
|
addInstructionsToBrowserify(compile(options), bundler);
|
|
|
|
};
|
|
|
|
|
|
|
|
//-- undocumented low-level API --//
|
|
|
|
|
2014-05-26 15:30:02 +00:00
|
|
|
exports.ConfigLoader = ConfigLoader;
|
2014-06-02 16:47:46 +00:00
|
|
|
exports.compile = compile;
|
|
|
|
exports.execute = execute;
|
2014-06-03 12:08:34 +00:00
|
|
|
exports.addInstructionsToBrowserify = addInstructionsToBrowserify;
|