UNPKG

2.69 kBJavaScriptView Raw
1'use strict';
2/**
3 * Module dependencies.
4 */
5const fs = require('fs');
6const path = require('path');
7const Package = require('../package');
8
9/**
10 * Expose `createApplication()`.
11 * @module
12 */
13const Pomelo = {
14 // Framework version
15 version:Package.version,
16 // Event definitions that would be emitted by app.event
17 events:require('./util/events'),
18 // auto loaded components
19 components:{},
20 // auto loaded filters
21 filters:{},
22 // auto loaded rpc filters
23 rpcFilters:{},
24
25};
26
27/**
28 * connectors
29 */
30Pomelo.connectors = Object.defineProperties({}, {
31 'sioconnector':{get:load.bind(null, './connectors/sioconnector')},
32 'hybridconnector':{get:load.bind(null, './connectors/hybridconnector')},
33 'udpconnector':{get:load.bind(null, './connectors/udpconnector')},
34 'mqttconnector':{get:load.bind(null, './connectors/mqttconnector')},
35});
36
37/**
38 * pushSchedulers
39 */
40Pomelo.pushSchedulers = Object.defineProperties({},{
41 'direct':{get:load.bind(null, './pushSchedulers/direct')},
42 'buffer':{get:load.bind(null, './pushSchedulers/buffer')},
43});
44
45/**
46 * Create an pomelo application.
47 *
48 * @return {Application}
49 * @memberOf Pomelo
50 * @api public
51 */
52Pomelo.createApp = (opts) =>
53{
54 const app = require('./application');
55 app.init(opts);
56 this.app = app;
57 return app;
58};
59
60/**
61 * Get application
62 */
63Object.defineProperty(Pomelo, 'app', {
64 get : () =>{
65 return this.app;
66 }
67});
68
69/**
70 * Auto-load bundled components with getters.
71 */
72fs.readdirSync(`${__dirname}/components`).forEach(function(filename)
73{
74 if (!/\.js$/.test(filename))
75 {
76 return;
77 }
78 const name = path.basename(filename, '.js');
79 const _load = load.bind(null, './components/', name);
80 Object.defineProperty(Pomelo.components, name, {get:_load});
81 Object.defineProperty(Pomelo, name, {get:_load});
82});
83
84fs.readdirSync(`${__dirname}/filters/handler`).forEach(function(filename)
85{
86 if (!/\.js$/.test(filename))
87 {
88 return;
89 }
90 const name = path.basename(filename, '.js');
91 const _load = load.bind(null, './filters/handler/', name);
92 Object.defineProperty(Pomelo.filters, name, {get:_load});
93 Object.defineProperty(Pomelo, name, {get:_load});
94});
95
96fs.readdirSync(`${__dirname}/filters/rpc`).forEach(function(filename)
97{
98 if (!/\.js$/.test(filename))
99 {
100 return;
101 }
102 const name = path.basename(filename, '.js');
103 const _load = load.bind(null, './filters/rpc/', name);
104 Object.defineProperty(Pomelo.rpcFilters, name, {get:_load});
105});
106
107function load(path, name)
108{
109 if (name)
110 {
111 return require(path + name);
112 }
113 return require(path);
114}
115
116module.exports = Pomelo;