Skip to content

Commit 0a15cc1

Browse files
core: use custom error types
1 parent fbbe1ab commit 0a15cc1

File tree

4 files changed

+41
-33
lines changed

4 files changed

+41
-33
lines changed

lib/common/util.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,16 @@
1414
* limitations under the License.
1515
*/
1616

17-
/*jshint strict:false, noarg:false */
18-
19-
/**
20-
* @private
17+
/*!
2118
* @module common/util
2219
*/
2320

21+
'use strict';
22+
23+
var createErrorClass = require('create-error-class');
2424
var extend = require('extend');
2525
var googleAuth = require('google-auto-auth');
2626
var is = require('is');
27-
var nodeutil = require('util');
2827
var request = require('request').defaults({
2928
pool: {
3029
maxSockets: Infinity
@@ -109,24 +108,25 @@ function noop() {}
109108
util.noop = noop;
110109

111110
/**
112-
* Extend the native Error object.
113-
*
114-
* @constructor
111+
* Custom error type for API errors.
115112
*
116113
* @param {object} errorBody - Error object.
117114
*/
118-
function ApiError(errorBody) {
119-
Error.call(this);
120-
Error.captureStackTrace(this, arguments.callee);
115+
var ApiError = createErrorClass('ApiError', function (errorBody) {
121116
this.errors = errorBody.errors;
122117
this.code = errorBody.code;
123118
this.message = errorBody.message || 'Error during request.';
124119
this.response = errorBody.response;
125-
}
126-
127-
nodeutil.inherits(ApiError, Error);
120+
});
128121

129-
util.ApiError = ApiError;
122+
/**
123+
* Wrap the ApiError constructor so context isn't lost.
124+
*
125+
* @param {object} errorBody - Error object.
126+
*/
127+
util.ApiError = function(errorBody) {
128+
return new ApiError(errorBody);
129+
};
130130

131131
/**
132132
* Uniformly process an API response.

lib/storage/file.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
'use strict';
2222

2323
var concat = require('concat-stream');
24+
var createErrorClass = require('create-error-class');
2425
var crypto = require('crypto');
2526
var duplexify = require('duplexify');
2627
var format = require('string-format-obj');
@@ -46,6 +47,16 @@ var Acl = require('./acl.js');
4647
*/
4748
var util = require('../common/util.js');
4849

50+
/**
51+
* Custom error type for errors related to getting signed errors and policies.
52+
*
53+
* @param {string} message - Custom error message.
54+
* @return {Error}
55+
*/
56+
var SigningError = createErrorClass('SigningError', function(message) {
57+
this.message = message;
58+
});
59+
4960
/**
5061
* @const {string}
5162
* @private
@@ -1066,19 +1077,17 @@ File.prototype.getSignedPolicy = function(options, callback) {
10661077

10671078
makeAuthenticatedRequest_.getCredentials(function(err, credentials) {
10681079
if (err) {
1069-
var signingError = new Error('Signing failed. See `error` property.');
1070-
signingError.error = err;
1071-
callback(signingError);
1080+
callback(new SigningError(err.message));
10721081
return;
10731082
}
10741083

10751084
if (!credentials.private_key) {
10761085
var errorMessage = [
1077-
'Signing failed. Could not find a `private_key`.',
1086+
'Could not find a `private_key`.',
10781087
'Please verify you are authorized with this property available.'
10791088
].join(' ');
10801089

1081-
callback(new Error(errorMessage));
1090+
callback(new SigningError(errorMessage));
10821091
return;
10831092
}
10841093

@@ -1197,19 +1206,17 @@ File.prototype.getSignedUrl = function(options, callback) {
11971206

11981207
makeAuthenticatedRequest_.getCredentials(function(err, credentials) {
11991208
if (err) {
1200-
var signingError = new Error('Signing failed. See `error` property.');
1201-
signingError.error = err;
1202-
callback(signingError);
1209+
callback(new SigningError(err.message));
12031210
return;
12041211
}
12051212

12061213
if (!credentials.private_key || !credentials.client_email) {
12071214
var errorMessage = [
1208-
'Signing failed. Could not find a `private_key` or `client_email`.',
1215+
'Could not find a `private_key` or `client_email`.',
12091216
'Please verify you are authorized with these credentials available.'
12101217
].join(' ');
12111218

1212-
callback(new Error(errorMessage));
1219+
callback(new SigningError(errorMessage));
12131220
return;
12141221
}
12151222

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"arrify": "^1.0.0",
5252
"async": "^0.9.0",
5353
"concat-stream": "^1.5.0",
54+
"create-error-class": "^2.0.1",
5455
"dns-zonefile": "0.1.9",
5556
"duplexify": "^3.2.0",
5657
"extend": "^2.0.0",

test/storage/file.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1499,9 +1499,8 @@ describe('File', function() {
14991499
file.getSignedPolicy({
15001500
expires: Date.now() + 5
15011501
}, function(err) {
1502-
var errorMessage = 'Signing failed. See `error` property.';
1503-
assert.strictEqual(err.message, errorMessage);
1504-
assert.strictEqual(err.error, error);
1502+
assert.strictEqual(err.name, 'SigningError');
1503+
assert.strictEqual(err.message, error.message);
15051504
done();
15061505
});
15071506
});
@@ -1516,10 +1515,11 @@ describe('File', function() {
15161515
expires: Date.now() + 5
15171516
}, function(err) {
15181517
var errorMessage = [
1519-
'Signing failed. Could not find a `private_key`.',
1518+
'Could not find a `private_key`.',
15201519
'Please verify you are authorized with this property available.'
15211520
].join(' ');
15221521

1522+
assert.strictEqual(err.name, 'SigningError');
15231523
assert.strictEqual(err.message, errorMessage);
15241524
done();
15251525
});
@@ -1789,9 +1789,8 @@ describe('File', function() {
17891789
action: 'read',
17901790
expires: Date.now() + 5
17911791
}, function(err) {
1792-
var errorMessage = 'Signing failed. See `error` property.';
1793-
assert.strictEqual(err.message, errorMessage);
1794-
assert.strictEqual(err.error, error);
1792+
assert.strictEqual(err.name, 'SigningError');
1793+
assert.strictEqual(err.message, error.message);
17951794
done();
17961795
});
17971796
});
@@ -1807,10 +1806,11 @@ describe('File', function() {
18071806
expires: Date.now() + 5
18081807
}, function(err) {
18091808
var errorMessage = [
1810-
'Signing failed. Could not find a `private_key` or `client_email`.',
1809+
'Could not find a `private_key` or `client_email`.',
18111810
'Please verify you are authorized with these credentials available.'
18121811
].join(' ');
18131812

1813+
assert.strictEqual(err.name, 'SigningError');
18141814
assert.strictEqual(err.message, errorMessage);
18151815
done();
18161816
});

0 commit comments

Comments
 (0)