This repository was archived by the owner on Nov 19, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy patherrors.coffee
More file actions
54 lines (41 loc) · 1.3 KB
/
errors.coffee
File metadata and controls
54 lines (41 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
exports.ApiError = class ApiError extends Error
createErrorClass = (name, classOptions = {}) ->
classOptions.message ||= "Unknown error"
classOptions.httpCode ||= 500
classOptions.initialize ||= (message, options = {}) ->
@message = message if message
@[prop] = val for prop, val of options
classOptions.toJSON ||= ->
error: @message
class extends ApiError
@::[prop] = val for prop, val of classOptions
constructor: ->
Error.call(@)
Error.captureStackTrace(@, arguments.callee)
@name = name
@initialize(arguments...)
errorTypes =
ResourceExists:
httpCode: 400
message: "Resource exists"
DatabaseError:
httpCode: 400
message: "Database error"
initialize: (err) -> console.error("[ERR] #{@message}", err, err.stack)
InvalidBody:
httpCode: 400
message: "Invalid payload"
initialize: (err) -> @invalid = err.message
toJSON: ->
message: @message
invalid: @invalid
NotFound:
message: "Not Found"
httpCode: 404
PermissionDenied:
message: "Permission denied"
httpCode: 404
ImpossibleError:
message: "Impossibru"
initialize: (err) -> console.error("[ERR] #{@message}", err)
exports[name] = createErrorClass(name, errDef) for name, errDef of errorTypes