rollbar 2.26.2 → 2.26.4

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 (117) hide show
  1. package/.github/workflows/ci.yml +32 -10
  2. package/.lgtm.yml +7 -7
  3. package/.prettierignore +18 -0
  4. package/.vscode/settings.json +39 -0
  5. package/CHANGELOG.md +121 -35
  6. package/Gruntfile.js +51 -71
  7. package/README.md +2 -4
  8. package/bower.json +1 -3
  9. package/defaults.js +17 -5
  10. package/dist/plugins/jquery.min.js +1 -1
  11. package/dist/rollbar.js +5699 -5052
  12. package/dist/rollbar.js.map +1 -1
  13. package/dist/rollbar.min.js +1 -1
  14. package/dist/rollbar.min.js.map +1 -1
  15. package/dist/rollbar.named-amd.js +5704 -5062
  16. package/dist/rollbar.named-amd.js.map +1 -1
  17. package/dist/rollbar.named-amd.min.js +1 -1
  18. package/dist/rollbar.named-amd.min.js.map +1 -1
  19. package/dist/rollbar.noconflict.umd.js +5693 -5052
  20. package/dist/rollbar.noconflict.umd.js.map +1 -1
  21. package/dist/rollbar.noconflict.umd.min.js +1 -1
  22. package/dist/rollbar.noconflict.umd.min.js.map +1 -1
  23. package/dist/rollbar.snippet.js +1 -1
  24. package/dist/rollbar.umd.js +5704 -5063
  25. package/dist/rollbar.umd.js.map +1 -1
  26. package/dist/rollbar.umd.min.js +1 -1
  27. package/dist/rollbar.umd.min.js.map +1 -1
  28. package/docs/extension-exceptions.md +35 -30
  29. package/docs/migration_v0_to_v1.md +41 -38
  30. package/index.d.ts +270 -231
  31. package/karma.conf.js +16 -34
  32. package/package.json +21 -17
  33. package/prettier.config.js +7 -0
  34. package/src/api.js +21 -10
  35. package/src/apiUtility.js +12 -8
  36. package/src/browser/core.js +103 -65
  37. package/src/browser/defaults/scrubFields.js +3 -3
  38. package/src/browser/detection.js +7 -8
  39. package/src/browser/domUtility.js +18 -8
  40. package/src/browser/globalSetup.js +12 -6
  41. package/src/browser/logger.js +1 -1
  42. package/src/browser/plugins/jquery.js +35 -35
  43. package/src/browser/predicates.js +1 -1
  44. package/src/browser/rollbar.js +1 -1
  45. package/src/browser/rollbarWrapper.js +8 -5
  46. package/src/browser/shim.js +43 -19
  47. package/src/browser/snippet_callback.js +6 -4
  48. package/src/browser/telemetry.js +573 -354
  49. package/src/browser/transforms.js +46 -27
  50. package/src/browser/transport/fetch.js +16 -14
  51. package/src/browser/transport/xhr.js +29 -13
  52. package/src/browser/transport.js +82 -25
  53. package/src/browser/url.js +16 -8
  54. package/src/browser/wrapGlobals.js +27 -8
  55. package/src/defaults.js +3 -3
  56. package/src/errorParser.js +14 -11
  57. package/src/merge.js +32 -23
  58. package/src/notifier.js +16 -13
  59. package/src/predicates.js +43 -23
  60. package/src/queue.js +71 -39
  61. package/src/rateLimiter.js +59 -18
  62. package/src/react-native/logger.js +1 -1
  63. package/src/react-native/rollbar.js +59 -55
  64. package/src/react-native/transforms.js +13 -9
  65. package/src/react-native/transport.js +44 -34
  66. package/src/rollbar.js +22 -13
  67. package/src/scrub.js +0 -1
  68. package/src/server/locals.js +69 -39
  69. package/src/server/logger.js +4 -4
  70. package/src/server/parser.js +72 -47
  71. package/src/server/rollbar.js +133 -55
  72. package/src/server/sourceMap/stackTrace.js +33 -18
  73. package/src/server/telemetry/urlHelpers.js +9 -11
  74. package/src/server/telemetry.js +68 -45
  75. package/src/server/transforms.js +37 -21
  76. package/src/server/transport.js +62 -32
  77. package/src/telemetry.js +92 -28
  78. package/src/transforms.js +33 -21
  79. package/src/truncation.js +8 -5
  80. package/src/utility/headers.js +43 -43
  81. package/src/utility/replace.js +9 -0
  82. package/src/utility/traverse.js +1 -1
  83. package/src/utility.js +89 -52
  84. package/test/api.test.js +31 -29
  85. package/test/apiUtility.test.js +43 -44
  86. package/test/browser.core.test.js +141 -131
  87. package/test/browser.domUtility.test.js +52 -35
  88. package/test/browser.predicates.test.js +13 -13
  89. package/test/browser.rollbar.test.js +597 -503
  90. package/test/browser.telemetry.test.js +76 -0
  91. package/test/browser.transforms.test.js +146 -128
  92. package/test/browser.transport.test.js +54 -46
  93. package/test/browser.url.test.js +12 -11
  94. package/test/fixtures/locals.fixtures.js +245 -126
  95. package/test/notifier.test.js +90 -78
  96. package/test/predicates.test.js +260 -214
  97. package/test/queue.test.js +230 -214
  98. package/test/rateLimiter.test.js +50 -42
  99. package/test/react-native.rollbar.test.js +149 -115
  100. package/test/react-native.transforms.test.js +21 -23
  101. package/test/react-native.transport.test.js +23 -11
  102. package/test/server.lambda.test.js +70 -53
  103. package/test/server.locals.test.js +437 -210
  104. package/test/server.parser.test.js +32 -26
  105. package/test/server.predicates.test.js +45 -43
  106. package/test/server.rollbar.test.js +311 -259
  107. package/test/server.telemetry.test.js +208 -83
  108. package/test/server.transforms.test.js +455 -361
  109. package/test/server.transport.test.js +144 -76
  110. package/test/telemetry.test.js +46 -37
  111. package/test/transforms.test.js +68 -66
  112. package/test/truncation.test.js +55 -53
  113. package/test/utility.test.js +266 -222
  114. package/webpack.config.js +46 -43
  115. package/.gitmodules +0 -3
  116. package/browserstack.browsers.js +0 -153
  117. package/browserstack.browsers.json +0 -4384
@@ -19,42 +19,46 @@ const ValidOpenTracingTracerStub = {
19
19
  context: () => {
20
20
  return {
21
21
  toTraceId: () => DUMMY_TRACE_ID,
22
- toSpanId: () => DUMMY_SPAN_ID
23
- }
24
- }
25
- }
26
- }
27
- }
28
- }
22
+ toSpanId: () => DUMMY_SPAN_ID,
23
+ };
24
+ },
25
+ };
26
+ },
27
+ };
28
+ },
29
29
  };
30
30
 
31
31
  const InvalidOpenTracingTracerStub = {
32
- foo: () => {}
32
+ foo: () => {},
33
33
  };
34
34
 
35
35
  function TestClientGen() {
36
36
  var TestClient = function () {
37
37
  this.notifier = {
38
- addTransform: function() { return this; }
38
+ addTransform: function () {
39
+ return this;
40
+ },
39
41
  };
40
42
  this.queue = {
41
- addPredicate: function() { return this; }
43
+ addPredicate: function () {
44
+ return this;
45
+ },
42
46
  };
43
47
  this.logCalls = [];
44
48
  var logs = 'log,debug,info,warn,warning,error,critical'.split(',');
45
- for(var i=0, len=logs.length; i < len; i++) {
49
+ for (var i = 0, len = logs.length; i < len; i++) {
46
50
  var fn = logs[i].slice(0);
47
- this[fn] = function(fn, item) {
48
- this.logCalls.push({func: fn, item: item});
49
- }.bind(this, fn)
51
+ this[fn] = function (fn, item) {
52
+ this.logCalls.push({ func: fn, item: item });
53
+ }.bind(this, fn);
50
54
  }
51
- this.buildJsonPayload = function(obj) {
52
- this.logCalls.push({item: obj});
55
+ this.buildJsonPayload = function (obj) {
56
+ this.logCalls.push({ item: obj });
53
57
  };
54
- this.sendJsonPayload = function(json) {
55
- this.logCalls.push({item: json});
58
+ this.sendJsonPayload = function (json) {
59
+ this.logCalls.push({ item: json });
56
60
  };
57
- this.clearLogCalls = function() {
61
+ this.clearLogCalls = function () {
58
62
  this.logCalls = [];
59
63
  };
60
64
  this.tracer = ValidOpenTracingTracerStub;
@@ -64,7 +68,7 @@ function TestClientGen() {
64
68
  }
65
69
 
66
70
  async function wait(ms) {
67
- return new Promise(resolve => {
71
+ return new Promise((resolve) => {
68
72
  setTimeout(resolve, ms);
69
73
  });
70
74
  }
@@ -83,190 +87,223 @@ async function nodeThrow(rollbar, callback) {
83
87
  callback(rollbar);
84
88
  }
85
89
 
86
- vows.describe('rollbar')
90
+ vows
91
+ .describe('rollbar')
87
92
  .addBatch({
88
- 'constructor': {
93
+ constructor: {
89
94
  'with accessToken': {
90
- topic: function() {
95
+ topic: function () {
91
96
  return new Rollbar('abc123');
92
97
  },
93
- 'should have log method': function(r) {
98
+ 'should have log method': function (r) {
94
99
  assert.isFunction(r.log);
95
100
  },
96
- 'should have error method': function(r) {
101
+ 'should have error method': function (r) {
97
102
  assert.isFunction(r.error);
98
103
  },
99
- 'should have buildJsonPayload method': function(r) {
104
+ 'should have buildJsonPayload method': function (r) {
100
105
  assert.isFunction(r.buildJsonPayload);
101
106
  },
102
- 'should have sendJsonPayload method': function(r) {
107
+ 'should have sendJsonPayload method': function (r) {
103
108
  assert.isFunction(r.sendJsonPayload);
104
109
  },
105
- 'should have accessToken in options': function(r) {
110
+ 'should have accessToken in options': function (r) {
106
111
  assert.equal('abc123', r.options.accessToken);
107
- }
112
+ },
108
113
  },
109
114
  'with options': {
110
- topic: function() {
111
- return new Rollbar({accessToken: 'abc123'});
115
+ topic: function () {
116
+ return new Rollbar({ accessToken: 'abc123' });
112
117
  },
113
- 'should have log method': function(r) {
118
+ 'should have log method': function (r) {
114
119
  assert.isFunction(r.log);
115
120
  },
116
- 'should have error method': function(r) {
121
+ 'should have error method': function (r) {
117
122
  assert.isFunction(r.error);
118
123
  },
119
- 'should have accessToken in options': function(r) {
124
+ 'should have accessToken in options': function (r) {
120
125
  assert.equal('abc123', r.options.accessToken);
121
126
  },
122
- 'should set environment based on default': function(r) {
127
+ 'should set environment based on default': function (r) {
123
128
  assert.equal(process.env.NODE_ENV, r.options.environment);
124
- }
129
+ },
125
130
  },
126
131
  'with more options': {
127
- topic: function() {
128
- return new Rollbar({accessToken: 'abc123', environment: 'fake-env'});
132
+ topic: function () {
133
+ return new Rollbar({
134
+ accessToken: 'abc123',
135
+ environment: 'fake-env',
136
+ });
129
137
  },
130
- 'should have log method': function(r) {
138
+ 'should have log method': function (r) {
131
139
  assert.isFunction(r.log);
132
140
  },
133
- 'should have error method': function(r) {
141
+ 'should have error method': function (r) {
134
142
  assert.isFunction(r.error);
135
143
  },
136
- 'should have accessToken in options': function(r) {
144
+ 'should have accessToken in options': function (r) {
137
145
  assert.equal('abc123', r.options.accessToken);
138
146
  },
139
- 'should set environment based on options': function(r) {
147
+ 'should set environment based on options': function (r) {
140
148
  assert.equal('fake-env', r.options.environment);
141
149
  },
142
- 'should set configured options': function(r) {
150
+ 'should set configured options': function (r) {
143
151
  assert.equal('fake-env', r.options._configuredOptions.environment);
144
- }
152
+ },
145
153
  },
146
154
  'with deprecated options': {
147
- topic: function() {
155
+ topic: function () {
148
156
  return new Rollbar({
149
157
  hostWhiteList: ['foo'],
150
- hostBlackList: ['bar']
158
+ hostBlackList: ['bar'],
151
159
  });
152
160
  },
153
- 'should replace options': function(r) {
161
+ 'should replace options': function (r) {
154
162
  assert.equal(r.options.hostWhiteList, undefined);
155
163
  assert.equal(r.options.hostBlackList, undefined);
156
164
  assert.equal(r.options.hostSafeList, 'foo');
157
165
  assert.equal(r.options.hostBlockList, 'bar');
158
- }
166
+ },
159
167
  },
160
168
  'with valid tracer': {
161
169
  topic: function () {
162
- var rollbar = new Rollbar({ captureUncaught: true, environment: 'fake-env', tracer: ValidOpenTracingTracerStub });
170
+ var rollbar = new Rollbar({
171
+ captureUncaught: true,
172
+ environment: 'fake-env',
173
+ tracer: ValidOpenTracingTracerStub,
174
+ });
163
175
  return rollbar;
164
176
  },
165
177
  'should configure tracer': function (r) {
166
178
  assert.ok(typeof r.client.tracer === 'object');
167
- }
179
+ },
168
180
  },
169
181
  'with invalid tracer': {
170
182
  topic: function () {
171
- var rollbar = new Rollbar({ captureUncaught: true, environment: 'fake-env', tracer: InvalidOpenTracingTracerStub });
183
+ var rollbar = new Rollbar({
184
+ captureUncaught: true,
185
+ environment: 'fake-env',
186
+ tracer: InvalidOpenTracingTracerStub,
187
+ });
172
188
  return rollbar;
173
189
  },
174
190
  'should configure tracer': function (r) {
175
191
  assert.equal(null, r.client.tracer);
176
- }
177
- }
192
+ },
193
+ },
178
194
  },
179
- 'configure': {
195
+ configure: {
180
196
  'with updated options': {
181
- topic: function() {
182
- var rollbar = new Rollbar({captureUncaught: true, environment: 'fake-env'});
183
- rollbar.configure({captureUncaught: false, environment: 'new-env'});
197
+ topic: function () {
198
+ var rollbar = new Rollbar({
199
+ captureUncaught: true,
200
+ environment: 'fake-env',
201
+ });
202
+ rollbar.configure({ captureUncaught: false, environment: 'new-env' });
184
203
  return rollbar;
185
204
  },
186
- 'should set configured options': function(r) {
205
+ 'should set configured options': function (r) {
187
206
  assert.equal('new-env', r.options._configuredOptions.environment);
188
207
  assert.equal(false, r.options._configuredOptions.captureUncaught);
189
- }
208
+ },
190
209
  },
191
210
  'with deprecated options': {
192
- topic: function() {
211
+ topic: function () {
193
212
  var rollbar = new Rollbar({ captureUncaught: true });
194
213
  rollbar.configure({
195
214
  hostWhiteList: ['foo'],
196
- hostBlackList: ['bar']
215
+ hostBlackList: ['bar'],
197
216
  });
198
217
  return rollbar;
199
218
  },
200
- 'should replace options': function(r) {
219
+ 'should replace options': function (r) {
201
220
  assert.equal(r.options.hostWhiteList, undefined);
202
221
  assert.equal(r.options.hostBlackList, undefined);
203
222
  assert.equal(r.options.hostSafeList, 'foo');
204
223
  assert.equal(r.options.hostBlockList, 'bar');
205
- }
224
+ },
206
225
  },
207
226
  'with valid tracer': {
208
- topic: function() {
209
- var rollbar = new Rollbar({ captureUncaught: true, environment: 'fake-env' });
227
+ topic: function () {
228
+ var rollbar = new Rollbar({
229
+ captureUncaught: true,
230
+ environment: 'fake-env',
231
+ });
210
232
  rollbar.configure({ tracer: ValidOpenTracingTracerStub });
211
233
  return rollbar;
212
234
  },
213
- 'should configure tracer': function(r) {
235
+ 'should configure tracer': function (r) {
214
236
  assert.equal(ValidOpenTracingTracerStub, r.client.tracer);
215
- }
237
+ },
216
238
  },
217
239
  'with invalid tracer': {
218
- topic: function() {
219
- var rollbar = new Rollbar({ captureUncaught: true, environment: 'fake-env' });
240
+ topic: function () {
241
+ var rollbar = new Rollbar({
242
+ captureUncaught: true,
243
+ environment: 'fake-env',
244
+ });
220
245
  rollbar.configure({ tracer: InvalidOpenTracingTracerStub });
221
246
  return rollbar;
222
247
  },
223
- 'should configure tracer': function(r) {
248
+ 'should configure tracer': function (r) {
224
249
  assert.equal(null, r.client.tracer);
225
- }
226
- }
250
+ },
251
+ },
227
252
  },
228
- 'addTracingInfo': {
253
+ addTracingInfo: {
229
254
  'with valid tracer': {
230
- topic: function() {
231
- var rollbar = new Rollbar({ captureUncaught: true, environment: 'fake-env', tracer: ValidOpenTracingTracerStub });
255
+ topic: function () {
256
+ var rollbar = new Rollbar({
257
+ captureUncaught: true,
258
+ environment: 'fake-env',
259
+ tracer: ValidOpenTracingTracerStub,
260
+ });
232
261
  return rollbar;
233
262
  },
234
- 'should add trace ID and span ID to custom field on item if no custom field set': function (r) {
235
- const item = { uuid: 'some-uuid', custom: null };
236
- r.client._addTracingInfo(item);
237
- assert.equal(DUMMY_TRACE_ID, item.custom.opentracing_trace_id);
238
- assert.equal(DUMMY_SPAN_ID, item.custom.opentracing_span_id);
239
- },
240
- 'should add trace ID and span ID to custom field on item even if already has some custom fields': function(r) {
241
- const item = { uuid: 'some-uuid', custom: { foo: 'foo' } };
242
- r.client._addTracingInfo(item);
243
- assert.equal(DUMMY_TRACE_ID, item.custom.opentracing_trace_id);
244
- assert.equal(DUMMY_SPAN_ID, item.custom.opentracing_span_id);
245
- assert.equal('foo', item.custom.foo);
246
- }
263
+ 'should add trace ID and span ID to custom field on item if no custom field set':
264
+ function (r) {
265
+ const item = { uuid: 'some-uuid', custom: null };
266
+ r.client._addTracingInfo(item);
267
+ assert.equal(DUMMY_TRACE_ID, item.custom.opentracing_trace_id);
268
+ assert.equal(DUMMY_SPAN_ID, item.custom.opentracing_span_id);
269
+ },
270
+ 'should add trace ID and span ID to custom field on item even if already has some custom fields':
271
+ function (r) {
272
+ const item = { uuid: 'some-uuid', custom: { foo: 'foo' } };
273
+ r.client._addTracingInfo(item);
274
+ assert.equal(DUMMY_TRACE_ID, item.custom.opentracing_trace_id);
275
+ assert.equal(DUMMY_SPAN_ID, item.custom.opentracing_span_id);
276
+ assert.equal('foo', item.custom.foo);
277
+ },
247
278
  },
248
279
  'with invalid tracer': {
249
- topic: function() {
250
- var rollbar = new Rollbar({ captureUncaught: true, environment: 'fake-env', tracer: InvalidOpenTracingTracerStub });
280
+ topic: function () {
281
+ var rollbar = new Rollbar({
282
+ captureUncaught: true,
283
+ environment: 'fake-env',
284
+ tracer: InvalidOpenTracingTracerStub,
285
+ });
251
286
  return rollbar;
252
287
  },
253
- 'should add trace ID and span ID to custom field on item': function (r) {
288
+ 'should add trace ID and span ID to custom field on item': function (
289
+ r,
290
+ ) {
254
291
  const item = { uuid: 'some-uuid', custom: {} };
255
292
  r.client._addTracingInfo(item);
256
293
  assert.equal(undefined, item.custom.opentracing_trace_id);
257
294
  assert.equal(undefined, item.custom.opentracing_span_id);
258
- }
295
+ },
259
296
  },
260
297
  },
261
- 'log': {
262
- topic: function() {
298
+ log: {
299
+ topic: function () {
263
300
  var client = new (TestClientGen())();
264
301
  var rollbar = new Rollbar({ accessToken: 'abc123' }, client);
265
302
  return rollbar;
266
303
  },
267
- 'message': {
304
+ message: {
268
305
  'with unordered options': {
269
- 'should work with custom, request, callback, message ': function(r) {
306
+ 'should work with custom, request, callback, message ': function (r) {
270
307
  var message = 'hello';
271
308
  var callbackCalled = false;
272
309
  var callback = function cb() {
@@ -281,17 +318,17 @@ vows.describe('rollbar')
281
318
  assert.deepStrictEqual(item.custom, custom);
282
319
  item.callback();
283
320
  assert.isTrue(callbackCalled);
284
- }
321
+ },
285
322
  },
286
323
  'with old option ordering': {
287
- 'should work': function(r) {
288
- var message = 'hello'
289
- r.log(message)
290
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
291
- assert.equal(item.message, message)
324
+ 'should work': function (r) {
325
+ var message = 'hello';
326
+ r.log(message);
327
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
328
+ assert.equal(item.message, message);
292
329
  },
293
- 'should work with callback': function(r) {
294
- var message = 'hello'
330
+ 'should work with callback': function (r) {
331
+ var message = 'hello';
295
332
  var callbackCalled = false;
296
333
  var callback = function cb() {
297
334
  callbackCalled = true;
@@ -302,197 +339,205 @@ vows.describe('rollbar')
302
339
  item.callback();
303
340
  assert.isTrue(callbackCalled);
304
341
  },
305
- 'should work with request': function(r) {
306
- var message = 'hello'
307
- var request = { method: 'GET' }
308
- r.log(message, request)
309
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
310
- assert.equal(item.message, message)
311
- assert.equal(item.request, request)
342
+ 'should work with request': function (r) {
343
+ var message = 'hello';
344
+ var request = { method: 'GET' };
345
+ r.log(message, request);
346
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
347
+ assert.equal(item.message, message);
348
+ assert.equal(item.request, request);
312
349
  },
313
- 'should work with request and callback': function(r) {
314
- var message = 'hello'
315
- var request = { method: 'GET' }
350
+ 'should work with request and callback': function (r) {
351
+ var message = 'hello';
352
+ var request = { method: 'GET' };
316
353
  var callbackCalled = false;
317
354
  var callback = function cb() {
318
355
  callbackCalled = true;
319
356
  };
320
- r.log(message, request, callback)
321
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
322
- assert.equal(item.message, message)
323
- assert.equal(item.request, request)
357
+ r.log(message, request, callback);
358
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
359
+ assert.equal(item.message, message);
360
+ assert.equal(item.request, request);
324
361
  item.callback();
325
362
  assert.isTrue(callbackCalled);
326
363
  },
327
- 'should work with request and custom': function(r) {
328
- var message = 'hello'
329
- var request = { method: 'GET' }
330
- var custom = { a: 1, b: 2 }
331
- r.log(message, request, custom)
332
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
333
- assert.equal(item.message, message)
334
- assert.equal(item.request, request)
335
- assert.deepStrictEqual(item.custom, custom)
364
+ 'should work with request and custom': function (r) {
365
+ var message = 'hello';
366
+ var request = { method: 'GET' };
367
+ var custom = { a: 1, b: 2 };
368
+ r.log(message, request, custom);
369
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
370
+ assert.equal(item.message, message);
371
+ assert.equal(item.request, request);
372
+ assert.deepStrictEqual(item.custom, custom);
336
373
  },
337
- 'should work with request and custom and callback': function(r) {
338
- var message = 'hello'
339
- var request = { method: 'GET' }
340
- var custom = { a: 1, b: 2 }
374
+ 'should work with request and custom and callback': function (r) {
375
+ var message = 'hello';
376
+ var request = { method: 'GET' };
377
+ var custom = { a: 1, b: 2 };
341
378
  var callbackCalled = false;
342
379
  var callback = function cb() {
343
380
  callbackCalled = true;
344
381
  };
345
- r.log(message, request, custom, callback)
346
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
347
- assert.equal(item.message, message)
348
- assert.equal(item.request, request)
349
- assert.deepStrictEqual(item.custom, custom)
382
+ r.log(message, request, custom, callback);
383
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
384
+ assert.equal(item.message, message);
385
+ assert.equal(item.request, request);
386
+ assert.deepStrictEqual(item.custom, custom);
350
387
  item.callback();
351
388
  assert.isTrue(callbackCalled);
352
- }
353
- }
389
+ },
390
+ },
354
391
  },
355
- 'info': {
356
- topic: function() {
392
+ info: {
393
+ topic: function () {
357
394
  // Uses real client and stubs queue.addItem so transforms can run.
358
395
  var rollbar = new Rollbar({
359
396
  accessToken: 'abc123',
360
- captureUncaught: false
397
+ captureUncaught: false,
361
398
  });
362
399
  var notifier = rollbar.client.notifier;
363
400
  rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
364
401
 
365
402
  return rollbar;
366
403
  },
367
- 'should send message when called with only null argument': function(r) {
404
+ 'should send message when called with only null argument': function (
405
+ r,
406
+ ) {
368
407
  var addItemStub = r.addItemStub;
369
408
 
370
409
  r.info(null);
371
410
  assert.isTrue(addItemStub.called);
372
411
  if (addItemStub.called) {
373
- assert.equal(addItemStub.getCall(0).args[3].data.body.message.body, 'Item sent with null or missing arguments.');
412
+ assert.equal(
413
+ addItemStub.getCall(0).args[3].data.body.message.body,
414
+ 'Item sent with null or missing arguments.',
415
+ );
374
416
  }
375
417
  addItemStub.reset();
376
418
  },
377
- 'should send message when called with no arguments': function(r) {
419
+ 'should send message when called with no arguments': function (r) {
378
420
  var addItemStub = r.addItemStub;
379
421
 
380
422
  r.info();
381
423
  assert.isTrue(addItemStub.called);
382
424
  if (addItemStub.called) {
383
- assert.equal(addItemStub.getCall(0).args[3].data.body.message.body, 'Item sent with null or missing arguments.');
425
+ assert.equal(
426
+ addItemStub.getCall(0).args[3].data.body.message.body,
427
+ 'Item sent with null or missing arguments.',
428
+ );
384
429
  }
385
430
  addItemStub.reset();
386
- }
431
+ },
387
432
  },
388
- 'error': {
433
+ error: {
389
434
  'with unordered options': {
390
- 'should work with custom, request, callback, message ': function(r) {
391
- var err = new Error('hello!')
435
+ 'should work with custom, request, callback, message ': function (r) {
436
+ var err = new Error('hello!');
392
437
  var callbackCalled = false;
393
438
  var callback = function cb() {
394
439
  callbackCalled = true;
395
440
  };
396
- var request = { method: 'GET' }
397
- var custom = { a: 1, b: 2 }
398
- r.log(custom, request, callback, err)
399
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
400
- assert.equal(item.err, err)
401
- assert.equal(item.request, request)
402
- assert.deepStrictEqual(item.custom, custom)
441
+ var request = { method: 'GET' };
442
+ var custom = { a: 1, b: 2 };
443
+ r.log(custom, request, callback, err);
444
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
445
+ assert.equal(item.err, err);
446
+ assert.equal(item.request, request);
447
+ assert.deepStrictEqual(item.custom, custom);
403
448
  item.callback();
404
449
  assert.isTrue(callbackCalled);
405
- }
450
+ },
406
451
  },
407
452
  'with old option ordering': {
408
- 'should work': function(r) {
409
- var err = new Error('hello!')
410
- r.log(err)
411
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
412
- assert.equal(item.err, err)
453
+ 'should work': function (r) {
454
+ var err = new Error('hello!');
455
+ r.log(err);
456
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
457
+ assert.equal(item.err, err);
413
458
  },
414
- 'should work with callback': function(r) {
415
- var err = new Error('hello!')
459
+ 'should work with callback': function (r) {
460
+ var err = new Error('hello!');
416
461
  var callbackCalled = false;
417
462
  var callback = function cb() {
418
463
  callbackCalled = true;
419
464
  };
420
- r.log(err, callback)
421
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
422
- assert.equal(item.err, err)
465
+ r.log(err, callback);
466
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
467
+ assert.equal(item.err, err);
423
468
  item.callback();
424
469
  assert.isTrue(callbackCalled);
425
470
  },
426
- 'should work with request': function(r) {
427
- var err = new Error('hello!')
428
- var request = { method: 'GET' }
429
- r.log(err, request)
430
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
431
- assert.equal(item.err, err)
432
- assert.equal(item.request, request)
471
+ 'should work with request': function (r) {
472
+ var err = new Error('hello!');
473
+ var request = { method: 'GET' };
474
+ r.log(err, request);
475
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
476
+ assert.equal(item.err, err);
477
+ assert.equal(item.request, request);
433
478
  },
434
- 'should work with request and callback': function(r) {
435
- var err = new Error('hello!')
436
- var request = { method: 'GET' }
479
+ 'should work with request and callback': function (r) {
480
+ var err = new Error('hello!');
481
+ var request = { method: 'GET' };
437
482
  var callbackCalled = false;
438
483
  var callback = function cb() {
439
484
  callbackCalled = true;
440
485
  };
441
- r.log(err, request, callback)
442
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
443
- assert.equal(item.err, err)
444
- assert.equal(item.request, request)
486
+ r.log(err, request, callback);
487
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
488
+ assert.equal(item.err, err);
489
+ assert.equal(item.request, request);
445
490
  item.callback();
446
491
  assert.isTrue(callbackCalled);
447
492
  },
448
- 'should work with request and custom': function(r) {
449
- var err = new Error('hello!')
450
- var request = { method: 'GET' }
451
- var custom = { a: 1, b: 2 }
452
- r.log(err, request, custom)
453
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
454
- assert.equal(item.err, err)
455
- assert.equal(item.request, request)
456
- assert.deepStrictEqual(item.custom, custom)
493
+ 'should work with request and custom': function (r) {
494
+ var err = new Error('hello!');
495
+ var request = { method: 'GET' };
496
+ var custom = { a: 1, b: 2 };
497
+ r.log(err, request, custom);
498
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
499
+ assert.equal(item.err, err);
500
+ assert.equal(item.request, request);
501
+ assert.deepStrictEqual(item.custom, custom);
457
502
  },
458
- 'should work with request and custom and callback': function(r) {
459
- var err = new Error('hello!')
460
- var request = { method: 'GET' }
461
- var custom = { a: 1, b: 2 }
503
+ 'should work with request and custom and callback': function (r) {
504
+ var err = new Error('hello!');
505
+ var request = { method: 'GET' };
506
+ var custom = { a: 1, b: 2 };
462
507
  var callbackCalled = false;
463
508
  var callback = function cb() {
464
509
  callbackCalled = true;
465
510
  };
466
- r.log(err, request, custom, callback)
467
- var item = r.client.logCalls[r.client.logCalls.length - 1].item
468
- assert.equal(item.err, err)
469
- assert.equal(item.request, request)
470
- assert.deepStrictEqual(item.custom, custom)
511
+ r.log(err, request, custom, callback);
512
+ var item = r.client.logCalls[r.client.logCalls.length - 1].item;
513
+ assert.equal(item.err, err);
514
+ assert.equal(item.request, request);
515
+ assert.deepStrictEqual(item.custom, custom);
471
516
  item.callback();
472
517
  assert.isTrue(callbackCalled);
473
- }
474
- }
475
- }
518
+ },
519
+ },
520
+ },
476
521
  },
477
522
  // captureUncaught tests are set up using subtopics because Rollbar's node.js handlers
478
523
  // are treated as global and concurrent access will lead to handlers being removed
479
524
  // unexpectedly. (Subtopics execute sequentially.)
480
- 'captureUncaught': {
525
+ captureUncaught: {
481
526
  'enabled in constructor': {
482
- topic: function() {
527
+ topic: function () {
483
528
  var rollbar = new Rollbar({
484
529
  accessToken: 'abc123',
485
- captureUncaught: true
530
+ captureUncaught: true,
486
531
  });
487
532
  var notifier = rollbar.client.notifier;
488
533
  rollbar.logStub = sinon.stub(notifier, 'log');
489
534
 
490
535
  nodeThrow(rollbar, this.callback);
491
536
  },
492
- 'should have locals disabled': function(r) {
537
+ 'should have locals disabled': function (r) {
493
538
  assert.equal(r.client.notifier.locals, undefined);
494
539
  },
495
- 'should log': function(r) {
540
+ 'should log': function (r) {
496
541
  var logStub = r.logStub;
497
542
 
498
543
  assert.isTrue(logStub.called);
@@ -502,14 +547,14 @@ vows.describe('rollbar')
502
547
  logStub.reset();
503
548
  },
504
549
  'disabled in configure': {
505
- topic: function(r) {
550
+ topic: function (r) {
506
551
  r.configure({
507
- captureUncaught: false
552
+ captureUncaught: false,
508
553
  });
509
554
 
510
555
  nodeThrow(r, this.callback);
511
556
  },
512
- 'should not log': function(r) {
557
+ 'should not log': function (r) {
513
558
  var notifier = r.client.notifier;
514
559
  var logStub = r.logStub;
515
560
 
@@ -517,61 +562,64 @@ vows.describe('rollbar')
517
562
  notifier.log.restore();
518
563
  },
519
564
  'disabled in constructor': {
520
- topic: function() {
565
+ topic: function () {
521
566
  var rollbar = new Rollbar({
522
567
  accessToken: 'abc123',
523
- captureUncaught: false
568
+ captureUncaught: false,
524
569
  });
525
570
  var notifier = rollbar.client.notifier;
526
571
  rollbar.logStub = sinon.stub(notifier, 'log');
527
572
 
528
573
  nodeThrow(rollbar, this.callback);
529
574
  },
530
- 'should not log': function(r) {
575
+ 'should not log': function (r) {
531
576
  var logStub = r.logStub;
532
577
 
533
578
  assert.isFalse(logStub.called);
534
579
  logStub.reset();
535
580
  },
536
581
  'enabled in configure': {
537
- topic: function(r) {
582
+ topic: function (r) {
538
583
  r.configure({
539
- captureUncaught: true
584
+ captureUncaught: true,
540
585
  });
541
586
 
542
587
  nodeThrow(r, this.callback);
543
588
  },
544
- 'should log': function(r) {
589
+ 'should log': function (r) {
545
590
  var notifier = r.client.notifier;
546
591
  var logStub = r.logStub;
547
592
 
548
593
  assert.isTrue(logStub.called);
549
594
  if (logStub.called) {
550
- assert.equal(logStub.getCall(0).args[0].err.message, 'node error');
595
+ assert.equal(
596
+ logStub.getCall(0).args[0].err.message,
597
+ 'node error',
598
+ );
551
599
  }
552
600
  notifier.log.restore();
553
- }
554
- }
555
- }
556
- }
557
- }
601
+ },
602
+ },
603
+ },
604
+ },
605
+ },
558
606
  },
559
607
  // captureUnhandledRejections tests are set up using subtopics because Rollbar's node.js handlers
560
608
  // are treated as global and concurrent access will lead to handlers being removed
561
609
  // unexpectedly. (Subtopics execute sequentially.)
562
- 'captureUnhandledRejections': {
610
+ captureUnhandledRejections: {
563
611
  'enabled in constructor': {
564
- topic: function() {
612
+ topic: function () {
565
613
  var rollbar = new Rollbar({
566
614
  accessToken: 'abc123',
567
- captureUnhandledRejections: true
615
+ captureUnhandledRejections: true,
568
616
  });
569
617
  var notifier = rollbar.client.notifier;
570
618
  rollbar.logStub = sinon.stub(notifier, 'log');
571
619
 
572
620
  nodeReject(rollbar, this.callback);
573
621
  },
574
- 'should log': function(r) {
622
+ 'should log': function (r) {
575
623
  var logStub = r.logStub;
576
624
 
577
625
  assert.isTrue(logStub.called);
@@ -581,14 +629,14 @@ vows.describe('rollbar')
581
629
  logStub.reset();
582
630
  },
583
631
  'disabled in configure': {
584
- topic: function(r) {
632
+ topic: function (r) {
585
633
  r.configure({
586
- captureUnhandledRejections: false
634
+ captureUnhandledRejections: false,
587
635
  });
588
636
 
589
637
  nodeReject(r, this.callback);
590
638
  },
591
- 'should not log': function(r) {
639
+ 'should not log': function (r) {
592
640
  var notifier = r.client.notifier;
593
641
  var logStub = r.logStub;
594
642
 
@@ -596,81 +644,85 @@ vows.describe('rollbar')
596
644
  notifier.log.restore();
597
645
  },
598
646
  'disabled in constructor': {
599
- topic: function() {
647
+ topic: function () {
600
648
  var rollbar = new Rollbar({
601
649
  accessToken: 'abc123',
602
- captureUnhandledRejections: false
650
+ captureUnhandledRejections: false,
603
651
  });
604
652
  var notifier = rollbar.client.notifier;
605
653
  rollbar.logStub = sinon.stub(notifier, 'log');
606
654
 
607
655
  nodeReject(rollbar, this.callback);
608
656
  },
609
- 'should not log': function(r) {
657
+ 'should not log': function (r) {
610
658
  var logStub = r.logStub;
611
659
 
612
660
  assert.isFalse(logStub.called);
613
661
  logStub.reset();
614
662
  },
615
663
  'enabled in configure': {
616
- topic: function(r) {
664
+ topic: function (r) {
617
665
  r.configure({
618
- captureUnhandledRejections: true
666
+ captureUnhandledRejections: true,
619
667
  });
620
668
 
621
669
  nodeReject(r, this.callback);
622
670
  },
623
- 'should log': function(r) {
671
+ 'should log': function (r) {
624
672
  var notifier = r.client.notifier;
625
673
  var logStub = r.logStub;
626
674
 
627
675
  assert.isTrue(logStub.called);
628
676
  if (logStub.called) {
629
- assert.equal(logStub.getCall(0).args[0].err.message, 'node reject');
677
+ assert.equal(
678
+ logStub.getCall(0).args[0].err.message,
679
+ 'node reject',
680
+ );
630
681
  }
631
682
  notifier.log.restore();
632
- }
633
- }
634
- }
635
- }
636
- }
683
+ },
684
+ },
685
+ },
686
+ },
687
+ },
637
688
  },
638
- 'buildJsonPayload': {
639
- topic: function() {
689
+ buildJsonPayload: {
690
+ topic: function () {
640
691
  var client = new (TestClientGen())();
641
- var rollbar = new Rollbar({accessToken: 'abc123'}, client);
692
+ var rollbar = new Rollbar({ accessToken: 'abc123' }, client);
642
693
  return rollbar;
643
694
  },
644
- 'should work': function(r) {
695
+ 'should work': function (r) {
645
696
  var obj = { foo: 'bar' };
646
697
  r.buildJsonPayload(obj);
647
698
  var item = r.client.logCalls[r.client.logCalls.length - 1].item;
648
699
  assert.equal(obj, item);
649
- }
700
+ },
650
701
  },
651
- 'sendJsonPayload': {
652
- topic: function() {
702
+ sendJsonPayload: {
703
+ topic: function () {
653
704
  var client = new (TestClientGen())();
654
- var rollbar = new Rollbar({accessToken: 'abc123'}, client);
705
+ var rollbar = new Rollbar({ accessToken: 'abc123' }, client);
655
706
  return rollbar;
656
707
  },
657
- 'should work': function(r) {
658
- var json = "{ \"foo\": \"bar\" }";
708
+ 'should work': function (r) {
709
+ var json = '{ "foo": "bar" }';
659
710
  r.sendJsonPayload(json);
660
711
  var item = r.client.logCalls[r.client.logCalls.length - 1].item;
661
712
  assert.equal(json, item);
662
- }
713
+ },
663
714
  },
664
- 'singleton': {
665
- topic: function() {
715
+ singleton: {
716
+ topic: function () {
666
717
  var client = new (TestClientGen())();
667
- return Rollbar.init({accessToken: 'abc123'}, client);
718
+ return Rollbar.init({ accessToken: 'abc123' }, client);
668
719
  },
669
- 'should allow log on constructor to pass through': function(r) {
720
+ 'should allow log on constructor to pass through': function (r) {
670
721
  r.log('hello 1');
671
722
  Rollbar.log('hello 2');
672
723
  assert.equal(r.client.logCalls[0].item.message, 'hello 1');
673
724
  assert.equal(r.client.logCalls[1].item.message, 'hello 2');
674
- }
675
- }
676
- }).export(module, {error: false});
725
+ },
726
+ },
727
+ })
728
+ .export(module, { error: false });