ee-core 2.9.2 → 2.10.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 (103) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +65 -65
  3. package/addon/index.js +34 -34
  4. package/addon/window/index.js +98 -98
  5. package/bin/tools.js +8 -8
  6. package/config/cache.js +41 -38
  7. package/config/config.default.js +331 -330
  8. package/config/index.js +86 -73
  9. package/const/channel.js +17 -17
  10. package/const/index.js +8 -8
  11. package/controller/baseContextClass.js +34 -34
  12. package/controller/index.js +34 -34
  13. package/core/index.js +10 -10
  14. package/core/lib/ee.js +216 -216
  15. package/core/lib/loader/context_loader.js +106 -106
  16. package/core/lib/loader/ee_loader.js +435 -435
  17. package/core/lib/loader/file_loader.js +326 -326
  18. package/core/lib/loader/mixin/addon.js +32 -32
  19. package/core/lib/loader/mixin/config.js +130 -130
  20. package/core/lib/loader/mixin/controller.js +125 -125
  21. package/core/lib/loader/mixin/service.js +28 -28
  22. package/core/lib/utils/base_context_class.js +34 -34
  23. package/core/lib/utils/function.js +30 -30
  24. package/core/lib/utils/index.js +133 -133
  25. package/core/lib/utils/sequencify.js +59 -59
  26. package/core/lib/utils/timing.js +77 -77
  27. package/cross/index.js +183 -183
  28. package/cross/spawnProcess.js +183 -183
  29. package/ee/appLoader.js +48 -48
  30. package/ee/application.js +99 -99
  31. package/ee/baseApp.js +103 -102
  32. package/ee/eeApp.js +408 -408
  33. package/ee/index.js +57 -57
  34. package/electron/app/index.js +64 -58
  35. package/electron/index.js +19 -19
  36. package/electron/window/index.js +73 -73
  37. package/electron/window/winState.js +186 -186
  38. package/exception/index.js +112 -112
  39. package/html/boot.html +98 -98
  40. package/html/cross-failure.html +28 -28
  41. package/html/failure.html +28 -28
  42. package/html/index.js +13 -13
  43. package/httpclient/index.js +161 -161
  44. package/index.js +54 -54
  45. package/jobs/baseJobClass.js +16 -16
  46. package/jobs/child/app.js +58 -65
  47. package/jobs/child/forkProcess.js +145 -145
  48. package/jobs/child/index.js +82 -82
  49. package/jobs/child-pool/index.js +213 -213
  50. package/jobs/index.js +8 -8
  51. package/jobs/load-balancer/algorithm/index.js +11 -11
  52. package/jobs/load-balancer/algorithm/minimumConnection.js +18 -18
  53. package/jobs/load-balancer/algorithm/polling.js +11 -11
  54. package/jobs/load-balancer/algorithm/random.js +9 -9
  55. package/jobs/load-balancer/algorithm/specify.js +14 -14
  56. package/jobs/load-balancer/algorithm/weights.js +21 -21
  57. package/jobs/load-balancer/algorithm/weightsMinimumConnection.js +29 -29
  58. package/jobs/load-balancer/algorithm/weightsPolling.js +22 -22
  59. package/jobs/load-balancer/algorithm/weightsRandom.js +16 -16
  60. package/jobs/load-balancer/consts.js +9 -9
  61. package/jobs/load-balancer/index.js +201 -201
  62. package/jobs/load-balancer/scheduler.js +31 -31
  63. package/jobs/renderer/index.js +141 -141
  64. package/jobs/renderer/loadView.js +40 -40
  65. package/jobs/unification.js +63 -63
  66. package/loader/index.js +172 -172
  67. package/log/index.js +68 -68
  68. package/log/logger.js +86 -80
  69. package/main/index.js +56 -56
  70. package/message/childMessage.js +54 -54
  71. package/message/index.js +18 -18
  72. package/old-utils/index.js +91 -91
  73. package/package.json +38 -38
  74. package/ps/index.js +371 -371
  75. package/services/baseContextClass.js +34 -34
  76. package/services/index.js +40 -40
  77. package/socket/httpServer.js +147 -147
  78. package/socket/index.js +81 -81
  79. package/socket/io.js +27 -27
  80. package/socket/ipcServer.js +112 -112
  81. package/socket/socketServer.js +69 -67
  82. package/storage/index.js +38 -38
  83. package/storage/jsondb/adapters/Base.js +23 -23
  84. package/storage/jsondb/adapters/FileSync.js +64 -52
  85. package/storage/jsondb/main.js +55 -42
  86. package/storage/jsondbStorage.js +195 -195
  87. package/storage/sqliteStorage.js +123 -123
  88. package/utils/co.js +237 -237
  89. package/utils/copyto.js +160 -160
  90. package/utils/depd/index.js +538 -538
  91. package/utils/depd/lib/browser/index.js +77 -77
  92. package/utils/extend.js +73 -73
  93. package/utils/get-port/index.d.ts +64 -64
  94. package/utils/get-port/index.js +148 -148
  95. package/utils/helper.js +220 -220
  96. package/utils/index.js +160 -160
  97. package/utils/ip.js +261 -261
  98. package/utils/is.js +145 -145
  99. package/utils/json.js +72 -72
  100. package/utils/pargv.js +263 -263
  101. package/utils/time/index.js +19 -19
  102. package/utils/time/ms.js +162 -162
  103. package/utils/wrap.js +35 -35
@@ -1,186 +1,186 @@
1
- 'use strict';
2
-
3
- const path = require('path');
4
- const electron = require('electron');
5
- const jsonfile = require('jsonfile');
6
- const mkdirp = require('mkdirp');
7
-
8
- module.exports = function (options) {
9
- const app = electron.app || electron.remote.app;
10
- const screen = electron.screen || electron.remote.screen;
11
- let state;
12
- let winRef;
13
- let stateChangeTimer;
14
- const eventHandlingDelay = 100;
15
- const config = Object.assign({
16
- file: 'window-state.json',
17
- path: app.getPath('userData'),
18
- maximize: true,
19
- fullScreen: true
20
- }, options);
21
- const fullStoreFileName = path.join(config.path, config.file);
22
-
23
- function isNormal(win) {
24
- return !win.isMaximized() && !win.isMinimized() && !win.isFullScreen();
25
- }
26
-
27
- function hasBounds() {
28
- return state &&
29
- Number.isInteger(state.x) &&
30
- Number.isInteger(state.y) &&
31
- Number.isInteger(state.width) && state.width > 0 &&
32
- Number.isInteger(state.height) && state.height > 0;
33
- }
34
-
35
- function resetStateToDefault() {
36
- const displayBounds = screen.getPrimaryDisplay().bounds;
37
-
38
- // Reset state to default values on the primary display
39
- state = {
40
- width: config.defaultWidth || 800,
41
- height: config.defaultHeight || 600,
42
- x: 0,
43
- y: 0,
44
- displayBounds
45
- };
46
- }
47
-
48
- function windowWithinBounds(bounds) {
49
- return (
50
- state.x >= bounds.x &&
51
- state.y >= bounds.y &&
52
- state.x + state.width <= bounds.x + bounds.width &&
53
- state.y + state.height <= bounds.y + bounds.height
54
- );
55
- }
56
-
57
- function ensureWindowVisibleOnSomeDisplay() {
58
- const visible = screen.getAllDisplays().some(display => {
59
- return windowWithinBounds(display.bounds);
60
- });
61
-
62
- if (!visible) {
63
- // Window is partially or fully not visible now.
64
- // Reset it to safe defaults.
65
- return resetStateToDefault();
66
- }
67
- }
68
-
69
- function validateState() {
70
- const isValid = state && (hasBounds() || state.isMaximized || state.isFullScreen);
71
- if (!isValid) {
72
- state = null;
73
- return;
74
- }
75
-
76
- if (hasBounds() && state.displayBounds) {
77
- ensureWindowVisibleOnSomeDisplay();
78
- }
79
- }
80
-
81
- function updateState(win) {
82
- win = win || winRef;
83
- if (!win) {
84
- return;
85
- }
86
- // Don't throw an error when window was closed
87
- try {
88
- const winBounds = win.getBounds();
89
- if (isNormal(win)) {
90
- state.x = winBounds.x;
91
- state.y = winBounds.y;
92
- state.width = winBounds.width;
93
- state.height = winBounds.height;
94
- }
95
- state.isMaximized = win.isMaximized();
96
- state.isFullScreen = win.isFullScreen();
97
- state.displayBounds = screen.getDisplayMatching(winBounds).bounds;
98
- } catch (err) {}
99
- }
100
-
101
- function saveState(win) {
102
- // Update window state only if it was provided
103
- if (win) {
104
- updateState(win);
105
- }
106
-
107
- // Save state
108
- try {
109
- mkdirp.sync(path.dirname(fullStoreFileName));
110
- jsonfile.writeFileSync(fullStoreFileName, state);
111
- } catch (err) {
112
- // Don't care
113
- }
114
- }
115
-
116
- function stateChangeHandler() {
117
- // Handles both 'resize' and 'move'
118
- clearTimeout(stateChangeTimer);
119
- stateChangeTimer = setTimeout(updateState, eventHandlingDelay);
120
- }
121
-
122
- function closeHandler() {
123
- updateState();
124
- }
125
-
126
- function closedHandler() {
127
- // Unregister listeners and save state
128
- unmanage();
129
- saveState();
130
- }
131
-
132
- function manage(win) {
133
- if (config.maximize && state.isMaximized) {
134
- win.maximize();
135
- }
136
- if (config.fullScreen && state.isFullScreen) {
137
- win.setFullScreen(true);
138
- }
139
- win.on('resize', stateChangeHandler);
140
- win.on('move', stateChangeHandler);
141
- win.on('close', closeHandler);
142
- win.on('closed', closedHandler);
143
- winRef = win;
144
- }
145
-
146
- function unmanage() {
147
- if (winRef) {
148
- winRef.removeListener('resize', stateChangeHandler);
149
- winRef.removeListener('move', stateChangeHandler);
150
- clearTimeout(stateChangeTimer);
151
- winRef.removeListener('close', closeHandler);
152
- winRef.removeListener('closed', closedHandler);
153
- winRef = null;
154
- }
155
- }
156
-
157
- // Load previous state
158
- try {
159
- state = jsonfile.readFileSync(fullStoreFileName);
160
- } catch (err) {
161
- // Don't care
162
- }
163
-
164
- // Check state validity
165
- validateState();
166
-
167
- // Set state fallback values
168
- state = Object.assign({
169
- width: config.defaultWidth || 800,
170
- height: config.defaultHeight || 600
171
- }, state);
172
-
173
- return {
174
- get x() { return state.x; },
175
- get y() { return state.y; },
176
- get width() { return state.width; },
177
- get height() { return state.height; },
178
- get displayBounds() { return state.displayBounds; },
179
- get isMaximized() { return state.isMaximized; },
180
- get isFullScreen() { return state.isFullScreen; },
181
- saveState,
182
- unmanage,
183
- manage,
184
- resetStateToDefault
185
- };
186
- };
1
+ 'use strict';
2
+
3
+ const path = require('path');
4
+ const electron = require('electron');
5
+ const jsonfile = require('jsonfile');
6
+ const mkdirp = require('mkdirp');
7
+
8
+ module.exports = function (options) {
9
+ const app = electron.app || electron.remote.app;
10
+ const screen = electron.screen || electron.remote.screen;
11
+ let state;
12
+ let winRef;
13
+ let stateChangeTimer;
14
+ const eventHandlingDelay = 100;
15
+ const config = Object.assign({
16
+ file: 'window-state.json',
17
+ path: app.getPath('userData'),
18
+ maximize: true,
19
+ fullScreen: true
20
+ }, options);
21
+ const fullStoreFileName = path.join(config.path, config.file);
22
+
23
+ function isNormal(win) {
24
+ return !win.isMaximized() && !win.isMinimized() && !win.isFullScreen();
25
+ }
26
+
27
+ function hasBounds() {
28
+ return state &&
29
+ Number.isInteger(state.x) &&
30
+ Number.isInteger(state.y) &&
31
+ Number.isInteger(state.width) && state.width > 0 &&
32
+ Number.isInteger(state.height) && state.height > 0;
33
+ }
34
+
35
+ function resetStateToDefault() {
36
+ const displayBounds = screen.getPrimaryDisplay().bounds;
37
+
38
+ // Reset state to default values on the primary display
39
+ state = {
40
+ width: config.defaultWidth || 800,
41
+ height: config.defaultHeight || 600,
42
+ x: 0,
43
+ y: 0,
44
+ displayBounds
45
+ };
46
+ }
47
+
48
+ function windowWithinBounds(bounds) {
49
+ return (
50
+ state.x >= bounds.x &&
51
+ state.y >= bounds.y &&
52
+ state.x + state.width <= bounds.x + bounds.width &&
53
+ state.y + state.height <= bounds.y + bounds.height
54
+ );
55
+ }
56
+
57
+ function ensureWindowVisibleOnSomeDisplay() {
58
+ const visible = screen.getAllDisplays().some(display => {
59
+ return windowWithinBounds(display.bounds);
60
+ });
61
+
62
+ if (!visible) {
63
+ // Window is partially or fully not visible now.
64
+ // Reset it to safe defaults.
65
+ return resetStateToDefault();
66
+ }
67
+ }
68
+
69
+ function validateState() {
70
+ const isValid = state && (hasBounds() || state.isMaximized || state.isFullScreen);
71
+ if (!isValid) {
72
+ state = null;
73
+ return;
74
+ }
75
+
76
+ if (hasBounds() && state.displayBounds) {
77
+ ensureWindowVisibleOnSomeDisplay();
78
+ }
79
+ }
80
+
81
+ function updateState(win) {
82
+ win = win || winRef;
83
+ if (!win) {
84
+ return;
85
+ }
86
+ // Don't throw an error when window was closed
87
+ try {
88
+ const winBounds = win.getBounds();
89
+ if (isNormal(win)) {
90
+ state.x = winBounds.x;
91
+ state.y = winBounds.y;
92
+ state.width = winBounds.width;
93
+ state.height = winBounds.height;
94
+ }
95
+ state.isMaximized = win.isMaximized();
96
+ state.isFullScreen = win.isFullScreen();
97
+ state.displayBounds = screen.getDisplayMatching(winBounds).bounds;
98
+ } catch (err) {}
99
+ }
100
+
101
+ function saveState(win) {
102
+ // Update window state only if it was provided
103
+ if (win) {
104
+ updateState(win);
105
+ }
106
+
107
+ // Save state
108
+ try {
109
+ mkdirp.sync(path.dirname(fullStoreFileName));
110
+ jsonfile.writeFileSync(fullStoreFileName, state);
111
+ } catch (err) {
112
+ // Don't care
113
+ }
114
+ }
115
+
116
+ function stateChangeHandler() {
117
+ // Handles both 'resize' and 'move'
118
+ clearTimeout(stateChangeTimer);
119
+ stateChangeTimer = setTimeout(updateState, eventHandlingDelay);
120
+ }
121
+
122
+ function closeHandler() {
123
+ updateState();
124
+ }
125
+
126
+ function closedHandler() {
127
+ // Unregister listeners and save state
128
+ unmanage();
129
+ saveState();
130
+ }
131
+
132
+ function manage(win) {
133
+ if (config.maximize && state.isMaximized) {
134
+ win.maximize();
135
+ }
136
+ if (config.fullScreen && state.isFullScreen) {
137
+ win.setFullScreen(true);
138
+ }
139
+ win.on('resize', stateChangeHandler);
140
+ win.on('move', stateChangeHandler);
141
+ win.on('close', closeHandler);
142
+ win.on('closed', closedHandler);
143
+ winRef = win;
144
+ }
145
+
146
+ function unmanage() {
147
+ if (winRef) {
148
+ winRef.removeListener('resize', stateChangeHandler);
149
+ winRef.removeListener('move', stateChangeHandler);
150
+ clearTimeout(stateChangeTimer);
151
+ winRef.removeListener('close', closeHandler);
152
+ winRef.removeListener('closed', closedHandler);
153
+ winRef = null;
154
+ }
155
+ }
156
+
157
+ // Load previous state
158
+ try {
159
+ state = jsonfile.readFileSync(fullStoreFileName);
160
+ } catch (err) {
161
+ // Don't care
162
+ }
163
+
164
+ // Check state validity
165
+ validateState();
166
+
167
+ // Set state fallback values
168
+ state = Object.assign({
169
+ width: config.defaultWidth || 800,
170
+ height: config.defaultHeight || 600
171
+ }, state);
172
+
173
+ return {
174
+ get x() { return state.x; },
175
+ get y() { return state.y; },
176
+ get width() { return state.width; },
177
+ get height() { return state.height; },
178
+ get displayBounds() { return state.displayBounds; },
179
+ get isMaximized() { return state.isMaximized; },
180
+ get isFullScreen() { return state.isFullScreen; },
181
+ saveState,
182
+ unmanage,
183
+ manage,
184
+ resetStateToDefault
185
+ };
186
+ };
@@ -1,113 +1,113 @@
1
- const Log = require('../log');
2
- const Ps = require('../ps');
3
- const Conf = require('../config');
4
- const Message = require('../message');
5
-
6
- /**
7
- * 捕获异常
8
- */
9
- exports.start = function() {
10
- this.uncaughtExceptionHandler();
11
- this.unhandledRejectionHandler();
12
- }
13
-
14
- /**
15
- * 当进程上抛出异常而没有被捕获时触发该事件,并且使异常静默。
16
- */
17
- exports.uncaughtExceptionHandler = function() {
18
- process.on('uncaughtException', function(err) {
19
- if (!(err instanceof Error)) {
20
- err = new Error(String(err));
21
- }
22
-
23
- if (err.name === 'Error') {
24
- err.name = 'unhandledExceptionError';
25
- }
26
-
27
- Log.coreLogger.error(err);
28
-
29
- _devError(err);
30
-
31
- _exit();
32
- });
33
- }
34
-
35
- /**
36
- * 当进程上抛出异常而没有被捕获时触发该事件。
37
- */
38
- exports.uncaughtExceptionMonitorHandler = function() {
39
- // process.on('uncaughtExceptionMonitor', function(err, origin) {
40
- // if (!(err instanceof Error)) {
41
- // err = new Error(String(err));
42
- // }
43
-
44
- // Log.coreLogger.error('uncaughtExceptionMonitor:',err);
45
- // });
46
- }
47
-
48
- /**
49
- * 当promise中reject的异常在同步任务中没有使用catch捕获就会触发该事件,
50
- * 即便是在异步情况下使用了catch也会触发该事件
51
- */
52
- exports.unhandledRejectionHandler = function() {
53
- process.on('unhandledRejection', function(err) {
54
- if (!(err instanceof Error)) {
55
- const newError = new Error(String(err));
56
- // err maybe an object, try to copy the name, message and stack to the new error instance
57
- if (err) {
58
- if (err.name) newError.name = err.name;
59
- if (err.message) newError.message = err.message;
60
- if (err.stack) newError.stack = err.stack;
61
- }
62
- err = newError;
63
- }
64
- if (err.name === 'Error') {
65
- err.name = 'unhandledRejectionError';
66
- }
67
-
68
- Log.coreLogger.error(err);
69
-
70
- _devError(err);
71
-
72
- _exit();
73
- });
74
- }
75
-
76
- /**
77
- * 如果是子进程,发送错误到主进程控制台
78
- */
79
- function _devError (err) {
80
- if (Ps.isForkedChild() && Ps.isDev()) {
81
- Message.childMessage.sendErrorToTerminal(err);
82
- }
83
- }
84
-
85
- /**
86
- * 捕获异常后是否退出
87
- */
88
- function _exit () {
89
- let cfg = Conf.getValue('exception');
90
- if (!cfg) {
91
- return;
92
- }
93
-
94
- if (Ps.isMain() && cfg.mainExit == true) {
95
- _delayExit();
96
- } else if (Ps.isForkedChild() && cfg.childExit == true) {
97
- _delayExit();
98
- } else if (Ps.isRenderer() && cfg.rendererExit == true) {
99
- _delayExit();
100
- } else {
101
- // other
102
- }
103
- }
104
-
105
- /**
106
- * 捕获异常后是否退出
107
- */
108
- function _delayExit() {
109
- // 等待日志等异步写入完成
110
- setTimeout(() => {
111
- process.exit();
112
- }, 1500)
1
+ const Log = require('../log');
2
+ const Ps = require('../ps');
3
+ const Conf = require('../config/cache');
4
+ const Message = require('../message');
5
+
6
+ /**
7
+ * 捕获异常
8
+ */
9
+ exports.start = function() {
10
+ this.uncaughtExceptionHandler();
11
+ this.unhandledRejectionHandler();
12
+ }
13
+
14
+ /**
15
+ * 当进程上抛出异常而没有被捕获时触发该事件,并且使异常静默。
16
+ */
17
+ exports.uncaughtExceptionHandler = function() {
18
+ process.on('uncaughtException', function(err) {
19
+ if (!(err instanceof Error)) {
20
+ err = new Error(String(err));
21
+ }
22
+
23
+ if (err.name === 'Error') {
24
+ err.name = 'unhandledExceptionError';
25
+ }
26
+
27
+ Log.coreLogger.error(err);
28
+
29
+ _devError(err);
30
+
31
+ _exit();
32
+ });
33
+ }
34
+
35
+ /**
36
+ * 当进程上抛出异常而没有被捕获时触发该事件。
37
+ */
38
+ exports.uncaughtExceptionMonitorHandler = function() {
39
+ // process.on('uncaughtExceptionMonitor', function(err, origin) {
40
+ // if (!(err instanceof Error)) {
41
+ // err = new Error(String(err));
42
+ // }
43
+
44
+ // Log.coreLogger.error('uncaughtExceptionMonitor:',err);
45
+ // });
46
+ }
47
+
48
+ /**
49
+ * 当promise中reject的异常在同步任务中没有使用catch捕获就会触发该事件,
50
+ * 即便是在异步情况下使用了catch也会触发该事件
51
+ */
52
+ exports.unhandledRejectionHandler = function() {
53
+ process.on('unhandledRejection', function(err) {
54
+ if (!(err instanceof Error)) {
55
+ const newError = new Error(String(err));
56
+ // err maybe an object, try to copy the name, message and stack to the new error instance
57
+ if (err) {
58
+ if (err.name) newError.name = err.name;
59
+ if (err.message) newError.message = err.message;
60
+ if (err.stack) newError.stack = err.stack;
61
+ }
62
+ err = newError;
63
+ }
64
+ if (err.name === 'Error') {
65
+ err.name = 'unhandledRejectionError';
66
+ }
67
+
68
+ Log.coreLogger.error(err);
69
+
70
+ _devError(err);
71
+
72
+ _exit();
73
+ });
74
+ }
75
+
76
+ /**
77
+ * 如果是子进程,发送错误到主进程控制台
78
+ */
79
+ function _devError (err) {
80
+ if (Ps.isForkedChild() && Ps.isDev()) {
81
+ Message.childMessage.sendErrorToTerminal(err);
82
+ }
83
+ }
84
+
85
+ /**
86
+ * 捕获异常后是否退出
87
+ */
88
+ function _exit () {
89
+ let cfg = Conf.getValue('exception');
90
+ if (!cfg) {
91
+ return;
92
+ }
93
+
94
+ if (Ps.isMain() && cfg.mainExit == true) {
95
+ _delayExit();
96
+ } else if (Ps.isForkedChild() && cfg.childExit == true) {
97
+ _delayExit();
98
+ } else if (Ps.isRenderer() && cfg.rendererExit == true) {
99
+ _delayExit();
100
+ } else {
101
+ // other
102
+ }
103
+ }
104
+
105
+ /**
106
+ * 捕获异常后是否退出
107
+ */
108
+ function _delayExit() {
109
+ // 等待日志等异步写入完成
110
+ setTimeout(() => {
111
+ process.exit();
112
+ }, 1500)
113
113
  }