ee-core 2.9.2-beta.1 → 2.10.0
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.
- package/LICENSE +21 -21
- package/README.md +65 -65
- package/addon/index.js +34 -34
- package/addon/window/index.js +98 -98
- package/bin/tools.js +8 -8
- package/config/cache.js +41 -38
- package/config/config.default.js +331 -330
- package/config/index.js +75 -73
- package/const/channel.js +17 -17
- package/const/index.js +8 -8
- package/controller/baseContextClass.js +34 -34
- package/controller/index.js +34 -34
- package/core/index.js +10 -10
- package/core/lib/ee.js +216 -216
- package/core/lib/loader/context_loader.js +106 -106
- package/core/lib/loader/ee_loader.js +435 -435
- package/core/lib/loader/file_loader.js +326 -326
- package/core/lib/loader/mixin/addon.js +32 -32
- package/core/lib/loader/mixin/config.js +130 -130
- package/core/lib/loader/mixin/controller.js +125 -125
- package/core/lib/loader/mixin/service.js +28 -28
- package/core/lib/utils/base_context_class.js +34 -34
- package/core/lib/utils/function.js +30 -30
- package/core/lib/utils/index.js +133 -133
- package/core/lib/utils/sequencify.js +59 -59
- package/core/lib/utils/timing.js +77 -77
- package/cross/index.js +183 -183
- package/cross/spawnProcess.js +183 -183
- package/ee/appLoader.js +48 -48
- package/ee/application.js +99 -99
- package/ee/baseApp.js +103 -102
- package/ee/eeApp.js +408 -408
- package/ee/index.js +57 -57
- package/electron/app/index.js +64 -58
- package/electron/index.js +19 -19
- package/electron/window/index.js +73 -73
- package/electron/window/winState.js +186 -186
- package/exception/index.js +112 -112
- package/html/boot.html +98 -98
- package/html/cross-failure.html +28 -28
- package/html/failure.html +28 -28
- package/html/index.js +13 -13
- package/httpclient/index.js +161 -161
- package/index.js +54 -54
- package/jobs/baseJobClass.js +16 -16
- package/jobs/child/app.js +65 -65
- package/jobs/child/forkProcess.js +145 -145
- package/jobs/child/index.js +82 -82
- package/jobs/child-pool/index.js +213 -213
- package/jobs/index.js +8 -8
- package/jobs/load-balancer/algorithm/index.js +11 -11
- package/jobs/load-balancer/algorithm/minimumConnection.js +18 -18
- package/jobs/load-balancer/algorithm/polling.js +11 -11
- package/jobs/load-balancer/algorithm/random.js +9 -9
- package/jobs/load-balancer/algorithm/specify.js +14 -14
- package/jobs/load-balancer/algorithm/weights.js +21 -21
- package/jobs/load-balancer/algorithm/weightsMinimumConnection.js +29 -29
- package/jobs/load-balancer/algorithm/weightsPolling.js +22 -22
- package/jobs/load-balancer/algorithm/weightsRandom.js +16 -16
- package/jobs/load-balancer/consts.js +9 -9
- package/jobs/load-balancer/index.js +201 -201
- package/jobs/load-balancer/scheduler.js +31 -31
- package/jobs/renderer/index.js +141 -141
- package/jobs/renderer/loadView.js +40 -40
- package/jobs/unification.js +63 -63
- package/loader/index.js +172 -172
- package/log/index.js +68 -68
- package/log/logger.js +86 -80
- package/main/index.js +56 -56
- package/message/childMessage.js +54 -54
- package/message/index.js +18 -18
- package/old-utils/index.js +91 -91
- package/package.json +38 -38
- package/ps/index.js +371 -371
- package/services/baseContextClass.js +34 -34
- package/services/index.js +40 -40
- package/socket/httpServer.js +147 -147
- package/socket/index.js +81 -81
- package/socket/io.js +27 -27
- package/socket/ipcServer.js +112 -112
- package/socket/socketServer.js +69 -65
- package/storage/index.js +38 -38
- package/storage/jsondb/adapters/Base.js +23 -23
- package/storage/jsondb/adapters/FileSync.js +64 -52
- package/storage/jsondb/main.js +55 -42
- package/storage/jsondbStorage.js +195 -195
- package/storage/sqliteStorage.js +123 -123
- package/utils/co.js +237 -237
- package/utils/copyto.js +160 -160
- package/utils/depd/index.js +538 -538
- package/utils/depd/lib/browser/index.js +77 -77
- package/utils/extend.js +73 -73
- package/utils/get-port/index.d.ts +64 -64
- package/utils/get-port/index.js +148 -148
- package/utils/helper.js +220 -220
- package/utils/index.js +160 -160
- package/utils/ip.js +261 -261
- package/utils/is.js +145 -145
- package/utils/json.js +72 -72
- package/utils/pargv.js +263 -263
- package/utils/time/index.js +19 -19
- package/utils/time/ms.js +162 -162
- 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
|
+
};
|
package/exception/index.js
CHANGED
|
@@ -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
|
}
|