UNPKG

4.11 kBJavaScriptView Raw
1var BuildInfoGenerator, ConfigJSONGenerator, CustomConfigs, LoopbackBootGenerator, LoopbackInfo, LoopbackServer, Main, ModelsGenerator;
2
3LoopbackInfo = require('./lib/loopback-info');
4
5LoopbackServer = require('./lib/loopback-server');
6
7ConfigJSONGenerator = require('./lib/config-json-generator');
8
9ModelsGenerator = require('./lib/models-generator');
10
11BuildInfoGenerator = require('./lib/build-info-generator');
12
13CustomConfigs = require('./lib/custom-configs');
14
15LoopbackBootGenerator = require('./lib/loopback-boot-generator');
16
17
18/**
19entry point
20
21@class Main
22 */
23
24Main = (function() {
25
26 /**
27 entry point.
28 run loopback with model definitions, config
29
30 @method run
31 @public
32 @static
33 @param {Object} loopbackDefinitions
34 @param {Object|String} [config] config object or config directory containing config info
35 @param {Boolean} [options.reset] reset previously-generated settings before generation
36 @param {String} [options.env] set environment (production|development|...)
37 @param {Object} [options.admin] options for admin token manager
38 @param {Function|Array(String)} [options.admin.fetch] function to return admin tokens (or promise of it). When string[] is given, these value are used for the admin access token.
39 @param {String} [options.admin.email=loopback-with-admin@example.com] email address for admin user
40 @param {String} [options.admin.id=loopback-with-admin-user-id] id of admin user
41 @param {String} [options.admin.password=admin-user-password] password of admin user
42 @param {Number} [options.admin.intervalHours] IntervalHours to fetch new admin token.
43 return {Promise(LoopbackInfo)}
44 */
45 Main.run = function(loopbackDefinitions, config, options) {
46 var adminOptions, generated, main;
47 if (options == null) {
48 options = {};
49 }
50 main = new this(loopbackDefinitions, config, options.env);
51 if (options.reset !== false) {
52 main.reset();
53 }
54 generated = main.generate();
55 if (options.adminToken) {
56 console.error('LoopbackWithAdmin.run(): options.adminToken is deprecated. Use options.admin instead.');
57 }
58 adminOptions = options.admin || options.adminToken;
59 return this.launchLoopback(adminOptions).then((function(_this) {
60 return function(server) {
61 return new LoopbackInfo(server, generated);
62 };
63 })(this));
64 };
65
66
67 /**
68 @constructor
69 @private
70 */
71
72 function Main(loopbackDefinitions, configs, env) {
73 var configObj, customConfigs, customRoles, modelDefinitions;
74 this.env = env;
75 if (loopbackDefinitions.models != null) {
76 modelDefinitions = loopbackDefinitions.models;
77 customRoles = loopbackDefinitions.customRoles;
78 } else {
79 modelDefinitions = loopbackDefinitions;
80 customRoles = null;
81 }
82 if (this.env == null) {
83 this.env = process.env.NODE_ENV || 'development';
84 }
85 customConfigs = new CustomConfigs(configs, this.env);
86 configObj = customConfigs.toObject();
87 this.configJSONGenerator = new ConfigJSONGenerator(configObj, this.env);
88 this.modelsGenerator = new ModelsGenerator(modelDefinitions);
89 this.bootGenerator = new LoopbackBootGenerator({
90 customRoles: customRoles
91 });
92 this.buildInfoGenerator = new BuildInfoGenerator(modelDefinitions, configObj, this.env);
93 }
94
95
96 /**
97 @private
98 */
99
100 Main.prototype.generate = function() {
101 return {
102 config: this.configJSONGenerator.generate(),
103 models: this.modelsGenerator.generate(),
104 buildInfo: this.buildInfoGenerator.generate(),
105 bootInfo: this.bootGenerator.generate()
106 };
107 };
108
109
110 /**
111 @private
112 */
113
114 Main.prototype.reset = function() {
115 this.configJSONGenerator.reset();
116 this.modelsGenerator.reset();
117 this.buildInfoGenerator.reset();
118 return this.bootGenerator.reset();
119 };
120
121
122 /**
123 run loopback
124
125 @private
126 */
127
128 Main.launchLoopback = function(adminOptions) {
129 var server;
130 server = new LoopbackServer();
131 return server.launch(adminOptions).then((function(_this) {
132 return function() {
133 return server;
134 };
135 })(this));
136 };
137
138 return Main;
139
140})();
141
142module.exports = Main;