ee-core 2.11.1 → 4.0.0-beta.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 (96) hide show
  1. package/app/application.js +31 -0
  2. package/app/boot.js +81 -0
  3. package/app/dir.js +27 -0
  4. package/app/events.js +56 -0
  5. package/app/index.js +7 -0
  6. package/config/config_loader.js +66 -0
  7. package/config/default_config.js +110 -0
  8. package/config/index.js +21 -83
  9. package/const/channel.js +26 -16
  10. package/const/index.js +0 -4
  11. package/controller/controller_loader.js +78 -0
  12. package/controller/index.js +18 -19
  13. package/core/index.js +6 -5
  14. package/core/{lib/loader → loader}/file_loader.js +39 -156
  15. package/core/utils/index.js +83 -0
  16. package/core/{lib/utils → utils}/timing.js +3 -2
  17. package/cross/cross.js +152 -0
  18. package/cross/index.js +6 -181
  19. package/cross/spawnProcess.js +34 -51
  20. package/electron/app/index.js +38 -54
  21. package/electron/index.js +13 -17
  22. package/electron/window/index.js +260 -65
  23. package/exception/index.js +34 -32
  24. package/html/index.js +7 -10
  25. package/index.js +4 -52
  26. package/jobs/child/app.js +9 -9
  27. package/jobs/child/forkProcess.js +29 -45
  28. package/jobs/child/index.js +13 -10
  29. package/jobs/child-pool/index.js +13 -11
  30. package/jobs/index.js +2 -4
  31. package/loader/index.js +91 -144
  32. package/log/index.js +74 -57
  33. package/log/logger.js +76 -84
  34. package/message/childMessage.js +12 -13
  35. package/message/index.js +7 -16
  36. package/package.json +2 -2
  37. package/ps/index.js +137 -223
  38. package/socket/httpServer.js +46 -43
  39. package/socket/index.js +52 -69
  40. package/socket/ipcServer.js +80 -94
  41. package/socket/socketServer.js +31 -24
  42. package/storage/index.js +5 -37
  43. package/storage/sqliteStorage.js +18 -18
  44. package/utils/extend.js +10 -5
  45. package/utils/helper.js +38 -42
  46. package/utils/index.js +40 -23
  47. package/utils/ip.js +5 -45
  48. package/utils/is.js +107 -141
  49. package/utils/json.js +15 -7
  50. package/utils/pargv.js +5 -1
  51. package/utils/{get-port → port}/index.js +4 -26
  52. package/utils/wrap.js +8 -3
  53. package/addon/index.js +0 -35
  54. package/addon/window/index.js +0 -99
  55. package/bin/tools.js +0 -8
  56. package/config/cache.js +0 -42
  57. package/config/config.default.js +0 -331
  58. package/controller/baseContextClass.js +0 -25
  59. package/core/lib/ee.js +0 -216
  60. package/core/lib/loader/context_loader.js +0 -106
  61. package/core/lib/loader/ee_loader.js +0 -435
  62. package/core/lib/loader/mixin/addon.js +0 -32
  63. package/core/lib/loader/mixin/config.js +0 -130
  64. package/core/lib/loader/mixin/controller.js +0 -125
  65. package/core/lib/loader/mixin/service.js +0 -28
  66. package/core/lib/utils/base_context_class.js +0 -34
  67. package/core/lib/utils/function.js +0 -30
  68. package/core/lib/utils/index.js +0 -133
  69. package/core/lib/utils/sequencify.js +0 -59
  70. package/ee/appLoader.js +0 -48
  71. package/ee/application.js +0 -100
  72. package/ee/baseApp.js +0 -104
  73. package/ee/eeApp.js +0 -409
  74. package/ee/index.js +0 -58
  75. package/electron/window/winState.js +0 -186
  76. package/httpclient/index.js +0 -161
  77. package/jobs/baseJobClass.js +0 -16
  78. package/jobs/renderer/index.js +0 -141
  79. package/jobs/renderer/loadView.js +0 -41
  80. package/jobs/unification.js +0 -64
  81. package/main/index.js +0 -57
  82. package/old-utils/index.js +0 -91
  83. package/services/baseContextClass.js +0 -24
  84. package/services/index.js +0 -41
  85. package/socket/io.js +0 -28
  86. package/storage/jsondb/adapters/Base.js +0 -23
  87. package/storage/jsondb/adapters/FileSync.js +0 -64
  88. package/storage/jsondb/main.js +0 -55
  89. package/storage/jsondbStorage.js +0 -196
  90. package/utils/co.js +0 -237
  91. package/utils/copyto.js +0 -161
  92. package/utils/depd/index.js +0 -538
  93. package/utils/depd/lib/browser/index.js +0 -77
  94. package/utils/get-port/index.d.ts +0 -64
  95. package/utils/time/index.js +0 -20
  96. package/utils/time/ms.js +0 -162
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const debug = require('debug')('ee-core:app:appliaction');
4
+ const { loadController } = require('../controller');
5
+ const { eventBus, Ready } = require('./events');
6
+ const { loadSocket } = require('../socket');
7
+ const { loadElectron } = require('../electron');
8
+
9
+ class Appliaction {
10
+ constructor() {
11
+
12
+ }
13
+
14
+ register(eventName, handler) {
15
+ return eventBus.register(eventName, handler);
16
+ }
17
+
18
+ run() {
19
+ loadController();
20
+ loadSocket();
21
+ eventBus.emitLifecycle(Ready);
22
+ loadElectron();
23
+ }
24
+ }
25
+
26
+ const app = new Appliaction();
27
+
28
+ module.exports = {
29
+ Appliaction,
30
+ app,
31
+ };
package/app/boot.js ADDED
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+
3
+ const debug = require('debug')('ee-core:app:boot');
4
+ const path = require('path');
5
+ const { loadException } = require('../exception');
6
+ const { electronApp } = require('../electron/app');
7
+ const { getArgumentByName, getBundleDir } = require('../ps');
8
+ const { loadConfig } = require('../config');
9
+ const { loadLog } = require('../log');
10
+ const { app } = require('./application');
11
+ const { loadDir } = require('./dir');
12
+ // const { isJsProject } = require('../utils');
13
+
14
+ class ElectronEgg {
15
+ constructor() {
16
+ const baseDir = electronApp.getAppPath();
17
+ const { env } = process;
18
+ const environmet = getArgumentByName('env') || 'prod';
19
+ console.log('argv:', process.argv);
20
+
21
+ const options = {
22
+ env: environmet,
23
+ baseDir,
24
+ electronDir: getBundleDir(baseDir),
25
+ appName: electronApp.getName(),
26
+ userHome: electronApp.getPath('home'),
27
+ appData: electronApp.getPath('appData'),
28
+ appUserData: electronApp.getPath('userData'),
29
+ appVersion: electronApp.getVersion(),
30
+ isPackaged: electronApp.isPackaged,
31
+ execDir: baseDir,
32
+ }
33
+
34
+ // exec directory (exe dmg dep) for prod
35
+ if (environmet == 'prod' && options.isPackaged) {
36
+ options.execDir = path.dirname(electronApp.getPath('exe'));
37
+ }
38
+
39
+ // js开发环境使用源码目录
40
+ // if (isJsProject(baseDir) && environmet !== 'prod' ) {
41
+ // options.electronDir = path.join(baseDir, 'electron');
42
+ // }
43
+
44
+ // normalize env
45
+ env.EE_ENV = environmet;
46
+ env.EE_APP_NAME = options.appName;
47
+ env.EE_APP_VERSION = options.appVersion;
48
+ env.EE_BASE_DIR = options.baseDir;
49
+ env.EE_ELECTRON_DIR = options.electronDir;
50
+ env.EE_USER_HOME = options.userHome;
51
+ env.EE_APP_DATA = options.appData;
52
+ env.EE_APP_USER_DATA = options.appUserData;
53
+ env.EE_EXEC_DIR = options.execDir;
54
+ env.EE_IS_PACKAGED = options.isPackaged;
55
+ env.EE_SOCKET_PORT = null;
56
+ env.EE_HTTP_PORT = null;
57
+ debug('[constructor] options:%j', options)
58
+
59
+ this.init();
60
+ }
61
+
62
+ init() {
63
+ // basic functions
64
+ loadException();
65
+ loadConfig();
66
+ loadDir();
67
+ loadLog();
68
+ }
69
+
70
+ register(eventName, handler) {
71
+ return app.register(eventName, handler);
72
+ }
73
+
74
+ run() {
75
+ app.run();
76
+ }
77
+ }
78
+
79
+ module.exports = {
80
+ ElectronEgg,
81
+ };
package/app/dir.js ADDED
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const { getUserHomeHiddenAppDir, getLogDir, getDataDir } = require('../ps');
5
+ const { mkdir } = require('../utils/helper');
6
+ function loadDir() {
7
+ initDir();
8
+ }
9
+
10
+ function initDir() {
11
+ const homeHiddenAppDir = getUserHomeHiddenAppDir();
12
+ if (!fs.existsSync(homeHiddenAppDir)) {
13
+ mkdir(homeHiddenAppDir, { mode: 0o755 });
14
+ }
15
+ const dataDir = getDataDir();
16
+ if (!fs.existsSync(dataDir)) {
17
+ mkdir(dataDir, { mode: 0o755 });
18
+ }
19
+ const logDir = getLogDir();
20
+ if (!fs.existsSync(logDir)) {
21
+ mkdir(logDir, { mode: 0o755 });
22
+ }
23
+ }
24
+
25
+ module.exports = {
26
+ loadDir
27
+ };
package/app/events.js ADDED
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ const Ready = "ready";
4
+ const ElectronAppReady = "electron-app-ready";
5
+ const WindowReady = "window-ready";
6
+ const BeforeClose = "before-close";
7
+ const Preload = "preload";
8
+
9
+ class EventBus {
10
+ constructor() {
11
+ this.lifecycleEvents = {};
12
+ this.eventsMap = {};
13
+ }
14
+
15
+ // add lifecycle event
16
+ register(eventName, handler) {
17
+ if (!this.lifecycleEvents[eventName]) {
18
+ this.lifecycleEvents[eventName] = handler;
19
+ }
20
+ }
21
+
22
+ // call lifecycle event
23
+ emitLifecycle(eventName, ...args) {
24
+ const eventFn = this.lifecycleEvents[eventName];
25
+ if (eventFn) {
26
+ eventFn(...args);
27
+ }
28
+ }
29
+
30
+ // add listener
31
+ on(eventName, handler) {
32
+ if (!this.eventsMap[eventName]) {
33
+ this.eventsMap[eventName] = handler;
34
+ }
35
+ }
36
+
37
+ // emit listener
38
+ emit(eventName, ...args) {
39
+ const eventFn = this.eventsMap[eventName];
40
+ if (eventFn) {
41
+ eventFn(...args);
42
+ }
43
+ }
44
+ }
45
+
46
+ const eventBus = new EventBus();
47
+
48
+ module.exports = {
49
+ EventBus,
50
+ eventBus,
51
+ Ready,
52
+ ElectronAppReady,
53
+ WindowReady,
54
+ Preload,
55
+ BeforeClose
56
+ };
package/app/index.js ADDED
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ const { ElectronEgg } = require('./boot');
4
+
5
+ module.exports = {
6
+ ElectronEgg,
7
+ };
@@ -0,0 +1,66 @@
1
+ 'use strict';
2
+
3
+ const debug = require('debug')('ee-core:config:config_loader');
4
+ const path = require('path');
5
+ const { appName, env, getElectronDir, getBaseDir, getRootDir } = require('../ps');
6
+ const { extend } = require('../utils/extend');
7
+ const { loadFile } = require('../loader');
8
+ const { Timing } = require('../core/utils/timing');
9
+ const defaultConfig = require('./default_config');
10
+
11
+ class ConfigLoader {
12
+ constructor() {
13
+ this.timing = new Timing();
14
+ }
15
+
16
+ /**
17
+ * Load config/config.xxx.js
18
+ */
19
+ load() {
20
+ this.timing.start('Load Config');
21
+
22
+ // Load Application config
23
+ const appConfig = this._AppConfig();
24
+ // debug("[load] appConfig: %O", appConfig);
25
+
26
+ const defaultConf = defaultConfig();
27
+ const config = extend(true, defaultConf, appConfig);
28
+ debug("[load] config: %o", config);
29
+
30
+ this.timing.end('Load Config');
31
+ return config;
32
+ }
33
+
34
+ _AppConfig() {
35
+ const names = [
36
+ 'config.default',
37
+ `config.${env()}`,
38
+ ];
39
+ const target = {};
40
+ for (const filename of names) {
41
+ const config = this._loadConfig(getElectronDir(), filename);
42
+ extend(true, target, config);
43
+ }
44
+ return target;
45
+ }
46
+
47
+ _loadConfig(dirpath, filename) {
48
+ const appInfo = {
49
+ name: appName(),
50
+ baseDir: getBaseDir(),
51
+ electronDir: getElectronDir(),
52
+ env: env(),
53
+ root: getRootDir(),
54
+ }
55
+ const filepath = path.join(dirpath, 'config', filename);
56
+ const config = loadFile(filepath, appInfo);
57
+ debug("[_loadConfig] filepath: %s", filepath);
58
+ if (!config) return null;
59
+
60
+ return config;
61
+ }
62
+ }
63
+
64
+ module.exports = {
65
+ ConfigLoader
66
+ };
@@ -0,0 +1,110 @@
1
+ 'use strict';
2
+
3
+ const path = require('path');
4
+ const { env, getBaseDir, getLogDir } = require('../ps');
5
+ const { SocketIO } = require('../const/channel');
6
+
7
+ /**
8
+ * default
9
+ */
10
+ module.exports = () => {
11
+ return {
12
+ openDevTools: false,
13
+ singleLock: true,
14
+ windowsOption: {
15
+ title: 'electron-egg',
16
+ width: 980,
17
+ height: 650,
18
+ minWidth: 400,
19
+ minHeight: 300,
20
+ webPreferences: {
21
+ //webSecurity: false,
22
+ contextIsolation: false, // false -> 可在渲染进程中使用electron的api,true->需要bridge.js(contextBridge)
23
+ nodeIntegration: true,
24
+ //preload: path.join(appInfo.electronDir, 'preload', 'bridge.js'),
25
+ },
26
+ frame: true,
27
+ show: false,
28
+ icon: path.join(getBaseDir(), 'public', 'images', 'logo-32.png'),
29
+ },
30
+ logger: {
31
+ type: 'application',
32
+ dir: getLogDir(),
33
+ encoding: 'utf8',
34
+ env: env(),
35
+ level: 'INFO',
36
+ consoleLevel: 'INFO',
37
+ disableConsoleAfterReady: env() !== 'local',
38
+ outputJSON: false,
39
+ buffer: true,
40
+ appLogName: `ee.log`,
41
+ coreLogName: 'ee-core.log',
42
+ agentLogName: 'ee-agent.log',
43
+ errorLogName: `ee-error.log`,
44
+ coreLogger: {},
45
+ allowDebugAtProd: false,
46
+ enablePerformanceTimer: false,
47
+ rotator: 'day',
48
+ },
49
+ socketServer: {
50
+ enable: false, // is it enabled
51
+ port: 7070, // default port (if the port is in use, randomly select one)
52
+ path: "/socket.io/", // path
53
+ connectTimeout: 45000, // client connection timeout
54
+ pingTimeout: 30000, // heartbeat detection timeout
55
+ pingInterval: 25000, // heartbeat detection interval
56
+ maxHttpBufferSize: 1e8, // the data size of each message 1M
57
+ transports: ["polling", "websocket"], // http polling or websocket
58
+ cors: {
59
+ origin: true, // http协议时,要设置跨域 类型 Boolean String RegExp Array Function
60
+ },
61
+ channel: SocketIO.partySoftware
62
+ },
63
+ httpServer: {
64
+ enable: false, // Is it enabled
65
+ https: {
66
+ enable: false,
67
+ key: '/public/ssl/localhost+1.key',
68
+ cert: '/public/ssl/localhost+1.pem'
69
+ },
70
+ protocol: 'http://',
71
+ host: '127.0.0.1',
72
+ port: 7071, // Default port (if the port is in use, randomly select one)
73
+ cors: {
74
+ origin: "*"
75
+ },
76
+ body: {
77
+ multipart: true,
78
+ formidable: {
79
+ keepExtensions: true
80
+ }
81
+ },
82
+ filterRequest: {
83
+ uris: [
84
+ 'favicon.ico'
85
+ ],
86
+ returnData: ''
87
+ }
88
+ },
89
+ remote: {
90
+ enable: false,
91
+ url: ''
92
+ },
93
+ mainServer: {
94
+ protocol: 'file://', // file://
95
+ indexPath: '/public/dist/index.html',
96
+ options: {},
97
+ takeover: '',
98
+ loadingPage: '',
99
+ },
100
+ exception: {
101
+ mainExit: false,
102
+ childExit: true,
103
+ rendererExit: true,
104
+ },
105
+ jobs: {
106
+ messageLog: false
107
+ },
108
+ cross: {}
109
+ }
110
+ }
package/config/index.js CHANGED
@@ -1,87 +1,25 @@
1
- const Storage = require('../storage');
2
- const ConfigCache = require('./cache');
3
- var SystemDb = undefined;
1
+ 'use strict';
4
2
 
5
- const Cfg = {
3
+ const { ConfigLoader } = require('./config_loader');
6
4
 
7
- /**
8
- * 获取 coredb
9
- */
10
- _getCoreDB() {
11
- // [todo] 要么每次new对象,要么所有地方都用同一个实例,否则会出现数据无法刷新的情况
12
- SystemDb = Storage.connection('system');
13
- return SystemDb;
14
- },
15
-
16
- /**
17
- * all
18
- */
19
- all(fromCache = true) {
20
- if (fromCache === true) {
21
- // 如果子进程
22
- const cacheValue = ConfigCache.all();
23
- return cacheValue;
24
- }
25
- const cdb = this._getCoreDB();
26
- const config = cdb.getItem('config');
27
-
28
- return config;
29
- },
30
-
31
- /**
32
- * setAll
33
- */
34
- setAll(value) {
35
- const cdb = this._getCoreDB();
36
- cdb.setItem('config', value);
37
-
38
- return;
39
- },
40
-
41
- /**
42
- * setValue
43
- */
44
- setValue(key, value) {
45
- const cdb = this._getCoreDB();
46
- cdb.setConfigItem(key, value);
47
-
48
- return;
49
- },
50
-
51
- /**
52
- * getValue
53
- */
54
- getValue(key, fromCache = true) {
55
- if (fromCache === true) {
56
- const cacheValue = ConfigCache.getValue(key);
57
- return cacheValue;
58
- }
59
-
60
- const cdb = this._getCoreDB();
61
- let v = cdb.getConfigItem(key);
62
-
63
- return v;
64
- },
65
-
66
- /**
67
- * isFileProtocol
68
- */
69
- isFileProtocol(config) {
70
- if (config.protocol == 'file://') {
71
- return true;
72
- }
73
- return false;
74
- },
75
-
76
- /**
77
- * isWebProtocol
78
- */
79
- isWebProtocol(config) {
80
- if (['http://', 'https://'].includes(config.protocol)) {
81
- return true;
82
- }
83
- return false;
84
- },
5
+ const Instance = {
6
+ config: null,
85
7
  };
86
8
 
87
- module.exports = Cfg;
9
+ function loadConfig() {
10
+ const configLoader = new ConfigLoader();
11
+ Instance["config"] = configLoader.load();
12
+ return Instance["config"];
13
+ }
14
+
15
+ function getConfig() {
16
+ if (!Instance["config"]) {
17
+ loadConfig();
18
+ };
19
+ return Instance["config"];
20
+ }
21
+
22
+ module.exports = {
23
+ loadConfig,
24
+ getConfig,
25
+ };
package/const/channel.js CHANGED
@@ -1,18 +1,28 @@
1
+ 'use strict';
2
+
3
+ const Processes = {
4
+ showException: 'ee#showException',
5
+ sendToMain: 'ee#sendToMain'
6
+ }
7
+
8
+ const SocketIO = {
9
+ partySoftware: 'c1',
10
+ }
11
+
12
+ const Events = {
13
+ childProcessExit: 'ee#childProcess#exit',
14
+ childProcessError: 'ee#childProcess#error',
15
+ }
16
+
17
+ const Receiver = {
18
+ childJob: 'job',
19
+ forkProcess: 'task',
20
+ all: 'all'
21
+ }
22
+
1
23
  module.exports = {
2
- process: {
3
- showException: 'ee#showException',
4
- sendToMain: 'ee#sendToMain'
5
- },
6
- socketIo: {
7
- partySoftware: 'c1',
8
- },
9
- events: {
10
- childProcessExit: 'ee#childProcess#exit',
11
- childProcessError: 'ee#childProcess#error',
12
- },
13
- receiver: {
14
- childJob: 'job',
15
- forkProcess: 'task',
16
- all: 'all'
17
- }
24
+ Processes,
25
+ SocketIO,
26
+ Events,
27
+ Receiver
18
28
  };
package/const/index.js CHANGED
@@ -1,8 +1,4 @@
1
1
  module.exports = {
2
- storageKey: {
3
- cache: 'cache',
4
- cacheConfig: 'cache.config',
5
- },
6
2
  jobs: {
7
3
  inspectStartIndex: 5858
8
4
  }
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ const debug = require('debug')('ee-core:controller:controller_loader');
4
+ const path = require('path');
5
+ const is = require('is-type-of');
6
+ const { getElectronDir } = require('../ps');
7
+ const { Timing } = require('../core/utils/timing');
8
+ const { FileLoader, FULLPATH } = require('../core/loader/file_loader');
9
+ const { isBytecodeClass, callFn } = require('../core/utils');
10
+
11
+ class ControllerLoader {
12
+ constructor() {
13
+ this.timing = new Timing();
14
+ }
15
+
16
+ /**
17
+ * Load controller/xxx.js
18
+ */
19
+ load() {
20
+ this.timing.start('Load Controller');
21
+
22
+ const opt = {
23
+ caseStyle: 'lower',
24
+ directory: path.join(getElectronDir(), 'controller'),
25
+ initializer: (obj, opt) => {
26
+ if (is.class(obj) || isBytecodeClass(obj)) {
27
+ obj.prototype.pathName = opt.pathName;
28
+ obj.prototype.fullPath = opt.path;
29
+ return wrapClass(obj);
30
+ }
31
+ return obj;
32
+ },
33
+ };
34
+ const target = new FileLoader(opt).load();
35
+ debug("[load] controllers: %o", target);
36
+ this.timing.end('Load Controller');
37
+ return target;
38
+ }
39
+ }
40
+
41
+ // wrap the class, yield a object with middlewares
42
+ function wrapClass(Controller) {
43
+ let proto = Controller.prototype;
44
+ const ret = {};
45
+ // tracing the prototype chain
46
+ while (proto !== Object.prototype) {
47
+ const keys = Object.getOwnPropertyNames(proto);
48
+ // debug("[wrapClass] keys:", keys);
49
+ for (const key of keys) {
50
+ // getOwnPropertyNames will return constructor
51
+ // that should be ignored
52
+ if (key === 'constructor') {
53
+ continue;
54
+ }
55
+ // skip getter, setter & non-function properties
56
+ const d = Object.getOwnPropertyDescriptor(proto, key);
57
+ // prevent to override sub method
58
+ if (is.function(d.value) && !ret.hasOwnProperty(key)) {
59
+ ret[key] = methodToMiddleware(Controller, key);
60
+ ret[key][FULLPATH] = Controller.prototype.fullPath + '#' + Controller.name + '.' + key + '()';
61
+ }
62
+ }
63
+ proto = Object.getPrototypeOf(proto);
64
+ }
65
+
66
+ return ret;
67
+ }
68
+
69
+ function methodToMiddleware(Controller, key) {
70
+ return function classControllerMiddleware(...args) {
71
+ const controller = new Controller();
72
+ return callFn(controller[key], args, controller);
73
+ };
74
+ }
75
+
76
+ module.exports = {
77
+ ControllerLoader
78
+ };
@@ -1,25 +1,24 @@
1
- 'use strict';
1
+ 'use strict'
2
2
 
3
- /**
4
- * BaseContextClass is a base class that can be extended,
5
- * it's instantiated in context level,
6
- */
7
- class BaseContextClass {
3
+ const { ControllerLoader } = require('./controller_loader');
8
4
 
9
- /**
10
- * @class
11
- * @param {Context} ctx - context instance
12
- * @since 1.1.0
13
- */
14
- constructor(ctx) {
5
+ const Instance = {
6
+ controller: null,
7
+ };
15
8
 
16
- // todo 兼容旧版本,后续废弃ctx
17
- if (typeof ctx === 'object') {
18
- this.app = ctx;
19
- this.config = ctx.config;
20
- this.service = ctx.service;
21
- }
9
+ function loadController() {
10
+ const controllerLoader = new ControllerLoader();
11
+ Instance.controller = controllerLoader.load();
12
+ }
13
+
14
+ function getController() {
15
+ if (!Instance.controller) {
16
+ loadController();
22
17
  }
18
+ return Instance.controller;
23
19
  }
24
20
 
25
- module.exports = BaseContextClass;
21
+ module.exports = {
22
+ loadController,
23
+ getController
24
+ };
package/core/index.js CHANGED
@@ -1,10 +1,11 @@
1
- const EeCore = require('./lib/ee');
2
- const EeLoader = require('./lib/loader/ee_loader');
3
- const BaseContextClass = require('./lib/utils/base_context_class');
4
- const utils = require('./lib/utils');
1
+ 'use strict';
2
+
3
+ const EeLoader = require('./loader/ee_loader');
4
+ const BaseContextClass = require('./utils/base_context_class');
5
+ const utils = require('./utils');
6
+
5
7
 
6
8
  module.exports = {
7
- EeCore,
8
9
  EeLoader,
9
10
  BaseContextClass,
10
11
  utils,