Turn errors from scripts and extensions into faults
This commit is contained in:
1 parent
7ac94a5304
commit
9f85ead558
8 files changed
+254
-105
No files matched your search
+22
-6
@@ -204,6 +204,22 @@ Object.defineProperty(sandbox.context, 'commit', {value: commit});
|
||||
Object.defineProperty(sandbox.context, 'ext', {value: ext});
|
||||
|
||||
|
||||
function errorToFault(err) {
|
||||
if (!err)
|
||||
return null;
|
||||
|
||||
return {
|
||||
code: `script.${err.name}`,
|
||||
message: err.message,
|
||||
detail: {
|
||||
name: err.name,
|
||||
message: err.message,
|
||||
stack: err.stack
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function run(script, globals, timestamp, deviceData, extensionsCache, startRevision, maxRevision, callback) {
|
||||
sandbox.timestamp = timestamp;
|
||||
sandbox.deviceData = deviceData;
|
||||
@@ -233,7 +249,7 @@ function run(script, globals, timestamp, deviceData, extensionsCache, startRevis
|
||||
else if (err === EXT)
|
||||
status = 2;
|
||||
else
|
||||
return callback(err);
|
||||
return callback(null, errorToFault(err));
|
||||
}
|
||||
|
||||
let ext = sandbox.extensions;
|
||||
@@ -245,17 +261,17 @@ function run(script, globals, timestamp, deviceData, extensionsCache, startRevis
|
||||
let counter = 1;
|
||||
for (let key in sandbox.extensions) {
|
||||
++ counter;
|
||||
extensions.run(sandbox.extensions[key], function(err, res) {
|
||||
if (err && counter > 0) {
|
||||
extensions.run(sandbox.extensions[key], function(err, fault, res) {
|
||||
if ((err || fault) && counter > 0) {
|
||||
counter = 0;
|
||||
return callback(err);
|
||||
return callback(err, fault);
|
||||
}
|
||||
extCache[key] = res;
|
||||
if (-- counter === 0)
|
||||
if (status === 2)
|
||||
return run.apply(null, args);
|
||||
else
|
||||
return callback(null, clr, decs, status === 0, ret);
|
||||
return callback(null, null, clr, decs, status === 0, ret);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -263,7 +279,7 @@ function run(script, globals, timestamp, deviceData, extensionsCache, startRevis
|
||||
if (status === 2)
|
||||
return run.apply(null, args);
|
||||
else
|
||||
return callback(null, clr, decs, status === 0, ret);
|
||||
return callback(null, null, clr, decs, status === 0, ret);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user