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.
- package/.github/workflows/ci.yml +32 -10
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/Gruntfile.js +51 -71
- package/README.md +2 -4
- package/bower.json +1 -3
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +5699 -5052
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +1 -1
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +5704 -5062
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +1 -1
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +5693 -5052
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +1 -1
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +5704 -5063
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +1 -1
- package/dist/rollbar.umd.min.js.map +1 -1
- package/docs/extension-exceptions.md +35 -30
- package/docs/migration_v0_to_v1.md +41 -38
- package/index.d.ts +270 -231
- package/karma.conf.js +16 -34
- package/package.json +21 -17
- package/prettier.config.js +7 -0
- package/src/api.js +21 -10
- package/src/apiUtility.js +12 -8
- package/src/browser/core.js +103 -65
- package/src/browser/defaults/scrubFields.js +3 -3
- package/src/browser/detection.js +7 -8
- package/src/browser/domUtility.js +18 -8
- package/src/browser/globalSetup.js +12 -6
- package/src/browser/logger.js +1 -1
- package/src/browser/plugins/jquery.js +35 -35
- package/src/browser/predicates.js +1 -1
- package/src/browser/rollbar.js +1 -1
- package/src/browser/rollbarWrapper.js +8 -5
- package/src/browser/shim.js +43 -19
- package/src/browser/snippet_callback.js +6 -4
- package/src/browser/telemetry.js +573 -354
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +16 -14
- package/src/browser/transport/xhr.js +29 -13
- package/src/browser/transport.js +82 -25
- package/src/browser/url.js +16 -8
- package/src/browser/wrapGlobals.js +27 -8
- package/src/defaults.js +3 -3
- package/src/errorParser.js +14 -11
- package/src/merge.js +32 -23
- package/src/notifier.js +16 -13
- package/src/predicates.js +43 -23
- package/src/queue.js +71 -39
- package/src/rateLimiter.js +59 -18
- package/src/react-native/logger.js +1 -1
- package/src/react-native/rollbar.js +59 -55
- package/src/react-native/transforms.js +13 -9
- package/src/react-native/transport.js +44 -34
- package/src/rollbar.js +22 -13
- package/src/scrub.js +0 -1
- package/src/server/locals.js +69 -39
- package/src/server/logger.js +4 -4
- package/src/server/parser.js +72 -47
- package/src/server/rollbar.js +133 -55
- package/src/server/sourceMap/stackTrace.js +33 -18
- package/src/server/telemetry/urlHelpers.js +9 -11
- package/src/server/telemetry.js +68 -45
- package/src/server/transforms.js +37 -21
- package/src/server/transport.js +62 -32
- package/src/telemetry.js +92 -28
- package/src/transforms.js +33 -21
- package/src/truncation.js +8 -5
- package/src/utility/headers.js +43 -43
- package/src/utility/replace.js +9 -0
- package/src/utility/traverse.js +1 -1
- package/src/utility.js +89 -52
- package/test/api.test.js +31 -29
- package/test/apiUtility.test.js +43 -44
- package/test/browser.core.test.js +141 -131
- package/test/browser.domUtility.test.js +52 -35
- package/test/browser.predicates.test.js +13 -13
- package/test/browser.rollbar.test.js +597 -503
- package/test/browser.telemetry.test.js +76 -0
- package/test/browser.transforms.test.js +146 -128
- package/test/browser.transport.test.js +54 -46
- package/test/browser.url.test.js +12 -11
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/notifier.test.js +90 -78
- package/test/predicates.test.js +260 -214
- package/test/queue.test.js +230 -214
- package/test/rateLimiter.test.js +50 -42
- package/test/react-native.rollbar.test.js +149 -115
- package/test/react-native.transforms.test.js +21 -23
- package/test/react-native.transport.test.js +23 -11
- package/test/server.lambda.test.js +70 -53
- package/test/server.locals.test.js +437 -210
- package/test/server.parser.test.js +32 -26
- package/test/server.predicates.test.js +45 -43
- package/test/server.rollbar.test.js +311 -259
- package/test/server.telemetry.test.js +208 -83
- package/test/server.transforms.test.js +455 -361
- package/test/server.transport.test.js +144 -76
- package/test/telemetry.test.js +46 -37
- package/test/transforms.test.js +68 -66
- package/test/truncation.test.js +55 -53
- package/test/utility.test.js +266 -222
- package/webpack.config.js +46 -43
- package/.gitmodules +0 -3
- package/browserstack.browsers.js +0 -153
- package/browserstack.browsers.json +0 -4384
|
@@ -13,7 +13,7 @@ var localsFixtures = require('./fixtures/locals.fixtures');
|
|
|
13
13
|
var nodeMajorVersion = process.versions.node.split('.')[0];
|
|
14
14
|
|
|
15
15
|
async function wait(ms) {
|
|
16
|
-
return new Promise(resolve => {
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
17
|
setTimeout(resolve, ms);
|
|
18
18
|
});
|
|
19
19
|
}
|
|
@@ -50,7 +50,7 @@ async function nodeThrowAndCatch(rollbar, callback) {
|
|
|
50
50
|
|
|
51
51
|
function nestedError(nestedMessage, _password) {
|
|
52
52
|
var nestedError = new Error(nestedMessage);
|
|
53
|
-
throw
|
|
53
|
+
throw nestedError;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
async function nodeThrowNested(rollbar, callback) {
|
|
@@ -61,7 +61,7 @@ async function nodeThrowNested(rollbar, callback) {
|
|
|
61
61
|
|
|
62
62
|
try {
|
|
63
63
|
var newMessage = 'nested ' + message;
|
|
64
|
-
nestedError(newMessage, password)
|
|
64
|
+
nestedError(newMessage, password);
|
|
65
65
|
} catch (e) {
|
|
66
66
|
err.nested = e;
|
|
67
67
|
}
|
|
@@ -86,13 +86,12 @@ function fakeSessionPostHandler(responses) {
|
|
|
86
86
|
setTimeout(function () {
|
|
87
87
|
callback(error, response);
|
|
88
88
|
}, 1);
|
|
89
|
-
}
|
|
89
|
+
};
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
93
92
|
async function nodeThrowWithNestedLocals(rollbar, callback) {
|
|
94
93
|
setTimeout(function () {
|
|
95
|
-
var arr = [{ zero: [0, 0]}, { one: 1}, { two: 2}, { three: 3}];
|
|
94
|
+
var arr = [{ zero: [0, 0] }, { one: 1 }, { two: 2 }, { three: 3 }];
|
|
96
95
|
var obj = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e', f: 'f' };
|
|
97
96
|
var password = 'password';
|
|
98
97
|
var sym = Symbol('foo');
|
|
@@ -107,7 +106,7 @@ function recurse(curr, limit) {
|
|
|
107
106
|
if (curr < limit) {
|
|
108
107
|
recurse(curr + 1, limit);
|
|
109
108
|
} else {
|
|
110
|
-
throw new Error('deep stack error, limit='+limit);
|
|
109
|
+
throw new Error('deep stack error, limit=' + limit);
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
|
|
@@ -131,16 +130,30 @@ function verifyThrownError(r) {
|
|
|
131
130
|
assert.isTrue(addItemStub.called);
|
|
132
131
|
var data = addItemStub.getCall(0).args[3].data;
|
|
133
132
|
assert.equal(data.body.trace_chain[0].exception.message, 'node error');
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
133
|
+
var length = data.body.trace_chain[0].frames.length;
|
|
134
|
+
assert.ok(length > 1);
|
|
135
|
+
|
|
136
|
+
if (nodeMajorVersion >= 18) {
|
|
137
|
+
// Node >=18; locals only in top frame
|
|
138
|
+
assert.equal(
|
|
139
|
+
data.body.trace_chain[0].frames[length - 1].locals.error,
|
|
140
|
+
'<Error object>',
|
|
141
|
+
);
|
|
142
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
143
|
+
} else if (nodeMajorVersion >= 10) {
|
|
144
|
+
// Node >=10; locals enabled
|
|
145
|
+
assert.equal(
|
|
146
|
+
data.body.trace_chain[0].frames[length - 1].locals.error,
|
|
147
|
+
'<Error object>',
|
|
148
|
+
);
|
|
149
|
+
assert.equal(
|
|
150
|
+
data.body.trace_chain[0].frames[length - 2].locals.timer,
|
|
151
|
+
'<Timeout object>',
|
|
152
|
+
);
|
|
139
153
|
} else {
|
|
140
|
-
// Node 8; locals disabled
|
|
141
|
-
|
|
142
|
-
assert.equal(data.body.trace_chain[0].frames[length-
|
|
143
|
-
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
|
|
154
|
+
// Node <=8; locals disabled
|
|
155
|
+
assert.equal(data.body.trace_chain[0].frames[length - 1].locals, undefined);
|
|
156
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
144
157
|
}
|
|
145
158
|
addItemStub.restore();
|
|
146
159
|
}
|
|
@@ -151,15 +164,29 @@ function verifyCaughtError(r) {
|
|
|
151
164
|
assert.isTrue(addItemStub.called);
|
|
152
165
|
var data = addItemStub.getCall(0).args[3].data;
|
|
153
166
|
assert.equal(data.body.trace_chain[0].exception.message, 'caught error');
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
167
|
+
var length = data.body.trace_chain[0].frames.length;
|
|
168
|
+
assert.ok(length > 1);
|
|
169
|
+
|
|
170
|
+
if (nodeMajorVersion >= 18) {
|
|
171
|
+
// Node >=18; locals only in top frame
|
|
172
|
+
assert.equal(
|
|
173
|
+
data.body.trace_chain[0].frames[length - 1].locals.error,
|
|
174
|
+
'<Error object>',
|
|
175
|
+
);
|
|
176
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
177
|
+
} else if (nodeMajorVersion >= 10) {
|
|
178
|
+
// Node 10..<18; locals enabled
|
|
179
|
+
assert.equal(
|
|
180
|
+
data.body.trace_chain[0].frames[length - 1].locals.error,
|
|
181
|
+
'<Error object>',
|
|
182
|
+
);
|
|
183
|
+
assert.equal(
|
|
184
|
+
data.body.trace_chain[0].frames[length - 2].locals.timer,
|
|
185
|
+
'<Timeout object>',
|
|
186
|
+
);
|
|
159
187
|
} else {
|
|
160
|
-
|
|
161
|
-
assert.equal(data.body.trace_chain[0].frames[length-
|
|
162
|
-
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
|
|
188
|
+
assert.equal(data.body.trace_chain[0].frames[length - 1].locals, undefined);
|
|
189
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
163
190
|
}
|
|
164
191
|
addItemStub.restore();
|
|
165
192
|
}
|
|
@@ -171,25 +198,86 @@ function verifyNestedError(r) {
|
|
|
171
198
|
var data = addItemStub.getCall(0).args[3].data;
|
|
172
199
|
assert.equal(data.body.trace_chain[0].exception.message, 'test error');
|
|
173
200
|
assert.equal(data.body.trace_chain[1].exception.message, 'nested test error');
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
201
|
+
var length = data.body.trace_chain[0].frames.length;
|
|
202
|
+
assert.ok(length > 1);
|
|
203
|
+
|
|
204
|
+
if (nodeMajorVersion >= 18) {
|
|
205
|
+
// Node >=18; locals only in top frame
|
|
206
|
+
assert.equal(
|
|
207
|
+
data.body.trace_chain[0].frames[length - 1].locals.message,
|
|
208
|
+
'test error',
|
|
209
|
+
);
|
|
210
|
+
assert.equal(
|
|
211
|
+
data.body.trace_chain[0].frames[length - 1].locals.password,
|
|
212
|
+
'********',
|
|
213
|
+
);
|
|
214
|
+
assert.equal(
|
|
215
|
+
data.body.trace_chain[0].frames[length - 1].locals.err,
|
|
216
|
+
'<Error object>',
|
|
217
|
+
);
|
|
218
|
+
assert.equal(
|
|
219
|
+
data.body.trace_chain[0].frames[length - 1].locals.newMessage,
|
|
220
|
+
'nested test error',
|
|
221
|
+
);
|
|
222
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
179
223
|
|
|
180
224
|
length = data.body.trace_chain[1].frames.length;
|
|
181
|
-
assert.
|
|
182
|
-
assert.equal(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
assert.equal(
|
|
225
|
+
assert.ok(length > 1);
|
|
226
|
+
assert.equal(
|
|
227
|
+
data.body.trace_chain[1].frames[length - 1].locals.nestedMessage,
|
|
228
|
+
'nested test error',
|
|
229
|
+
);
|
|
230
|
+
assert.equal(
|
|
231
|
+
data.body.trace_chain[1].frames[length - 1].locals._password,
|
|
232
|
+
'123456',
|
|
233
|
+
);
|
|
234
|
+
assert.equal(
|
|
235
|
+
data.body.trace_chain[1].frames[length - 1].locals.nestedError,
|
|
236
|
+
'<Error object>',
|
|
237
|
+
);
|
|
238
|
+
assert.equal(data.body.trace_chain[1].frames[length - 2].locals, undefined);
|
|
239
|
+
} else if (nodeMajorVersion >= 10) {
|
|
240
|
+
// Node >=10; locals enabled
|
|
241
|
+
assert.equal(
|
|
242
|
+
data.body.trace_chain[0].frames[length - 1].locals.err,
|
|
243
|
+
'<Error object>',
|
|
244
|
+
);
|
|
245
|
+
assert.equal(
|
|
246
|
+
data.body.trace_chain[0].frames[length - 2].locals.timer,
|
|
247
|
+
'<Timeout object>',
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
length = data.body.trace_chain[1].frames.length;
|
|
251
|
+
assert.ok(length > 1);
|
|
252
|
+
assert.equal(
|
|
253
|
+
data.body.trace_chain[1].frames[length - 1].locals.nestedMessage,
|
|
254
|
+
'nested test error',
|
|
255
|
+
);
|
|
256
|
+
assert.equal(
|
|
257
|
+
data.body.trace_chain[1].frames[length - 1].locals.nestedError,
|
|
258
|
+
'<Error object>',
|
|
259
|
+
);
|
|
260
|
+
assert.equal(
|
|
261
|
+
data.body.trace_chain[1].frames[length - 2].locals.message,
|
|
262
|
+
'test error',
|
|
263
|
+
);
|
|
264
|
+
assert.equal(
|
|
265
|
+
data.body.trace_chain[1].frames[length - 2].locals.password,
|
|
266
|
+
'********',
|
|
267
|
+
);
|
|
268
|
+
assert.equal(
|
|
269
|
+
data.body.trace_chain[1].frames[length - 2].locals.err,
|
|
270
|
+
'<Error object>',
|
|
271
|
+
);
|
|
272
|
+
assert.equal(
|
|
273
|
+
data.body.trace_chain[1].frames[length - 2].locals.newMessage,
|
|
274
|
+
'nested test error',
|
|
275
|
+
);
|
|
187
276
|
} else {
|
|
188
|
-
// Node 8; locals disabled
|
|
189
|
-
|
|
190
|
-
assert.equal(data.body.trace_chain[0].frames[length-
|
|
191
|
-
|
|
192
|
-
}
|
|
277
|
+
// Node <=8; locals disabled
|
|
278
|
+
assert.equal(data.body.trace_chain[0].frames[length - 1].locals, undefined);
|
|
279
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
280
|
+
}
|
|
193
281
|
addItemStub.restore();
|
|
194
282
|
}
|
|
195
283
|
|
|
@@ -199,19 +287,47 @@ function verifyRejectedPromise(r) {
|
|
|
199
287
|
assert.isTrue(addItemStub.called);
|
|
200
288
|
var data = addItemStub.getCall(0).args[3].data;
|
|
201
289
|
assert.equal(data.body.trace_chain[0].exception.message, 'promise reject');
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
assert.equal(
|
|
208
|
-
|
|
290
|
+
var length = data.body.trace_chain[0].frames.length;
|
|
291
|
+
assert.ok(length > 1);
|
|
292
|
+
|
|
293
|
+
if (nodeMajorVersion >= 18) {
|
|
294
|
+
// Node >=18; locals only in top frame
|
|
295
|
+
assert.equal(
|
|
296
|
+
data.body.trace_chain[0].frames[length - 1].locals.error,
|
|
297
|
+
'<Error object>',
|
|
298
|
+
);
|
|
299
|
+
assert.equal(
|
|
300
|
+
data.body.trace_chain[0].frames[length - 1].locals.callback,
|
|
301
|
+
'<Function object>',
|
|
302
|
+
);
|
|
303
|
+
assert.equal(
|
|
304
|
+
data.body.trace_chain[0].frames[length - 1].locals.rollbar,
|
|
305
|
+
'<Rollbar object>',
|
|
306
|
+
);
|
|
307
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
308
|
+
} else if (nodeMajorVersion >= 10) {
|
|
309
|
+
// Node >=10; locals enabled
|
|
310
|
+
assert.equal(
|
|
311
|
+
data.body.trace_chain[0].frames[length - 1].locals.error,
|
|
312
|
+
'<Error object>',
|
|
313
|
+
);
|
|
314
|
+
assert.equal(
|
|
315
|
+
data.body.trace_chain[0].frames[length - 1].locals.rollbar,
|
|
316
|
+
'<Rollbar object>',
|
|
317
|
+
);
|
|
318
|
+
assert.equal(
|
|
319
|
+
data.body.trace_chain[0].frames[length - 2].locals.notifier,
|
|
320
|
+
'<Notifier object>',
|
|
321
|
+
);
|
|
322
|
+
assert.equal(
|
|
323
|
+
data.body.trace_chain[0].frames[length - 2].locals.r,
|
|
324
|
+
'<Rollbar object>',
|
|
325
|
+
);
|
|
209
326
|
} else {
|
|
210
|
-
// Node 8; locals disabled
|
|
211
|
-
|
|
212
|
-
assert.equal(data.body.trace_chain[0].frames[length-
|
|
213
|
-
|
|
214
|
-
}
|
|
327
|
+
// Node <=8; locals disabled
|
|
328
|
+
assert.equal(data.body.trace_chain[0].frames[length - 1].locals, undefined);
|
|
329
|
+
assert.equal(data.body.trace_chain[0].frames[length - 2].locals, undefined);
|
|
330
|
+
}
|
|
215
331
|
addItemStub.restore();
|
|
216
332
|
}
|
|
217
333
|
|
|
@@ -223,276 +339,362 @@ function verifyDefaultOptions(options) {
|
|
|
223
339
|
assert.equal(options.maxArray, 5);
|
|
224
340
|
}
|
|
225
341
|
|
|
226
|
-
vows
|
|
342
|
+
vows
|
|
343
|
+
.describe('locals')
|
|
227
344
|
.addBatch({
|
|
228
|
-
|
|
229
|
-
topic: function() {
|
|
345
|
+
enabled: {
|
|
346
|
+
topic: function () {
|
|
230
347
|
var rollbar = new Rollbar({
|
|
231
348
|
accessToken: 'abc123',
|
|
232
349
|
captureUncaught: true,
|
|
233
350
|
captureUnhandledRejections: true,
|
|
234
|
-
locals: { module: Locals, uncaughtOnly: true, depth: 0 }
|
|
351
|
+
locals: { module: Locals, uncaughtOnly: true, depth: 0 },
|
|
235
352
|
});
|
|
236
353
|
var notifier = rollbar.client.notifier;
|
|
237
354
|
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
238
355
|
|
|
239
356
|
nodeThrow(rollbar, this.callback);
|
|
240
357
|
},
|
|
241
|
-
'should include locals': function(_err, r) {
|
|
358
|
+
'should include locals': function (_err, r) {
|
|
242
359
|
verifyThrownError(r);
|
|
243
360
|
},
|
|
244
361
|
'then disabled': {
|
|
245
|
-
topic: function(_err, r) {
|
|
246
|
-
r.configure({ locals: { enabled: false }});
|
|
362
|
+
topic: function (_err, r) {
|
|
363
|
+
r.configure({ locals: { enabled: false } });
|
|
247
364
|
var notifier = r.client.notifier;
|
|
365
|
+
assert.ok(notifier);
|
|
248
366
|
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
249
367
|
|
|
250
368
|
nodeThrowNested(r, this.callback);
|
|
251
369
|
},
|
|
252
|
-
'should not include locals': function(_err, r) {
|
|
370
|
+
'should not include locals': function (_err, r) {
|
|
253
371
|
var addItemStub = r.addItemStub;
|
|
372
|
+
assert.ok(addItemStub);
|
|
254
373
|
|
|
255
374
|
assert.isTrue(addItemStub.called);
|
|
256
375
|
var data = addItemStub.getCall(0).args[3].data;
|
|
257
|
-
assert.equal(
|
|
258
|
-
|
|
376
|
+
assert.equal(
|
|
377
|
+
data.body.trace_chain[0].exception.message,
|
|
378
|
+
'test error',
|
|
379
|
+
);
|
|
380
|
+
assert.equal(
|
|
381
|
+
data.body.trace_chain[1].exception.message,
|
|
382
|
+
'nested test error',
|
|
383
|
+
);
|
|
259
384
|
var length = data.body.trace_chain[0].frames.length;
|
|
260
|
-
assert.
|
|
261
|
-
assert.equal(
|
|
385
|
+
assert.ok(length > 1);
|
|
386
|
+
assert.equal(
|
|
387
|
+
data.body.trace_chain[0].frames[length - 1].locals,
|
|
388
|
+
undefined,
|
|
389
|
+
);
|
|
390
|
+
assert.equal(
|
|
391
|
+
data.body.trace_chain[0].frames[length - 2].locals,
|
|
392
|
+
undefined,
|
|
393
|
+
);
|
|
262
394
|
addItemStub.restore();
|
|
263
395
|
},
|
|
264
396
|
'then enabled': {
|
|
265
|
-
topic: function(_err, r) {
|
|
266
|
-
r.configure({ locals: { enabled: true, uncaughtOnly: false }});
|
|
397
|
+
topic: function (_err, r) {
|
|
398
|
+
r.configure({ locals: { enabled: true, uncaughtOnly: false } });
|
|
267
399
|
var notifier = r.client.notifier;
|
|
268
400
|
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
269
401
|
|
|
270
402
|
promiseReject(r, this.callback);
|
|
271
403
|
},
|
|
272
|
-
'should include locals': function(_err, r) {
|
|
404
|
+
'should include locals': function (_err, r) {
|
|
273
405
|
verifyRejectedPromise(r);
|
|
274
406
|
},
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
},
|
|
278
410
|
})
|
|
279
411
|
|
|
280
412
|
.addBatch({
|
|
281
413
|
'on caught error': {
|
|
282
414
|
'uncaughtOnly: true': {
|
|
283
|
-
topic: function() {
|
|
415
|
+
topic: function () {
|
|
284
416
|
var rollbar = new Rollbar({
|
|
285
417
|
accessToken: 'abc123',
|
|
286
418
|
captureUncaught: true,
|
|
287
419
|
captureUnhandledRejections: true,
|
|
288
|
-
locals: { module: Locals, uncaughtOnly:true, depth: 0 }
|
|
420
|
+
locals: { module: Locals, uncaughtOnly: true, depth: 0 },
|
|
289
421
|
});
|
|
290
422
|
var notifier = rollbar.client.notifier;
|
|
291
423
|
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
292
424
|
|
|
293
425
|
nodeThrowAndCatch(rollbar, this.callback);
|
|
294
426
|
},
|
|
295
|
-
'should not include locals': function(_err, r) {
|
|
427
|
+
'should not include locals': function (_err, r) {
|
|
296
428
|
var addItemStub = r.addItemStub;
|
|
297
429
|
|
|
298
430
|
assert.isTrue(addItemStub.called);
|
|
299
431
|
var data = addItemStub.getCall(0).args[3].data;
|
|
300
|
-
assert.equal(
|
|
432
|
+
assert.equal(
|
|
433
|
+
data.body.trace_chain[0].exception.message,
|
|
434
|
+
'caught error',
|
|
435
|
+
);
|
|
301
436
|
var length = data.body.trace_chain[0].frames.length;
|
|
302
|
-
assert.
|
|
303
|
-
assert.equal(
|
|
437
|
+
assert.ok(length > 1);
|
|
438
|
+
assert.equal(
|
|
439
|
+
data.body.trace_chain[0].frames[length - 1].locals,
|
|
440
|
+
undefined,
|
|
441
|
+
);
|
|
442
|
+
assert.equal(
|
|
443
|
+
data.body.trace_chain[0].frames[length - 2].locals,
|
|
444
|
+
undefined,
|
|
445
|
+
);
|
|
304
446
|
|
|
305
447
|
addItemStub.restore();
|
|
306
448
|
},
|
|
307
449
|
'then uncaughtOnly: false': {
|
|
308
|
-
topic: function(_err, r) {
|
|
309
|
-
r.configure({ locals: { uncaughtOnly: false }});
|
|
450
|
+
topic: function (_err, r) {
|
|
451
|
+
r.configure({ locals: { uncaughtOnly: false } });
|
|
310
452
|
var notifier = r.client.notifier;
|
|
311
453
|
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
312
454
|
|
|
313
455
|
nodeThrowAndCatch(r, this.callback);
|
|
314
456
|
},
|
|
315
|
-
'should include locals': function(_err, r) {
|
|
457
|
+
'should include locals': function (_err, r) {
|
|
316
458
|
verifyCaughtError(r);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
459
|
+
},
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
|
+
},
|
|
321
463
|
})
|
|
322
464
|
|
|
323
465
|
.addBatch({
|
|
324
466
|
'on exception': {
|
|
325
|
-
|
|
326
|
-
topic: function() {
|
|
467
|
+
uncaught: {
|
|
468
|
+
topic: function () {
|
|
327
469
|
var rollbar = new Rollbar({
|
|
328
470
|
accessToken: 'abc123',
|
|
329
471
|
captureUncaught: true,
|
|
330
472
|
captureUnhandledRejections: true,
|
|
331
|
-
locals: { module: Locals, uncaughtOnly: true, depth: 0 }
|
|
473
|
+
locals: { module: Locals, uncaughtOnly: true, depth: 0 },
|
|
332
474
|
});
|
|
333
475
|
var notifier = rollbar.client.notifier;
|
|
334
476
|
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
335
477
|
|
|
336
478
|
nodeThrow(rollbar, this.callback);
|
|
337
479
|
},
|
|
338
|
-
'should include locals': function(_err, r) {
|
|
480
|
+
'should include locals': function (_err, r) {
|
|
339
481
|
verifyThrownError(r);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
482
|
+
},
|
|
483
|
+
},
|
|
484
|
+
},
|
|
343
485
|
})
|
|
344
486
|
|
|
345
487
|
.addBatch({
|
|
346
488
|
'on exception': {
|
|
347
|
-
|
|
348
|
-
topic: function() {
|
|
489
|
+
nested: {
|
|
490
|
+
topic: function () {
|
|
349
491
|
var rollbar = new Rollbar({
|
|
350
492
|
accessToken: 'abc123',
|
|
351
493
|
captureUncaught: true,
|
|
352
|
-
locals: { module: Locals, uncaughtOnly: false, depth: 0 }
|
|
494
|
+
locals: { module: Locals, uncaughtOnly: false, depth: 0 },
|
|
353
495
|
});
|
|
354
496
|
var notifier = rollbar.client.notifier;
|
|
355
497
|
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
356
498
|
|
|
357
499
|
nodeThrowNested(rollbar, this.callback);
|
|
358
500
|
},
|
|
359
|
-
'should include locals': function(_err, r) {
|
|
501
|
+
'should include locals': function (_err, r) {
|
|
360
502
|
verifyNestedError(r);
|
|
361
503
|
},
|
|
362
|
-
}
|
|
363
|
-
}
|
|
504
|
+
},
|
|
505
|
+
},
|
|
364
506
|
})
|
|
365
507
|
|
|
366
508
|
.addBatch({
|
|
367
509
|
'on exception': {
|
|
368
510
|
'promise rejection': {
|
|
369
|
-
topic: function() {
|
|
511
|
+
topic: function () {
|
|
370
512
|
var r = new Rollbar({
|
|
371
513
|
accessToken: 'abc123',
|
|
372
514
|
captureUnhandledRejections: true,
|
|
373
|
-
locals: { module: Locals, uncaughtOnly: false, depth: 0 }
|
|
515
|
+
locals: { module: Locals, uncaughtOnly: false, depth: 0 },
|
|
374
516
|
});
|
|
375
517
|
var notifier = r.client.notifier;
|
|
376
518
|
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
377
519
|
|
|
378
520
|
promiseReject(r, this.callback);
|
|
379
521
|
},
|
|
380
|
-
'should include locals': function(_err, r) {
|
|
522
|
+
'should include locals': function (_err, r) {
|
|
381
523
|
verifyRejectedPromise(r);
|
|
382
524
|
},
|
|
383
|
-
}
|
|
384
|
-
}
|
|
525
|
+
},
|
|
526
|
+
},
|
|
385
527
|
})
|
|
386
528
|
|
|
387
529
|
.addBatch({
|
|
388
530
|
'on exception': {
|
|
389
531
|
'with custom options': {
|
|
390
|
-
topic: function() {
|
|
532
|
+
topic: function () {
|
|
391
533
|
var rollbar = new Rollbar({
|
|
392
534
|
accessToken: 'abc123',
|
|
393
535
|
captureUncaught: true,
|
|
394
|
-
locals: { module: Locals, depth: 2, maxProperties: 5, maxArray: 2 }
|
|
536
|
+
locals: { module: Locals, depth: 2, maxProperties: 5, maxArray: 2 },
|
|
395
537
|
});
|
|
396
538
|
var notifier = rollbar.client.notifier;
|
|
397
539
|
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
398
540
|
|
|
399
541
|
nodeThrowWithNestedLocals(rollbar, this.callback);
|
|
400
542
|
},
|
|
401
|
-
'should include locals': function(_err, r) {
|
|
543
|
+
'should include locals': function (_err, r) {
|
|
402
544
|
var addItemStub = r.addItemStub;
|
|
403
545
|
|
|
404
546
|
assert.isTrue(addItemStub.called);
|
|
405
547
|
var data = addItemStub.getCall(0).args[3].data;
|
|
406
|
-
assert.equal(
|
|
548
|
+
assert.equal(
|
|
549
|
+
data.body.trace_chain[0].exception.message,
|
|
550
|
+
'node error',
|
|
551
|
+
);
|
|
407
552
|
if (nodeMajorVersion < 10) {
|
|
408
553
|
// Node 8; locals disabled
|
|
409
554
|
var length = data.body.trace_chain[0].frames.length;
|
|
410
|
-
assert.equal(
|
|
555
|
+
assert.equal(
|
|
556
|
+
data.body.trace_chain[0].frames[length - 1].locals,
|
|
557
|
+
undefined,
|
|
558
|
+
);
|
|
411
559
|
} else {
|
|
412
560
|
var length = data.body.trace_chain[0].frames.length;
|
|
413
|
-
assert.equal(
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
assert.deepEqual(
|
|
561
|
+
assert.equal(
|
|
562
|
+
Object.keys(
|
|
563
|
+
data.body.trace_chain[0].frames[length - 1].locals.obj,
|
|
564
|
+
).length,
|
|
565
|
+
5,
|
|
566
|
+
);
|
|
567
|
+
assert.deepEqual(
|
|
568
|
+
data.body.trace_chain[0].frames[length - 1].locals.obj,
|
|
569
|
+
{ a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' },
|
|
570
|
+
);
|
|
571
|
+
assert.equal(
|
|
572
|
+
data.body.trace_chain[0].frames[length - 1].locals.arr.length,
|
|
573
|
+
2,
|
|
574
|
+
);
|
|
575
|
+
assert.deepEqual(
|
|
576
|
+
data.body.trace_chain[0].frames[length - 1].locals.arr[0],
|
|
577
|
+
{ zero: '<Array object>' },
|
|
578
|
+
);
|
|
579
|
+
assert.deepEqual(
|
|
580
|
+
data.body.trace_chain[0].frames[length - 1].locals.arr[1],
|
|
581
|
+
{ one: 1 },
|
|
582
|
+
);
|
|
583
|
+
assert.deepEqual(
|
|
584
|
+
data.body.trace_chain[0].frames[length - 1].locals.password,
|
|
585
|
+
'********',
|
|
586
|
+
);
|
|
587
|
+
assert.deepEqual(
|
|
588
|
+
data.body.trace_chain[0].frames[length - 1].locals.sym,
|
|
589
|
+
'Symbol(foo)',
|
|
590
|
+
);
|
|
420
591
|
}
|
|
421
592
|
addItemStub.reset();
|
|
422
593
|
Locals.session = undefined;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
594
|
+
},
|
|
595
|
+
},
|
|
596
|
+
},
|
|
426
597
|
})
|
|
427
598
|
|
|
428
599
|
.addBatch({
|
|
429
600
|
'on exception': {
|
|
430
601
|
'with recursive stack': {
|
|
431
|
-
topic: function() {
|
|
602
|
+
topic: function () {
|
|
432
603
|
var rollbar = new Rollbar({
|
|
433
604
|
accessToken: 'abc123',
|
|
434
605
|
captureUncaught: true,
|
|
435
|
-
locals: Locals
|
|
606
|
+
locals: Locals,
|
|
436
607
|
});
|
|
437
608
|
var notifier = rollbar.client.notifier;
|
|
438
609
|
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
439
610
|
|
|
440
611
|
nodeThrowRecursionError(rollbar, this.callback);
|
|
441
612
|
},
|
|
442
|
-
'should include locals': function(_err, r) {
|
|
613
|
+
'should include locals': function (_err, r) {
|
|
443
614
|
var addItemStub = r.addItemStub;
|
|
444
615
|
|
|
445
616
|
assert.isTrue(addItemStub.called);
|
|
446
617
|
var data = addItemStub.getCall(0).args[3].data;
|
|
447
|
-
assert.equal(
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
618
|
+
assert.equal(
|
|
619
|
+
data.body.trace_chain[0].exception.message,
|
|
620
|
+
'deep stack error, limit=3',
|
|
621
|
+
);
|
|
622
|
+
var length = data.body.trace_chain[0].frames.length;
|
|
623
|
+
assert.ok(length > 1);
|
|
624
|
+
|
|
625
|
+
if (nodeMajorVersion >= 18) {
|
|
626
|
+
// Node >=18; locals only in top frame
|
|
627
|
+
assert.deepEqual(
|
|
628
|
+
data.body.trace_chain[0].frames[length - 1].locals,
|
|
629
|
+
{ curr: 3, limit: 3 },
|
|
630
|
+
);
|
|
631
|
+
assert.equal(
|
|
632
|
+
data.body.trace_chain[0].frames[length - 2].locals,
|
|
633
|
+
undefined,
|
|
634
|
+
);
|
|
635
|
+
assert.equal(
|
|
636
|
+
data.body.trace_chain[0].frames[length - 3].locals,
|
|
637
|
+
undefined,
|
|
638
|
+
);
|
|
639
|
+
} else if (nodeMajorVersion >= 10) {
|
|
640
|
+
// Node >=10; locals enabled
|
|
641
|
+
assert.deepEqual(
|
|
642
|
+
data.body.trace_chain[0].frames[length - 1].locals,
|
|
643
|
+
{ curr: 3, limit: 3 },
|
|
644
|
+
);
|
|
645
|
+
assert.deepEqual(
|
|
646
|
+
data.body.trace_chain[0].frames[length - 2].locals,
|
|
647
|
+
{ curr: 2, limit: 3 },
|
|
648
|
+
);
|
|
649
|
+
assert.deepEqual(
|
|
650
|
+
data.body.trace_chain[0].frames[length - 3].locals,
|
|
651
|
+
{ curr: 1, limit: 3 },
|
|
652
|
+
);
|
|
452
653
|
} else {
|
|
453
|
-
|
|
454
|
-
assert.
|
|
455
|
-
|
|
456
|
-
|
|
654
|
+
// Node <=8; locals disabled
|
|
655
|
+
assert.equal(
|
|
656
|
+
data.body.trace_chain[0].frames[length - 1].locals,
|
|
657
|
+
undefined,
|
|
658
|
+
);
|
|
457
659
|
}
|
|
458
660
|
addItemStub.reset();
|
|
459
661
|
Locals.session = undefined;
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
}
|
|
662
|
+
},
|
|
663
|
+
},
|
|
664
|
+
},
|
|
463
665
|
})
|
|
464
666
|
|
|
465
667
|
.addBatch({
|
|
466
|
-
|
|
668
|
+
constructor: {
|
|
467
669
|
'passing true boolean': {
|
|
468
|
-
topic: function() {
|
|
670
|
+
topic: function () {
|
|
469
671
|
return new Locals(true, logger);
|
|
470
672
|
},
|
|
471
|
-
'should use defaults': function(locals) {
|
|
673
|
+
'should use defaults': function (locals) {
|
|
472
674
|
verifyDefaultOptions(locals.options);
|
|
473
|
-
}
|
|
675
|
+
},
|
|
474
676
|
},
|
|
475
677
|
'passing false boolean': {
|
|
476
|
-
topic: function() {
|
|
678
|
+
topic: function () {
|
|
477
679
|
return new Locals(false, logger);
|
|
478
680
|
},
|
|
479
|
-
'should use defaults': function(locals) {
|
|
681
|
+
'should use defaults': function (locals) {
|
|
480
682
|
verifyDefaultOptions(locals.options);
|
|
481
|
-
}
|
|
683
|
+
},
|
|
482
684
|
},
|
|
483
685
|
'passing empty object': {
|
|
484
|
-
topic: function() {
|
|
686
|
+
topic: function () {
|
|
485
687
|
return new Locals({}, logger);
|
|
486
688
|
},
|
|
487
|
-
'should use defaults': function(locals) {
|
|
689
|
+
'should use defaults': function (locals) {
|
|
488
690
|
verifyDefaultOptions(locals.options);
|
|
489
|
-
}
|
|
691
|
+
},
|
|
490
692
|
},
|
|
491
693
|
'passing depth option': {
|
|
492
|
-
topic: function() {
|
|
694
|
+
topic: function () {
|
|
493
695
|
return new Locals({ depth: 0 }, logger);
|
|
494
696
|
},
|
|
495
|
-
'should use updated depth with remaining defaults': function(locals) {
|
|
697
|
+
'should use updated depth with remaining defaults': function (locals) {
|
|
496
698
|
var options = locals.options;
|
|
497
699
|
|
|
498
700
|
assert.equal(options.enabled, true);
|
|
@@ -500,13 +702,15 @@ vows.describe('locals')
|
|
|
500
702
|
assert.equal(options.depth, 0);
|
|
501
703
|
assert.equal(options.maxProperties, 30);
|
|
502
704
|
assert.equal(options.maxArray, 5);
|
|
503
|
-
}
|
|
705
|
+
},
|
|
504
706
|
},
|
|
505
707
|
'passing enabled option': {
|
|
506
|
-
topic: function() {
|
|
708
|
+
topic: function () {
|
|
507
709
|
return new Locals({ enabled: false }, logger);
|
|
508
710
|
},
|
|
509
|
-
'should use updated enabled with remaining defaults': function(
|
|
711
|
+
'should use updated enabled with remaining defaults': function (
|
|
712
|
+
locals,
|
|
713
|
+
) {
|
|
510
714
|
var options = locals.options;
|
|
511
715
|
|
|
512
716
|
assert.equal(options.enabled, false);
|
|
@@ -514,13 +718,15 @@ vows.describe('locals')
|
|
|
514
718
|
assert.equal(options.depth, 1);
|
|
515
719
|
assert.equal(options.maxProperties, 30);
|
|
516
720
|
assert.equal(options.maxArray, 5);
|
|
517
|
-
}
|
|
721
|
+
},
|
|
518
722
|
},
|
|
519
723
|
'passing uncaughtOnly option': {
|
|
520
|
-
topic: function() {
|
|
724
|
+
topic: function () {
|
|
521
725
|
return new Locals({ uncaughtOnly: false }, logger);
|
|
522
726
|
},
|
|
523
|
-
'should use updated uncaughtOnly with remaining defaults': function(
|
|
727
|
+
'should use updated uncaughtOnly with remaining defaults': function (
|
|
728
|
+
locals,
|
|
729
|
+
) {
|
|
524
730
|
var options = locals.options;
|
|
525
731
|
|
|
526
732
|
assert.equal(options.enabled, true);
|
|
@@ -528,19 +734,22 @@ vows.describe('locals')
|
|
|
528
734
|
assert.equal(options.depth, 1);
|
|
529
735
|
assert.equal(options.maxProperties, 30);
|
|
530
736
|
assert.equal(options.maxArray, 5);
|
|
531
|
-
}
|
|
737
|
+
},
|
|
532
738
|
},
|
|
533
739
|
'passing all options': {
|
|
534
|
-
topic: function() {
|
|
535
|
-
return new Locals(
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
740
|
+
topic: function () {
|
|
741
|
+
return new Locals(
|
|
742
|
+
{
|
|
743
|
+
enabled: false,
|
|
744
|
+
uncaughtOnly: false,
|
|
745
|
+
depth: 2,
|
|
746
|
+
maxProperties: 15,
|
|
747
|
+
maxArray: 10,
|
|
748
|
+
},
|
|
749
|
+
logger,
|
|
750
|
+
);
|
|
542
751
|
},
|
|
543
|
-
'should use updated options': function(locals) {
|
|
752
|
+
'should use updated options': function (locals) {
|
|
544
753
|
var options = locals.options;
|
|
545
754
|
|
|
546
755
|
assert.equal(options.enabled, false);
|
|
@@ -548,16 +757,16 @@ vows.describe('locals')
|
|
|
548
757
|
assert.equal(options.depth, 2);
|
|
549
758
|
assert.equal(options.maxProperties, 15);
|
|
550
759
|
assert.equal(options.maxArray, 10);
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
}
|
|
760
|
+
},
|
|
761
|
+
},
|
|
762
|
+
},
|
|
554
763
|
})
|
|
555
764
|
|
|
556
765
|
// The following tests stub a singleton (Locals.session.post()), and need to run sequentially.
|
|
557
766
|
// One way to do this in vows is to put each in a separate batch.
|
|
558
767
|
.addBatch({
|
|
559
768
|
'mergeLocals returns error from session.post()': {
|
|
560
|
-
topic: function() {
|
|
769
|
+
topic: function () {
|
|
561
770
|
var locals = new Locals({}, logger);
|
|
562
771
|
var err = new Error('post error');
|
|
563
772
|
sinon.stub(Locals.session, 'post').yields(err);
|
|
@@ -570,13 +779,13 @@ vows.describe('locals')
|
|
|
570
779
|
|
|
571
780
|
locals.mergeLocals(localsMap, stack, key, this.callback);
|
|
572
781
|
},
|
|
573
|
-
'should callback with error': function(err) {
|
|
782
|
+
'should callback with error': function (err) {
|
|
574
783
|
assert.instanceOf(err, Error);
|
|
575
784
|
assert.isTrue(err.stack.startsWith('Error: post error'));
|
|
576
785
|
assert.equal(err.message, 'post error');
|
|
577
786
|
sinon.restore();
|
|
578
|
-
}
|
|
579
|
-
}
|
|
787
|
+
},
|
|
788
|
+
},
|
|
580
789
|
})
|
|
581
790
|
.addBatch({
|
|
582
791
|
'mergeLocals called with multiple/complex locals maps present': {
|
|
@@ -585,7 +794,7 @@ vows.describe('locals')
|
|
|
585
794
|
// * Intended locals map key isn't the first or only entry.
|
|
586
795
|
// * Other scopes besides type: 'local' are present.
|
|
587
796
|
// * Transpiled code (Typescript) present in stack
|
|
588
|
-
topic: function() {
|
|
797
|
+
topic: function () {
|
|
589
798
|
var getPropertiesResponses = {
|
|
590
799
|
objectId1: [
|
|
591
800
|
localsFixtures.locals.object1,
|
|
@@ -599,10 +808,12 @@ vows.describe('locals')
|
|
|
599
808
|
localsFixtures.locals.string1,
|
|
600
809
|
localsFixtures.locals.array1,
|
|
601
810
|
],
|
|
602
|
-
}
|
|
811
|
+
};
|
|
603
812
|
|
|
604
813
|
var locals = new Locals({ depth: 0 }, logger);
|
|
605
|
-
sinon
|
|
814
|
+
sinon
|
|
815
|
+
.stub(Locals.session, 'post')
|
|
816
|
+
.callsFake(fakeSessionPostHandler(getPropertiesResponses));
|
|
606
817
|
|
|
607
818
|
var key1 = 'key1';
|
|
608
819
|
var key2 = 'key2';
|
|
@@ -615,11 +826,11 @@ vows.describe('locals')
|
|
|
615
826
|
var stack = cloneStack(localsFixtures.stacks.complex);
|
|
616
827
|
|
|
617
828
|
var self = this;
|
|
618
|
-
locals.mergeLocals(localsMap, stack, key2, function(err) {
|
|
829
|
+
locals.mergeLocals(localsMap, stack, key2, function (err) {
|
|
619
830
|
self.callback(err, stack);
|
|
620
831
|
});
|
|
621
832
|
},
|
|
622
|
-
'should callback with merged locals': function(err, stack) {
|
|
833
|
+
'should callback with merged locals': function (err, stack) {
|
|
623
834
|
if (err) {
|
|
624
835
|
// Ensure unexpected error can be seen.
|
|
625
836
|
console.log(err);
|
|
@@ -634,21 +845,23 @@ vows.describe('locals')
|
|
|
634
845
|
assert.equal(stack[2].locals.bar, '<BarClass object>');
|
|
635
846
|
|
|
636
847
|
sinon.restore();
|
|
637
|
-
}
|
|
638
|
-
}
|
|
848
|
+
},
|
|
849
|
+
},
|
|
639
850
|
})
|
|
640
851
|
.addBatch({
|
|
641
852
|
'mergeLocals called with simple locals maps present': {
|
|
642
|
-
topic: function() {
|
|
853
|
+
topic: function () {
|
|
643
854
|
var getPropertiesResponses = {
|
|
644
855
|
objectId1: [
|
|
645
856
|
localsFixtures.locals.object1,
|
|
646
857
|
localsFixtures.locals.object2,
|
|
647
|
-
]
|
|
648
|
-
}
|
|
858
|
+
],
|
|
859
|
+
};
|
|
649
860
|
|
|
650
861
|
var locals = new Locals({ depth: 0 }, logger);
|
|
651
|
-
sinon
|
|
862
|
+
sinon
|
|
863
|
+
.stub(Locals.session, 'post')
|
|
864
|
+
.callsFake(fakeSessionPostHandler(getPropertiesResponses));
|
|
652
865
|
|
|
653
866
|
var key = 'key';
|
|
654
867
|
var localsMap = new Map();
|
|
@@ -658,11 +871,11 @@ vows.describe('locals')
|
|
|
658
871
|
var stack = cloneStack(localsFixtures.stacks.simple);
|
|
659
872
|
|
|
660
873
|
var self = this;
|
|
661
|
-
locals.mergeLocals(localsMap, stack, key, function(err) {
|
|
874
|
+
locals.mergeLocals(localsMap, stack, key, function (err) {
|
|
662
875
|
self.callback(err, stack);
|
|
663
876
|
});
|
|
664
877
|
},
|
|
665
|
-
'should callback with merged locals': function(err, stack) {
|
|
878
|
+
'should callback with merged locals': function (err, stack) {
|
|
666
879
|
if (err) {
|
|
667
880
|
// Ensure unexpected error can be seen.
|
|
668
881
|
console.log(err);
|
|
@@ -673,12 +886,12 @@ vows.describe('locals')
|
|
|
673
886
|
assert.equal(stack[0].locals.bar, '<BarClass object>');
|
|
674
887
|
|
|
675
888
|
sinon.restore();
|
|
676
|
-
}
|
|
677
|
-
}
|
|
889
|
+
},
|
|
890
|
+
},
|
|
678
891
|
})
|
|
679
892
|
.addBatch({
|
|
680
893
|
'mergeLocals called with depth = 1': {
|
|
681
|
-
topic: function() {
|
|
894
|
+
topic: function () {
|
|
682
895
|
var getPropertiesResponses = {
|
|
683
896
|
objectId1: [
|
|
684
897
|
localsFixtures.locals.object1,
|
|
@@ -693,11 +906,13 @@ vows.describe('locals')
|
|
|
693
906
|
localsFixtures.locals.array1,
|
|
694
907
|
localsFixtures.locals.null1,
|
|
695
908
|
localsFixtures.locals.function2,
|
|
696
|
-
]
|
|
697
|
-
}
|
|
909
|
+
],
|
|
910
|
+
};
|
|
698
911
|
|
|
699
912
|
var locals = new Locals({ depth: 1 }, logger);
|
|
700
|
-
sinon
|
|
913
|
+
sinon
|
|
914
|
+
.stub(Locals.session, 'post')
|
|
915
|
+
.callsFake(fakeSessionPostHandler(getPropertiesResponses));
|
|
701
916
|
|
|
702
917
|
var key = 'key';
|
|
703
918
|
var localsMap = new Map();
|
|
@@ -707,27 +922,35 @@ vows.describe('locals')
|
|
|
707
922
|
var stack = cloneStack(localsFixtures.stacks.simple);
|
|
708
923
|
|
|
709
924
|
var self = this;
|
|
710
|
-
locals.mergeLocals(localsMap, stack, key, function(err) {
|
|
925
|
+
locals.mergeLocals(localsMap, stack, key, function (err) {
|
|
711
926
|
self.callback(err, stack);
|
|
712
927
|
});
|
|
713
928
|
},
|
|
714
|
-
'should callback with merged locals': function(err, stack) {
|
|
929
|
+
'should callback with merged locals': function (err, stack) {
|
|
715
930
|
if (err) {
|
|
716
931
|
// Ensure unexpected error can be seen.
|
|
717
932
|
console.log(err);
|
|
718
933
|
}
|
|
719
934
|
assert.isNull(err);
|
|
720
935
|
|
|
721
|
-
assert.deepEqual(stack[0].locals.foo, {
|
|
722
|
-
|
|
936
|
+
assert.deepEqual(stack[0].locals.foo, {
|
|
937
|
+
response: 'success',
|
|
938
|
+
old: false,
|
|
939
|
+
func: '<Function object>',
|
|
940
|
+
});
|
|
941
|
+
assert.deepEqual(stack[0].locals.bar, {
|
|
942
|
+
args: '<Array object>',
|
|
943
|
+
parent: null,
|
|
944
|
+
asyncFunc: '<AsyncFunction object>',
|
|
945
|
+
});
|
|
723
946
|
|
|
724
947
|
sinon.restore();
|
|
725
|
-
}
|
|
726
|
-
}
|
|
948
|
+
},
|
|
949
|
+
},
|
|
727
950
|
})
|
|
728
951
|
.addBatch({
|
|
729
952
|
'mergeLocals called with no locals maps present': {
|
|
730
|
-
topic: function() {
|
|
953
|
+
topic: function () {
|
|
731
954
|
var getPropertiesResponses = {
|
|
732
955
|
objectId1: [
|
|
733
956
|
localsFixtures.locals.object1,
|
|
@@ -741,10 +964,12 @@ vows.describe('locals')
|
|
|
741
964
|
localsFixtures.locals.string1,
|
|
742
965
|
localsFixtures.locals.array1,
|
|
743
966
|
],
|
|
744
|
-
}
|
|
967
|
+
};
|
|
745
968
|
|
|
746
969
|
var locals = new Locals({}, logger);
|
|
747
|
-
sinon
|
|
970
|
+
sinon
|
|
971
|
+
.stub(Locals.session, 'post')
|
|
972
|
+
.callsFake(fakeSessionPostHandler(getPropertiesResponses));
|
|
748
973
|
|
|
749
974
|
// Test with no maps present. 'key' won't match anything.
|
|
750
975
|
var key = 'key';
|
|
@@ -753,11 +978,11 @@ vows.describe('locals')
|
|
|
753
978
|
var stack = cloneStack(localsFixtures.stacks.complex);
|
|
754
979
|
|
|
755
980
|
var self = this;
|
|
756
|
-
locals.mergeLocals(localsMap, stack, key, function(err) {
|
|
981
|
+
locals.mergeLocals(localsMap, stack, key, function (err) {
|
|
757
982
|
self.callback(err, stack);
|
|
758
983
|
});
|
|
759
984
|
},
|
|
760
|
-
'should succeed without merged locals': function(err, stack) {
|
|
985
|
+
'should succeed without merged locals': function (err, stack) {
|
|
761
986
|
if (err) {
|
|
762
987
|
// Ensure unexpected error can be seen.
|
|
763
988
|
console.log(err);
|
|
@@ -769,12 +994,12 @@ vows.describe('locals')
|
|
|
769
994
|
assert.equal(stack[2].locals, undefined);
|
|
770
995
|
|
|
771
996
|
sinon.restore();
|
|
772
|
-
}
|
|
773
|
-
}
|
|
997
|
+
},
|
|
998
|
+
},
|
|
774
999
|
})
|
|
775
1000
|
.addBatch({
|
|
776
1001
|
'mergeLocals called with no local scopes in map': {
|
|
777
|
-
topic: function() {
|
|
1002
|
+
topic: function () {
|
|
778
1003
|
var getPropertiesResponses = {
|
|
779
1004
|
objectId1: [
|
|
780
1005
|
localsFixtures.locals.object1,
|
|
@@ -788,10 +1013,12 @@ vows.describe('locals')
|
|
|
788
1013
|
localsFixtures.locals.string1,
|
|
789
1014
|
localsFixtures.locals.array1,
|
|
790
1015
|
],
|
|
791
|
-
}
|
|
1016
|
+
};
|
|
792
1017
|
|
|
793
1018
|
var locals = new Locals({}, logger);
|
|
794
|
-
sinon
|
|
1019
|
+
sinon
|
|
1020
|
+
.stub(Locals.session, 'post')
|
|
1021
|
+
.callsFake(fakeSessionPostHandler(getPropertiesResponses));
|
|
795
1022
|
|
|
796
1023
|
var key = 'key';
|
|
797
1024
|
var localsMap = new Map();
|
|
@@ -801,11 +1028,11 @@ vows.describe('locals')
|
|
|
801
1028
|
var stack = cloneStack(localsFixtures.stacks.complex);
|
|
802
1029
|
|
|
803
1030
|
var self = this;
|
|
804
|
-
locals.mergeLocals(localsMap, stack, key, function(err) {
|
|
1031
|
+
locals.mergeLocals(localsMap, stack, key, function (err) {
|
|
805
1032
|
self.callback(err, stack);
|
|
806
1033
|
});
|
|
807
1034
|
},
|
|
808
|
-
'should succeed without merged locals': function(err, stack) {
|
|
1035
|
+
'should succeed without merged locals': function (err, stack) {
|
|
809
1036
|
if (err) {
|
|
810
1037
|
// Ensure unexpected error can be seen.
|
|
811
1038
|
console.log(err);
|
|
@@ -817,12 +1044,12 @@ vows.describe('locals')
|
|
|
817
1044
|
assert.equal(stack[2].locals, undefined);
|
|
818
1045
|
|
|
819
1046
|
sinon.restore();
|
|
820
|
-
}
|
|
821
|
-
}
|
|
1047
|
+
},
|
|
1048
|
+
},
|
|
822
1049
|
})
|
|
823
1050
|
.addBatch({
|
|
824
1051
|
'currentLocalsMap called with no local scopes in map': {
|
|
825
|
-
topic: function() {
|
|
1052
|
+
topic: function () {
|
|
826
1053
|
var locals = new Locals({}, logger);
|
|
827
1054
|
|
|
828
1055
|
// Ensure empty map, as vows uses the same class object between tests.
|
|
@@ -830,12 +1057,12 @@ vows.describe('locals')
|
|
|
830
1057
|
|
|
831
1058
|
return locals;
|
|
832
1059
|
},
|
|
833
|
-
'should return empty map': function(locals) {
|
|
1060
|
+
'should return empty map': function (locals) {
|
|
834
1061
|
var localsMap = locals.currentLocalsMap();
|
|
835
1062
|
|
|
836
1063
|
assert.instanceOf(localsMap, Map);
|
|
837
1064
|
assert.equal(localsMap.size, 0);
|
|
838
|
-
}
|
|
839
|
-
}
|
|
1065
|
+
},
|
|
1066
|
+
},
|
|
840
1067
|
})
|
|
841
|
-
.export(module, {error: false});
|
|
1068
|
+
.export(module, { error: false });
|