ee-core 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -2
  3. package/addon/window/index.js +91 -91
  4. package/bin/tools.js +17 -17
  5. package/config/config.default.js +280 -276
  6. package/core/index.js +12 -12
  7. package/core/lib/ee.js +218 -218
  8. package/core/lib/loader/context_loader.js +106 -106
  9. package/core/lib/loader/ee_loader.js +457 -457
  10. package/core/lib/loader/file_loader.js +325 -325
  11. package/core/lib/loader/mixin/addon.js +32 -32
  12. package/core/lib/loader/mixin/config.js +135 -135
  13. package/core/lib/loader/mixin/controller.js +124 -124
  14. package/core/lib/loader/mixin/service.js +28 -28
  15. package/core/lib/utils/base_context_class.js +34 -34
  16. package/core/lib/utils/index.js +127 -127
  17. package/core/lib/utils/sequencify.js +59 -59
  18. package/core/lib/utils/timing.js +77 -77
  19. package/index.js +49 -49
  20. package/lib/appLoader.js +53 -53
  21. package/lib/application.js +84 -84
  22. package/lib/baseApp.js +131 -131
  23. package/lib/constant.js +9 -9
  24. package/lib/eeApp.js +359 -335
  25. package/lib/httpclient.js +136 -136
  26. package/lib/logger.js +46 -46
  27. package/lib/socket/httpServer.js +142 -142
  28. package/lib/socket/io.js +23 -23
  29. package/lib/socket/ipcServer.js +108 -108
  30. package/lib/socket/socketClient.js +50 -50
  31. package/lib/socket/socketServer.js +76 -76
  32. package/lib/socket/start.js +22 -22
  33. package/lib/storage/index.js +33 -33
  34. package/lib/storage/lowdbStorage.js +98 -98
  35. package/lib/storage/sqliteStorage.js +127 -127
  36. package/package.json +45 -45
  37. package/tools/encrypt.js +274 -274
  38. package/tools/replaceDist.js +61 -61
  39. package/utils/common.js +90 -90
  40. package/utils/index.js +246 -246
  41. package/utils/wrap.js +37 -37
package/lib/socket/io.js CHANGED
@@ -1,24 +1,24 @@
1
- 'use strict';
2
-
3
- const IoServer = require('socket.io');
4
- const IoClient = require('socket.io-client');
5
- //const socketServer = require('./socketServer');
6
- const socketClient = require('./socketClient');
7
- const Koa = require('koa');
8
-
9
- const EeSocket = {
10
- getServer: () => {
11
- //return socketServer.getInstance();
12
- },
13
- getClient: () => {
14
- return socketClient.getInstance();
15
- }
16
- }
17
-
18
-
19
- module.exports = {
20
- IoServer,
21
- IoClient,
22
- EeSocket,
23
- Koa
1
+ 'use strict';
2
+
3
+ const IoServer = require('socket.io');
4
+ const IoClient = require('socket.io-client');
5
+ //const socketServer = require('./socketServer');
6
+ const socketClient = require('./socketClient');
7
+ const Koa = require('koa');
8
+
9
+ const EeSocket = {
10
+ getServer: () => {
11
+ //return socketServer.getInstance();
12
+ },
13
+ getClient: () => {
14
+ return socketClient.getInstance();
15
+ }
16
+ }
17
+
18
+
19
+ module.exports = {
20
+ IoServer,
21
+ IoClient,
22
+ EeSocket,
23
+ Koa
24
24
  };
@@ -1,109 +1,109 @@
1
- 'use strict';
2
-
3
- const debug = require('debug')('ee-core:ipcServer');
4
- const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
5
- const is = require('is-type-of');
6
- const { ipcMain } = require('electron');
7
- const path = require('path');
8
- const fs = require('fs');
9
- const globby = require('globby');
10
- const utils = require('../../core/lib/utils');
11
- const wrap = require('../../utils/wrap');
12
-
13
- class IpcServer {
14
- constructor (app) {
15
-
16
- this.app = app;
17
- this.consoleLogger = new EggConsoleLogger();
18
- this.consoleLogger.info('[ee-core:socket:ipcMain] start ipcMain');
19
- this.register();
20
- }
21
-
22
- register () {
23
- this.consoleLogger.info('[ee-core:socket:ipcMain] register channels');
24
-
25
- const self = this;
26
- // 遍历方法
27
- const files = utils.filePatterns();
28
- const directory = path.join(this.app.config.baseDir, 'controller');
29
- const filepaths = globby.sync(files, { cwd: directory });
30
-
31
- for (const filepath of filepaths) {
32
- const fullpath = path.join(directory, filepath);
33
- if (!fs.statSync(fullpath).isFile()) continue;
34
-
35
- const properties = wrap.getProperties(filepath, {caseStyle: 'lower'});
36
- const pathName = directory.split(/[/\\]/).slice(-1) + '.' + properties.join('.');
37
-
38
- let fileObj = utils.loadFile(fullpath);
39
- const fns = {};
40
- // 为了统一,仅支持class文件
41
- if (is.class(fileObj) || utils.isBytecodeClass(fileObj)) {
42
- let proto = fileObj.prototype;
43
- // 不遍历父类的方法
44
- //while (proto !== Object.prototype) {
45
- const keys = Object.getOwnPropertyNames(proto);
46
- for (const key of keys) {
47
- if (key === 'constructor') {
48
- continue;
49
- }
50
- const d = Object.getOwnPropertyDescriptor(proto, key);
51
- if (is.function(d.value) && !fns.hasOwnProperty(key)) {
52
- fns[key] = 1;
53
- }
54
- }
55
- //proto = Object.getPrototypeOf(proto);
56
- //}
57
- }
58
-
59
- debug('register class %s fns %j', pathName, fns);
60
-
61
- for (const key in fns) {
62
- let channel = pathName + '.' + key;
63
- debug('register channel %s', channel);
64
-
65
- function findFn (app, c) {
66
- try {
67
- // 找函数
68
- const cmd = c;
69
- let fn = null;
70
- if (is.string(cmd)) {
71
- const actions = cmd.split('.');
72
- let obj = app;
73
- actions.forEach(key => {
74
- obj = obj[key];
75
- if (!obj) throw new Error(`class or function '${key}' not exists`);
76
- });
77
- fn = obj;
78
- }
79
- if (!fn) throw new Error('function not exists');
80
-
81
- return fn;
82
- } catch (err) {
83
- app.logger.error('[ee:socket:ipcMain] throw error:', err);
84
- }
85
- return null;
86
- }
87
-
88
- // send/on 模型
89
- ipcMain.on(channel, async (event, params) => {
90
- const fn = findFn(self.app, channel);
91
- const result = await fn.call(self.app, params, event);
92
-
93
- event.returnValue = result;
94
- event.reply(`${channel}`, result);
95
- });
96
-
97
- // invoke/handle 模型
98
- ipcMain.handle(channel, async (event, params) => {
99
- const fn = findFn(self.app, channel);
100
- const result = await fn.call(self.app, params, event);
101
-
102
- return result;
103
- });
104
- }
105
- }
106
- }
107
- }
108
-
1
+ 'use strict';
2
+
3
+ const debug = require('debug')('ee-core:ipcServer');
4
+ const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
5
+ const is = require('is-type-of');
6
+ const { ipcMain } = require('electron');
7
+ const path = require('path');
8
+ const fs = require('fs');
9
+ const globby = require('globby');
10
+ const utils = require('../../core/lib/utils');
11
+ const wrap = require('../../utils/wrap');
12
+
13
+ class IpcServer {
14
+ constructor (app) {
15
+
16
+ this.app = app;
17
+ this.consoleLogger = new EggConsoleLogger();
18
+ this.consoleLogger.info('[ee-core:socket:ipcMain] start ipcMain');
19
+ this.register();
20
+ }
21
+
22
+ register () {
23
+ this.consoleLogger.info('[ee-core:socket:ipcMain] register channels');
24
+
25
+ const self = this;
26
+ // 遍历方法
27
+ const files = utils.filePatterns();
28
+ const directory = path.join(this.app.config.baseDir, 'controller');
29
+ const filepaths = globby.sync(files, { cwd: directory });
30
+
31
+ for (const filepath of filepaths) {
32
+ const fullpath = path.join(directory, filepath);
33
+ if (!fs.statSync(fullpath).isFile()) continue;
34
+
35
+ const properties = wrap.getProperties(filepath, {caseStyle: 'lower'});
36
+ const pathName = directory.split(/[/\\]/).slice(-1) + '.' + properties.join('.');
37
+
38
+ let fileObj = utils.loadFile(fullpath);
39
+ const fns = {};
40
+ // 为了统一,仅支持class文件
41
+ if (is.class(fileObj) || utils.isBytecodeClass(fileObj)) {
42
+ let proto = fileObj.prototype;
43
+ // 不遍历父类的方法
44
+ //while (proto !== Object.prototype) {
45
+ const keys = Object.getOwnPropertyNames(proto);
46
+ for (const key of keys) {
47
+ if (key === 'constructor') {
48
+ continue;
49
+ }
50
+ const d = Object.getOwnPropertyDescriptor(proto, key);
51
+ if (is.function(d.value) && !fns.hasOwnProperty(key)) {
52
+ fns[key] = 1;
53
+ }
54
+ }
55
+ //proto = Object.getPrototypeOf(proto);
56
+ //}
57
+ }
58
+
59
+ debug('register class %s fns %j', pathName, fns);
60
+
61
+ for (const key in fns) {
62
+ let channel = pathName + '.' + key;
63
+ debug('register channel %s', channel);
64
+
65
+ function findFn (app, c) {
66
+ try {
67
+ // 找函数
68
+ const cmd = c;
69
+ let fn = null;
70
+ if (is.string(cmd)) {
71
+ const actions = cmd.split('.');
72
+ let obj = app;
73
+ actions.forEach(key => {
74
+ obj = obj[key];
75
+ if (!obj) throw new Error(`class or function '${key}' not exists`);
76
+ });
77
+ fn = obj;
78
+ }
79
+ if (!fn) throw new Error('function not exists');
80
+
81
+ return fn;
82
+ } catch (err) {
83
+ app.logger.error('[ee:socket:ipcMain] throw error:', err);
84
+ }
85
+ return null;
86
+ }
87
+
88
+ // send/on 模型
89
+ ipcMain.on(channel, async (event, params) => {
90
+ const fn = findFn(self.app, channel);
91
+ const result = await fn.call(self.app, params, event);
92
+
93
+ event.returnValue = result;
94
+ event.reply(`${channel}`, result);
95
+ });
96
+
97
+ // invoke/handle 模型
98
+ ipcMain.handle(channel, async (event, params) => {
99
+ const fn = findFn(self.app, channel);
100
+ const result = await fn.call(self.app, params, event);
101
+
102
+ return result;
103
+ });
104
+ }
105
+ }
106
+ }
107
+ }
108
+
109
109
  module.exports = IpcServer;
@@ -1,51 +1,51 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const IoClient = require('socket.io-client');
5
- const constant = require('../constant');
6
- const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
7
-
8
- class SocketClient {
9
- constructor (port) {
10
- this.consoleLogger = new EggConsoleLogger();
11
- port = port ? parseInt(port) : this.getSocketcPort();
12
-
13
- assert(typeof port === 'number', 'port required, and must be a number');
14
- this.consoleLogger.info('[ee-core:socket:client] start client');
15
-
16
- const url = 'http://127.0.0.1:' + port;
17
- this.consoleLogger.info('[ee-core:socket:client] url:', url);
18
- this.client = IoClient(url);
19
- }
20
-
21
- static getInstance (port) {
22
- if (typeof this.instance === 'object') {
23
- return this.instance;
24
- }
25
- this.instance = new SocketClient(port);
26
- return this.instance;
27
- }
28
-
29
- call (method = '', ...params) {
30
- return new Promise((resolve, reject) => {
31
- // 获取通信频道
32
- const channel = constant.socketIo.channel.partySoftware;
33
- this.client.emit(channel, { cmd: method, params: params }, (response) => {
34
- resolve(response);
35
- });
36
- });
37
- }
38
-
39
- getCoreDB () {
40
- const coreDB = require('../storage/index').JsonDB.connection('system');
41
- return coreDB;
42
- }
43
-
44
- getSocketcPort () {
45
- const cdb = this.getCoreDB();
46
- const port = cdb.getItem('config').socketServer.port;
47
- return parseInt(port);
48
- }
49
- }
50
-
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const IoClient = require('socket.io-client');
5
+ const constant = require('../constant');
6
+ const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
7
+
8
+ class SocketClient {
9
+ constructor (port) {
10
+ this.consoleLogger = new EggConsoleLogger();
11
+ port = port ? parseInt(port) : this.getSocketcPort();
12
+
13
+ assert(typeof port === 'number', 'port required, and must be a number');
14
+ this.consoleLogger.info('[ee-core:socket:client] start client');
15
+
16
+ const url = 'http://127.0.0.1:' + port;
17
+ this.consoleLogger.info('[ee-core:socket:client] url:', url);
18
+ this.client = IoClient(url);
19
+ }
20
+
21
+ static getInstance (port) {
22
+ if (typeof this.instance === 'object') {
23
+ return this.instance;
24
+ }
25
+ this.instance = new SocketClient(port);
26
+ return this.instance;
27
+ }
28
+
29
+ call (method = '', ...params) {
30
+ return new Promise((resolve, reject) => {
31
+ // 获取通信频道
32
+ const channel = constant.socketIo.channel.partySoftware;
33
+ this.client.emit(channel, { cmd: method, params: params }, (response) => {
34
+ resolve(response);
35
+ });
36
+ });
37
+ }
38
+
39
+ getCoreDB () {
40
+ const coreDB = require('../storage/index').JsonDB.connection('system');
41
+ return coreDB;
42
+ }
43
+
44
+ getSocketcPort () {
45
+ const cdb = this.getCoreDB();
46
+ const port = cdb.getItem('config').socketServer.port;
47
+ return parseInt(port);
48
+ }
49
+ }
50
+
51
51
  module.exports = SocketClient;
@@ -1,77 +1,77 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const { Server } = require('socket.io');
5
- const constant = require('../constant');
6
- const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
7
- const is = require('is-type-of');
8
-
9
- /**
10
- * socket server
11
- */
12
- class SocketServer {
13
- constructor (app) {
14
- this.app = app;
15
- const options = this.app.config.socketServer;
16
- this.consoleLogger = new EggConsoleLogger();
17
-
18
- if (!options.enable) {
19
- return;
20
- }
21
-
22
- let port = process.env.EE_SOCKET_PORT ? parseInt(process.env.EE_SOCKET_PORT) : parseInt(this.getSocketPort());
23
- assert(typeof port === 'number', 'socekt port required, and must be a number');
24
- this.consoleLogger.info('[ee-core:socket:server] socket server port is:', port);
25
-
26
- // let opt = Object.assign({}, options);
27
- // delete opt.enable;
28
- this.io = new Server(port, options);
29
- this.connec();
30
- }
31
-
32
- connec () {
33
- const self = this;
34
- this.consoleLogger.info('[ee-core:socket:server] connection .....');
35
- this.io.on('connection', (socket) => {
36
- const channel = constant.socketIo.channel.partySoftware;
37
- socket.on(channel, async (message, callback) => {
38
- self.consoleLogger.info('[ee-core:socket:server] socket id:' + socket.id + ' message cmd: ' + message.cmd);
39
-
40
- try {
41
- // 找函数
42
- const cmd = message.cmd;
43
- const args = message.params;
44
- let fn = null;
45
- if (is.string(cmd)) {
46
- const actions = cmd.split('.');
47
- let obj = self.app;
48
- actions.forEach(key => {
49
- obj = obj[key];
50
- if (!obj) throw new Error(`class or function '${key}' not exists`);
51
- });
52
- fn = obj;
53
- }
54
- if (!fn) throw new Error('function not exists');
55
-
56
- const result = await fn.call(self.app, args);
57
- callback(result);
58
- } catch (err) {
59
- self.app.console.error('[ee-core:socket:server] throw error:', err);
60
- }
61
- });
62
- });
63
- }
64
-
65
- getCoreDB () {
66
- const coreDB = require('../storage/index').JsonDB.connection('system');
67
- return coreDB;
68
- }
69
-
70
- getSocketPort () {
71
- const cdb = this.getCoreDB();
72
- const port = cdb.getItem('config').socketServer.port;
73
- return port;
74
- }
75
- }
76
-
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const { Server } = require('socket.io');
5
+ const constant = require('../constant');
6
+ const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
7
+ const is = require('is-type-of');
8
+
9
+ /**
10
+ * socket server
11
+ */
12
+ class SocketServer {
13
+ constructor (app) {
14
+ this.app = app;
15
+ const options = this.app.config.socketServer;
16
+ this.consoleLogger = new EggConsoleLogger();
17
+
18
+ if (!options.enable) {
19
+ return;
20
+ }
21
+
22
+ let port = process.env.EE_SOCKET_PORT ? parseInt(process.env.EE_SOCKET_PORT) : parseInt(this.getSocketPort());
23
+ assert(typeof port === 'number', 'socekt port required, and must be a number');
24
+ this.consoleLogger.info('[ee-core:socket:server] socket server port is:', port);
25
+
26
+ // let opt = Object.assign({}, options);
27
+ // delete opt.enable;
28
+ this.io = new Server(port, options);
29
+ this.connec();
30
+ }
31
+
32
+ connec () {
33
+ const self = this;
34
+ this.consoleLogger.info('[ee-core:socket:server] connection .....');
35
+ this.io.on('connection', (socket) => {
36
+ const channel = constant.socketIo.channel.partySoftware;
37
+ socket.on(channel, async (message, callback) => {
38
+ self.consoleLogger.info('[ee-core:socket:server] socket id:' + socket.id + ' message cmd: ' + message.cmd);
39
+
40
+ try {
41
+ // 找函数
42
+ const cmd = message.cmd;
43
+ const args = message.params;
44
+ let fn = null;
45
+ if (is.string(cmd)) {
46
+ const actions = cmd.split('.');
47
+ let obj = self.app;
48
+ actions.forEach(key => {
49
+ obj = obj[key];
50
+ if (!obj) throw new Error(`class or function '${key}' not exists`);
51
+ });
52
+ fn = obj;
53
+ }
54
+ if (!fn) throw new Error('function not exists');
55
+
56
+ const result = await fn.call(self.app, args);
57
+ callback(result);
58
+ } catch (err) {
59
+ self.app.console.error('[ee-core:socket:server] throw error:', err);
60
+ }
61
+ });
62
+ });
63
+ }
64
+
65
+ getCoreDB () {
66
+ const coreDB = require('../storage/index').JsonDB.connection('system');
67
+ return coreDB;
68
+ }
69
+
70
+ getSocketPort () {
71
+ const cdb = this.getCoreDB();
72
+ const port = cdb.getItem('config').socketServer.port;
73
+ return port;
74
+ }
75
+ }
76
+
77
77
  module.exports = SocketServer;
@@ -1,22 +1,22 @@
1
- 'use strict';
2
-
3
- const socketServer = require('./socketServer');
4
- const ipcServer = require('./ipcServer');
5
- const httpServer = require('./httpServer');
6
-
7
- /**
8
- * server
9
- */
10
- module.exports = (app) => {
11
-
12
- // 启动 socket server
13
- new socketServer(app);
14
-
15
- // 启动 http server
16
- new httpServer(app);
17
-
18
- // 启动 electron ipc server
19
- new ipcServer(app);
20
-
21
- }
22
-
1
+ 'use strict';
2
+
3
+ const socketServer = require('./socketServer');
4
+ const ipcServer = require('./ipcServer');
5
+ const httpServer = require('./httpServer');
6
+
7
+ /**
8
+ * server
9
+ */
10
+ module.exports = (app) => {
11
+
12
+ // 启动 socket server
13
+ new socketServer(app);
14
+
15
+ // 启动 http server
16
+ new httpServer(app);
17
+
18
+ // 启动 electron ipc server
19
+ new ipcServer(app);
20
+
21
+ }
22
+
@@ -1,34 +1,34 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const _ = require('lodash');
5
- const JsonDB = {};
6
-
7
- JsonDB.connection = function (database, options = {}) {
8
- let driver = options.driver || 'lowdb';
9
- let opt = options.default || {};
10
- if (!_.includes(['lowdb', 'sqlite'], driver)) {
11
- assert(database, `db driver ${driver} is not supported`);
12
- }
13
- if (_.isEmpty(database)) {
14
- assert(database, `db name ${database} Cannot be empty`);
15
- }
16
- let storage;
17
- switch (driver) {
18
- case 'lowdb':
19
- const LowdbStorage = require('./lowdbStorage');
20
- storage = new LowdbStorage(database);
21
- break;
22
- case 'sqlite':
23
- const SqliteStorage = require('./sqliteStorage');
24
- storage = new SqliteStorage(database, opt);
25
- break;
26
- default:
27
- }
28
-
29
- return storage;
30
- }
31
-
32
- module.exports = {
33
- JsonDB
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const _ = require('lodash');
5
+ const JsonDB = {};
6
+
7
+ JsonDB.connection = function (database, options = {}) {
8
+ let driver = options.driver || 'lowdb';
9
+ let opt = options.default || {};
10
+ if (!_.includes(['lowdb', 'sqlite'], driver)) {
11
+ assert(database, `db driver ${driver} is not supported`);
12
+ }
13
+ if (_.isEmpty(database)) {
14
+ assert(database, `db name ${database} Cannot be empty`);
15
+ }
16
+ let storage;
17
+ switch (driver) {
18
+ case 'lowdb':
19
+ const LowdbStorage = require('./lowdbStorage');
20
+ storage = new LowdbStorage(database);
21
+ break;
22
+ case 'sqlite':
23
+ const SqliteStorage = require('./sqliteStorage');
24
+ storage = new SqliteStorage(database, opt);
25
+ break;
26
+ default:
27
+ }
28
+
29
+ return storage;
30
+ }
31
+
32
+ module.exports = {
33
+ JsonDB
34
34
  };