@react-native-windows/telemetry 0.68.0-preview.2 → 0.68.2
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/lib-commonjs/{test → e2etest}/telemetry.test.d.ts +5 -3
- package/lib-commonjs/{test → e2etest}/telemetry.test.js +77 -47
- package/lib-commonjs/e2etest/telemetry.test.js.map +1 -0
- package/lib-commonjs/telemetry.js +39 -13
- package/lib-commonjs/telemetry.js.map +1 -1
- package/lib-commonjs/test/basePropUtils.test.js +12 -0
- package/lib-commonjs/test/basePropUtils.test.js.map +1 -1
- package/lib-commonjs/test/errorUtils.test.js +3 -0
- package/lib-commonjs/test/errorUtils.test.js.map +1 -1
- package/lib-commonjs/utils/basePropUtils.d.ts +10 -0
- package/lib-commonjs/utils/basePropUtils.js +17 -1
- package/lib-commonjs/utils/basePropUtils.js.map +1 -1
- package/lib-commonjs/utils/errorUtils.js +2 -0
- package/lib-commonjs/utils/errorUtils.js.map +1 -1
- package/lib-commonjs/utils/sanitizeUtils.js +1 -1
- package/lib-commonjs/utils/sanitizeUtils.js.map +1 -1
- package/package.json +6 -6
- package/lib-commonjs/test/telemetry.test.js.map +0 -1
|
@@ -5,20 +5,22 @@
|
|
|
5
5
|
* @format
|
|
6
6
|
*/
|
|
7
7
|
import * as appInsights from 'applicationinsights';
|
|
8
|
-
import { Telemetry } from '../telemetry';
|
|
8
|
+
import { Telemetry, TelemetryOptions } from '../telemetry';
|
|
9
9
|
export declare class TelemetryTest extends Telemetry {
|
|
10
10
|
protected static hasTestTelemetryProviders: boolean;
|
|
11
11
|
protected static testTelemetryProvidersRan: boolean;
|
|
12
12
|
/** Run at the beginning of each test. */
|
|
13
|
-
static startTest(): Promise<void>;
|
|
13
|
+
static startTest(options?: Partial<TelemetryOptions>): Promise<void>;
|
|
14
14
|
/** Run at the end of each test where telemetry was fired. */
|
|
15
|
-
static endTest(finalCallback
|
|
15
|
+
static endTest(finalCallback?: () => void): void;
|
|
16
16
|
/** Sets that the telemetry provider has run. */
|
|
17
17
|
static setTestTelemetryProvidersRan(): void;
|
|
18
18
|
/** Retrieves the value of a common property.*/
|
|
19
19
|
static getCommonProperty(key: string): string | undefined;
|
|
20
20
|
/** Retrieves the version of the specified tool/package. */
|
|
21
21
|
static getVersion(key: string): string | null;
|
|
22
|
+
/** Retrieves the value of the preserveErrorMessages option. */
|
|
23
|
+
static getPreserveErrorMessages(): boolean;
|
|
22
24
|
/** Adds a telemetry processor, usually for verifying the envelope. */
|
|
23
25
|
static addTelemetryProcessor(telemetryProcessor: (envelope: appInsights.Contracts.EnvelopeTelemetry, contextObjects?: {
|
|
24
26
|
[name: string]: any;
|
|
@@ -24,12 +24,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
__setModuleDefault(result, mod);
|
|
25
25
|
return result;
|
|
26
26
|
};
|
|
27
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
29
|
-
};
|
|
30
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
28
|
exports.TelemetryTest = void 0;
|
|
32
|
-
const CorrelationIdManager_1 = __importDefault(require("applicationinsights/out/Library/CorrelationIdManager"));
|
|
33
29
|
const path = __importStar(require("path"));
|
|
34
30
|
const telemetry_1 = require("../telemetry");
|
|
35
31
|
const basePropUtils = __importStar(require("../utils/basePropUtils"));
|
|
@@ -38,19 +34,15 @@ const projectUtils = __importStar(require("../utils/projectUtils"));
|
|
|
38
34
|
const versionUtils = __importStar(require("../utils/versionUtils"));
|
|
39
35
|
class TelemetryTest extends telemetry_1.Telemetry {
|
|
40
36
|
/** Run at the beginning of each test. */
|
|
41
|
-
static async startTest() {
|
|
37
|
+
static async startTest(options) {
|
|
42
38
|
TelemetryTest.hasTestTelemetryProviders = false;
|
|
43
39
|
TelemetryTest.testTelemetryProvidersRan = false;
|
|
44
|
-
jest.setTimeout(10000); // These E2E tests can run longer than the default 5000ms
|
|
45
40
|
if (TelemetryTest.isEnabled()) {
|
|
46
41
|
telemetry_1.Telemetry.reset();
|
|
47
42
|
}
|
|
48
43
|
// Ensure that we don't actually fire events when testing
|
|
49
44
|
telemetry_1.Telemetry.isTest = true;
|
|
50
|
-
await telemetry_1.Telemetry.setup(
|
|
51
|
-
// Workaround for https://github.com/microsoft/ApplicationInsights-node.js/issues/833
|
|
52
|
-
telemetry_1.Telemetry.client.config.correlationIdRetryIntervalMs = 500;
|
|
53
|
-
CorrelationIdManager_1.default.cancelCorrelationIdQuery(telemetry_1.Telemetry.client.config, () => { });
|
|
45
|
+
await telemetry_1.Telemetry.setup(options);
|
|
54
46
|
}
|
|
55
47
|
/** Run at the end of each test where telemetry was fired. */
|
|
56
48
|
static endTest(finalCallback) {
|
|
@@ -60,7 +52,9 @@ class TelemetryTest extends telemetry_1.Telemetry {
|
|
|
60
52
|
if (TelemetryTest.hasTestTelemetryProviders) {
|
|
61
53
|
expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);
|
|
62
54
|
}
|
|
63
|
-
finalCallback
|
|
55
|
+
if (finalCallback) {
|
|
56
|
+
finalCallback();
|
|
57
|
+
}
|
|
64
58
|
},
|
|
65
59
|
});
|
|
66
60
|
}
|
|
@@ -79,6 +73,10 @@ class TelemetryTest extends telemetry_1.Telemetry {
|
|
|
79
73
|
? TelemetryTest.versionsProp[key]
|
|
80
74
|
: null;
|
|
81
75
|
}
|
|
76
|
+
/** Retrieves the value of the preserveErrorMessages option. */
|
|
77
|
+
static getPreserveErrorMessages() {
|
|
78
|
+
return TelemetryTest.options.preserveErrorMessages;
|
|
79
|
+
}
|
|
82
80
|
/** Adds a telemetry processor, usually for verifying the envelope. */
|
|
83
81
|
static addTelemetryProcessor(telemetryProcessor) {
|
|
84
82
|
var _a;
|
|
@@ -87,54 +85,63 @@ class TelemetryTest extends telemetry_1.Telemetry {
|
|
|
87
85
|
}
|
|
88
86
|
}
|
|
89
87
|
exports.TelemetryTest = TelemetryTest;
|
|
90
|
-
|
|
88
|
+
test('setup() verify session id is valid and a common property', async (done) => {
|
|
91
89
|
await TelemetryTest.startTest();
|
|
92
|
-
});
|
|
93
|
-
test('setup() verify session id is valid and a common property', async () => {
|
|
94
90
|
const sessionId = TelemetryTest.getSessionId();
|
|
95
91
|
expect(sessionId).toBeDefined();
|
|
96
92
|
expect(sessionId).toHaveLength(32);
|
|
97
93
|
expect(sessionId).toBe(basePropUtils.getSessionId());
|
|
98
|
-
expect(
|
|
94
|
+
expect(TelemetryTest.getCommonProperty('sessionId')).toBe(sessionId);
|
|
95
|
+
TelemetryTest.endTest(done);
|
|
99
96
|
});
|
|
100
|
-
test('setup() verify static common property values with async sources', async () => {
|
|
97
|
+
test('setup() verify static common property values with async sources', async (done) => {
|
|
98
|
+
await TelemetryTest.startTest();
|
|
101
99
|
const props = {
|
|
102
100
|
deviceId: basePropUtils.deviceId,
|
|
103
101
|
deviceLocale: basePropUtils.deviceLocale,
|
|
104
102
|
};
|
|
105
103
|
for (const key in props) {
|
|
106
104
|
if (!(key in Object.prototype)) {
|
|
107
|
-
const value =
|
|
105
|
+
const value = TelemetryTest.getCommonProperty(key);
|
|
108
106
|
expect(value).toBeDefined();
|
|
109
|
-
expect(value).toBe(
|
|
107
|
+
expect(value).toBe(await props[key]());
|
|
110
108
|
}
|
|
111
109
|
}
|
|
110
|
+
TelemetryTest.endTest(done);
|
|
112
111
|
});
|
|
113
|
-
test('setup() verify static common property values with sync sources', () => {
|
|
112
|
+
test('setup() verify static common property values with sync sources', async (done) => {
|
|
113
|
+
await TelemetryTest.startTest();
|
|
114
114
|
const props = {
|
|
115
|
+
deviceArchitecture: () => basePropUtils.deviceArchitecture(),
|
|
116
|
+
devicePlatform: () => basePropUtils.devicePlatform(),
|
|
115
117
|
deviceNumCPUs: () => basePropUtils.deviceNumCPUs().toString(),
|
|
116
118
|
deviceTotalMemory: () => basePropUtils.deviceTotalMemory().toString(),
|
|
117
119
|
ciCaptured: () => basePropUtils.captureCI().toString(),
|
|
118
120
|
ciType: () => basePropUtils.ciType(),
|
|
119
121
|
isMsftInternal: () => basePropUtils.isMsftInternal().toString(),
|
|
122
|
+
sampleRate: () => basePropUtils.sampleRate().toString(),
|
|
120
123
|
isTest: () => 'true',
|
|
121
124
|
};
|
|
122
125
|
for (const key in props) {
|
|
123
126
|
if (!(key in Object.prototype)) {
|
|
124
|
-
const value =
|
|
127
|
+
const value = TelemetryTest.getCommonProperty(key);
|
|
125
128
|
expect(value).toBeDefined();
|
|
126
|
-
expect(value).toBe(
|
|
129
|
+
expect(value).toBe(props[key]());
|
|
127
130
|
}
|
|
128
131
|
}
|
|
132
|
+
TelemetryTest.endTest(done);
|
|
129
133
|
});
|
|
130
|
-
test('setup() verify other common property values are defined', () => {
|
|
134
|
+
test('setup() verify other common property values are defined', async (done) => {
|
|
135
|
+
await TelemetryTest.startTest();
|
|
131
136
|
const props = ['deviceDiskFreeSpace'];
|
|
132
137
|
for (const key of props) {
|
|
133
138
|
const value = TelemetryTest.getCommonProperty(key);
|
|
134
139
|
expect(value).toBeDefined();
|
|
135
140
|
}
|
|
141
|
+
TelemetryTest.endTest(done);
|
|
136
142
|
});
|
|
137
|
-
test('setup() verify tool versions are populated', async () => {
|
|
143
|
+
test('setup() verify tool versions are populated', async (done) => {
|
|
144
|
+
await TelemetryTest.startTest();
|
|
138
145
|
const props = {
|
|
139
146
|
node: versionUtils.getNodeVersion,
|
|
140
147
|
npm: versionUtils.getNpmVersion,
|
|
@@ -147,14 +154,18 @@ test('setup() verify tool versions are populated', async () => {
|
|
|
147
154
|
expect(value).toBe(TelemetryTest.getVersion(key));
|
|
148
155
|
}
|
|
149
156
|
}
|
|
157
|
+
TelemetryTest.endTest(done);
|
|
150
158
|
});
|
|
151
|
-
test('tryUpdateVersionsProp() returns true for adding a new version', async () => {
|
|
159
|
+
test('tryUpdateVersionsProp() returns true for adding a new version', async (done) => {
|
|
160
|
+
await TelemetryTest.startTest();
|
|
152
161
|
const name = 'test';
|
|
153
162
|
const version = '1.0';
|
|
154
163
|
expect(await TelemetryTest.tryUpdateVersionsProp(name, async () => version)).toBe(true);
|
|
155
164
|
expect(TelemetryTest.getVersion(name)).toBe(version);
|
|
165
|
+
TelemetryTest.endTest(done);
|
|
156
166
|
});
|
|
157
|
-
test('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async () => {
|
|
167
|
+
test('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async (done) => {
|
|
168
|
+
await TelemetryTest.startTest();
|
|
158
169
|
const name = 'test';
|
|
159
170
|
const version = '1.0';
|
|
160
171
|
expect(await TelemetryTest.tryUpdateVersionsProp(name, async () => version)).toBe(true);
|
|
@@ -164,8 +175,10 @@ test('tryUpdateVersionsProp() returns false for adding an existing version with
|
|
|
164
175
|
return version;
|
|
165
176
|
})).toBe(false);
|
|
166
177
|
expect(getValueCalled).toBe(false);
|
|
178
|
+
TelemetryTest.endTest(done);
|
|
167
179
|
});
|
|
168
|
-
test('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async () => {
|
|
180
|
+
test('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async (done) => {
|
|
181
|
+
await TelemetryTest.startTest();
|
|
169
182
|
const name = 'test';
|
|
170
183
|
const version = '1.0';
|
|
171
184
|
expect(await TelemetryTest.tryUpdateVersionsProp(name, async () => version)).toBe(true);
|
|
@@ -175,6 +188,7 @@ test('tryUpdateVersionsProp() returns true for adding an existing version with r
|
|
|
175
188
|
return version;
|
|
176
189
|
}, true)).toBe(true);
|
|
177
190
|
expect(getValueCalled).toBe(true);
|
|
191
|
+
TelemetryTest.endTest(done);
|
|
178
192
|
});
|
|
179
193
|
/** Returns the CommandStartInfo for our fake 'test-command'. */
|
|
180
194
|
function getTestCommandStartInfo() {
|
|
@@ -268,7 +282,7 @@ async function runTestCommandE2E(commandBody) {
|
|
|
268
282
|
/** Verifys the contents of events fired during the 'test-command'. */
|
|
269
283
|
function verifyTestCommandTelemetryProcessor(caughtErrors, expectedResultCode, expectedError) {
|
|
270
284
|
return (envelope, _) => {
|
|
271
|
-
var _a, _b, _c, _d
|
|
285
|
+
var _a, _b, _c, _d;
|
|
272
286
|
try {
|
|
273
287
|
// Processor has run, so the test can (potentially) pass
|
|
274
288
|
TelemetryTest.setTestTelemetryProvidersRan();
|
|
@@ -291,18 +305,26 @@ function verifyTestCommandTelemetryProcessor(caughtErrors, expectedResultCode, e
|
|
|
291
305
|
if (envelope.data.baseType === 'ExceptionData') {
|
|
292
306
|
// Verify event name
|
|
293
307
|
expect(properties.eventName).toBe(telemetry_1.CodedErrorEventName);
|
|
308
|
+
// Verify exception info
|
|
309
|
+
const exceptions = (_b = envelope.data.baseData) === null || _b === void 0 ? void 0 : _b.exceptions;
|
|
310
|
+
expect(exceptions).toBeDefined();
|
|
311
|
+
expect(exceptions.length).toBe(1);
|
|
312
|
+
expect(exceptions[0].message).toBeDefined();
|
|
313
|
+
expect(exceptions[0].message).not.toBe('');
|
|
314
|
+
expect(exceptions[0].message).toBe(TelemetryTest.getPreserveErrorMessages()
|
|
315
|
+
? errorUtils.sanitizeErrorMessage((expectedError === null || expectedError === void 0 ? void 0 : expectedError.message) || 'None')
|
|
316
|
+
: '[Removed]');
|
|
294
317
|
// Verify coded error info
|
|
295
318
|
const codedError = JSON.parse(properties.codedError);
|
|
296
319
|
expect(codedError).toBeDefined();
|
|
297
320
|
expect(codedError.type).toBe(expectedError instanceof errorUtils.CodedError
|
|
298
321
|
? expectedError.type
|
|
299
322
|
: 'Unknown');
|
|
300
|
-
expect(codedError.
|
|
301
|
-
expect(codedError.data).toStrictEqual((_d = expectedError.data) !== null && _d !== void 0 ? _d : {});
|
|
323
|
+
expect(codedError.data).toStrictEqual((_c = expectedError.data) !== null && _c !== void 0 ? _c : {});
|
|
302
324
|
}
|
|
303
325
|
else {
|
|
304
326
|
// Verify event name
|
|
305
|
-
expect((
|
|
327
|
+
expect((_d = envelope.data.baseData) === null || _d === void 0 ? void 0 : _d.name).toBe(telemetry_1.CommandEventName);
|
|
306
328
|
expect(properties.eventName).toBe(telemetry_1.CommandEventName);
|
|
307
329
|
// Verify command info
|
|
308
330
|
const expectedInfo = getTestCommandStartInfo();
|
|
@@ -315,15 +337,7 @@ function verifyTestCommandTelemetryProcessor(caughtErrors, expectedResultCode, e
|
|
|
315
337
|
expect(command.resultCode).toBe(expectedResultCode !== null && expectedResultCode !== void 0 ? expectedResultCode : 'Success');
|
|
316
338
|
// Verify extra props
|
|
317
339
|
const extraProps = getExtraProps();
|
|
318
|
-
|
|
319
|
-
switch (typeof extraProps[key]) {
|
|
320
|
-
case 'object':
|
|
321
|
-
expect(JSON.parse(properties[key])).toStrictEqual(extraProps[key]);
|
|
322
|
-
break;
|
|
323
|
-
default:
|
|
324
|
-
expect(properties[key]).toBe(extraProps[key].toString());
|
|
325
|
-
}
|
|
326
|
-
}
|
|
340
|
+
expect(JSON.parse(properties.extraProps)).toStrictEqual(extraProps);
|
|
327
341
|
}
|
|
328
342
|
}
|
|
329
343
|
catch (ex) {
|
|
@@ -333,6 +347,7 @@ function verifyTestCommandTelemetryProcessor(caughtErrors, expectedResultCode, e
|
|
|
333
347
|
};
|
|
334
348
|
}
|
|
335
349
|
test('Telemetry run test command end to end, verify event fires', async (done) => {
|
|
350
|
+
await TelemetryTest.startTest();
|
|
336
351
|
// AI eats errors thrown in telemetry processors
|
|
337
352
|
const caughtErrors = [];
|
|
338
353
|
TelemetryTest.addTelemetryProcessor(verifyTestCommandTelemetryProcessor(caughtErrors));
|
|
@@ -343,7 +358,12 @@ test('Telemetry run test command end to end, verify event fires', async (done) =
|
|
|
343
358
|
done();
|
|
344
359
|
});
|
|
345
360
|
});
|
|
346
|
-
|
|
361
|
+
const testTelemetryOptions = [
|
|
362
|
+
{ preserveErrorMessages: false },
|
|
363
|
+
{ preserveErrorMessages: true },
|
|
364
|
+
];
|
|
365
|
+
test.each(testTelemetryOptions)('Telemetry run test command end to end with CodedError, verify events fire %s', async (options, done) => {
|
|
366
|
+
await TelemetryTest.startTest(options);
|
|
347
367
|
const expectedError = new errorUtils.CodedError('MSBuildError', 'test error');
|
|
348
368
|
// AI eats errors thrown in telemetry processors
|
|
349
369
|
const caughtErrors = [];
|
|
@@ -355,7 +375,8 @@ test('Telemetry run test command end to end with CodedError, verify events fire'
|
|
|
355
375
|
done();
|
|
356
376
|
});
|
|
357
377
|
});
|
|
358
|
-
test('Telemetry run test command end to end with CodedError (with error in message), verify events fire', async (done) => {
|
|
378
|
+
test.each(testTelemetryOptions)('Telemetry run test command end to end with CodedError (with error in message), verify events fire %s', async (options, done) => {
|
|
379
|
+
await TelemetryTest.startTest(options);
|
|
359
380
|
const expectedError = new errorUtils.CodedError('MSBuildError', 'error FOO2020: test error');
|
|
360
381
|
// AI eats errors thrown in telemetry processors
|
|
361
382
|
const caughtErrors = [];
|
|
@@ -367,7 +388,8 @@ test('Telemetry run test command end to end with CodedError (with error in messa
|
|
|
367
388
|
done();
|
|
368
389
|
});
|
|
369
390
|
});
|
|
370
|
-
test('Telemetry run test command end to end with CodedError (with data), verify events fire', async (done) => {
|
|
391
|
+
test.each(testTelemetryOptions)('Telemetry run test command end to end with CodedError (with data), verify events fire %s', async (options, done) => {
|
|
392
|
+
await TelemetryTest.startTest(options);
|
|
371
393
|
const expectedError = new errorUtils.CodedError('MSBuildError', 'test error', { foo: 42 });
|
|
372
394
|
// AI eats errors thrown in telemetry processors
|
|
373
395
|
const caughtErrors = [];
|
|
@@ -379,7 +401,8 @@ test('Telemetry run test command end to end with CodedError (with data), verify
|
|
|
379
401
|
done();
|
|
380
402
|
});
|
|
381
403
|
});
|
|
382
|
-
test('Telemetry run test command end to end with Error, verify events fire', async (done) => {
|
|
404
|
+
test.each(testTelemetryOptions)('Telemetry run test command end to end with Error, verify events fire %s', async (options, done) => {
|
|
405
|
+
await TelemetryTest.startTest(options);
|
|
383
406
|
const expectedError = new Error('error FOO2020: test error');
|
|
384
407
|
// AI eats errors thrown in telemetry processors
|
|
385
408
|
const caughtErrors = [];
|
|
@@ -391,7 +414,8 @@ test('Telemetry run test command end to end with Error, verify events fire', asy
|
|
|
391
414
|
done();
|
|
392
415
|
});
|
|
393
416
|
});
|
|
394
|
-
test('Telemetry run test command end to end with Error (no message), verify events fire', async (done) => {
|
|
417
|
+
test.each(testTelemetryOptions)('Telemetry run test command end to end with Error (no message), verify events fire %s', async (options, done) => {
|
|
418
|
+
await TelemetryTest.startTest(options);
|
|
395
419
|
const expectedError = new Error();
|
|
396
420
|
// AI eats errors thrown in telemetry processors
|
|
397
421
|
const caughtErrors = [];
|
|
@@ -419,7 +443,11 @@ function getVerifyStackTelemetryProcessor(caughtErrors, expectedError) {
|
|
|
419
443
|
const data = envelope.data.baseData;
|
|
420
444
|
expect(data.exceptions).toBeDefined();
|
|
421
445
|
expect(data.exceptions.length).toBe(1);
|
|
422
|
-
expect(data.exceptions[0].message).
|
|
446
|
+
expect(data.exceptions[0].message).toBeDefined();
|
|
447
|
+
expect(data.exceptions[0].message).not.toBe('');
|
|
448
|
+
expect(data.exceptions[0].message).toBe(TelemetryTest.getPreserveErrorMessages()
|
|
449
|
+
? errorUtils.sanitizeErrorMessage(expectedError.message || 'None')
|
|
450
|
+
: '[Removed]');
|
|
423
451
|
const stack = data.exceptions[0].parsedStack;
|
|
424
452
|
expect(stack).toBeDefined();
|
|
425
453
|
expect(stack.length).toBeGreaterThan(2);
|
|
@@ -436,7 +464,8 @@ function getVerifyStackTelemetryProcessor(caughtErrors, expectedError) {
|
|
|
436
464
|
return true;
|
|
437
465
|
};
|
|
438
466
|
}
|
|
439
|
-
test('Telemetry run test command end to end with Error, verify sanitized message and stack', async (done) => {
|
|
467
|
+
test.each(testTelemetryOptions)('Telemetry run test command end to end with Error, verify sanitized message and stack %s', async (options, done) => {
|
|
468
|
+
await TelemetryTest.startTest(options);
|
|
440
469
|
const expectedError = new Error('hello world');
|
|
441
470
|
// AI eats errors thrown in telemetry processors
|
|
442
471
|
const caughtErrors = [];
|
|
@@ -451,7 +480,8 @@ test('Telemetry run test command end to end with Error, verify sanitized message
|
|
|
451
480
|
done();
|
|
452
481
|
});
|
|
453
482
|
});
|
|
454
|
-
test('Telemetry run test command end to end with Error, verify sanitized message with path and stack', async (done) => {
|
|
483
|
+
test.each(testTelemetryOptions)('Telemetry run test command end to end with Error, verify sanitized message with path and stack %s', async (options, done) => {
|
|
484
|
+
await TelemetryTest.startTest(options);
|
|
455
485
|
const expectedError = new Error(`hello ${process.cwd()}`);
|
|
456
486
|
// AI eats errors thrown in telemetry processors
|
|
457
487
|
const caughtErrors = [];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../src/e2etest/telemetry.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\nimport * as path from 'path';\n\nimport {\n Telemetry,\n TelemetryOptions,\n CommandStartInfo,\n CommandEndInfo,\n CommandEventName,\n CodedErrorEventName,\n} from '../telemetry';\nimport * as basePropUtils from '../utils/basePropUtils';\nimport * as errorUtils from '../utils/errorUtils';\nimport * as projectUtils from '../utils/projectUtils';\nimport * as versionUtils from '../utils/versionUtils';\n\nexport class TelemetryTest extends Telemetry {\n protected static hasTestTelemetryProviders: boolean;\n protected static testTelemetryProvidersRan: boolean;\n\n /** Run at the beginning of each test. */\n static async startTest(options?: Partial<TelemetryOptions>) {\n TelemetryTest.hasTestTelemetryProviders = false;\n TelemetryTest.testTelemetryProvidersRan = false;\n\n if (TelemetryTest.isEnabled()) {\n Telemetry.reset();\n }\n\n // Ensure that we don't actually fire events when testing\n Telemetry.isTest = true;\n\n await Telemetry.setup(options);\n }\n\n /** Run at the end of each test where telemetry was fired. */\n static endTest(finalCallback?: () => void): void {\n Telemetry.client?.flush({\n callback: (_) => {\n if (TelemetryTest.hasTestTelemetryProviders) {\n expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);\n }\n if (finalCallback) {\n finalCallback();\n }\n },\n });\n }\n\n /** Sets that the telemetry provider has run. */\n static setTestTelemetryProvidersRan() {\n TelemetryTest.testTelemetryProvidersRan = true;\n }\n\n /** Retrieves the value of a common property.*/\n static getCommonProperty(key: string): string | undefined {\n return TelemetryTest.client?.commonProperties[key];\n }\n\n /** Retrieves the version of the specified tool/package. */\n static getVersion(key: string): string | null {\n return key in TelemetryTest.versionsProp\n ? TelemetryTest.versionsProp[key]\n : null;\n }\n\n /** Retrieves the value of the preserveErrorMessages option. */\n static getPreserveErrorMessages(): boolean {\n return TelemetryTest.options.preserveErrorMessages;\n }\n\n /** Adds a telemetry processor, usually for verifying the envelope. */\n static addTelemetryProcessor(\n telemetryProcessor: (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n ) => boolean,\n ): void {\n TelemetryTest.client?.addTelemetryProcessor(telemetryProcessor);\n TelemetryTest.hasTestTelemetryProviders = true;\n }\n}\n\ntest('setup() verify session id is valid and a common property', async (done) => {\n await TelemetryTest.startTest();\n\n const sessionId = TelemetryTest.getSessionId();\n expect(sessionId).toBeDefined();\n expect(sessionId!).toHaveLength(32);\n expect(sessionId!).toBe(basePropUtils.getSessionId());\n expect(TelemetryTest.getCommonProperty('sessionId')).toBe(sessionId!);\n\n TelemetryTest.endTest(done);\n});\n\ntest('setup() verify static common property values with async sources', async (done) => {\n await TelemetryTest.startTest();\n\n const props: Record<string, () => Promise<string | undefined>> = {\n deviceId: basePropUtils.deviceId,\n deviceLocale: basePropUtils.deviceLocale,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n expect(value).toBe(await props[key]());\n }\n }\n\n TelemetryTest.endTest(done);\n});\n\ntest('setup() verify static common property values with sync sources', async (done) => {\n await TelemetryTest.startTest();\n\n const props: Record<string, () => string | undefined> = {\n deviceArchitecture: () => basePropUtils.deviceArchitecture(),\n devicePlatform: () => basePropUtils.devicePlatform(),\n deviceNumCPUs: () => basePropUtils.deviceNumCPUs().toString(),\n deviceTotalMemory: () => basePropUtils.deviceTotalMemory().toString(),\n ciCaptured: () => basePropUtils.captureCI().toString(),\n ciType: () => basePropUtils.ciType(),\n isMsftInternal: () => basePropUtils.isMsftInternal().toString(),\n sampleRate: () => basePropUtils.sampleRate().toString(),\n isTest: () => 'true',\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n expect(value).toBe(props[key]());\n }\n }\n\n TelemetryTest.endTest(done);\n});\n\ntest('setup() verify other common property values are defined', async (done) => {\n await TelemetryTest.startTest();\n\n const props: string[] = ['deviceDiskFreeSpace'];\n\n for (const key of props) {\n const value = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n }\n\n TelemetryTest.endTest(done);\n});\n\ntest('setup() verify tool versions are populated', async (done) => {\n await TelemetryTest.startTest();\n\n const props: Record<string, () => Promise<string | null>> = {\n node: versionUtils.getNodeVersion,\n npm: versionUtils.getNpmVersion,\n yarn: versionUtils.getYarnVersion,\n VisualStudio: versionUtils.getVisualStudioVersion,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = await props[key]();\n expect(value).toBe(TelemetryTest.getVersion(key));\n }\n }\n\n TelemetryTest.endTest(done);\n});\n\ntest('tryUpdateVersionsProp() returns true for adding a new version', async (done) => {\n await TelemetryTest.startTest();\n\n const name = 'test';\n const version = '1.0';\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n expect(TelemetryTest.getVersion(name)).toBe(version);\n\n TelemetryTest.endTest(done);\n});\n\ntest('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async (done) => {\n await TelemetryTest.startTest();\n\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => {\n getValueCalled = true;\n return version;\n }),\n ).toBe(false);\n\n expect(getValueCalled).toBe(false);\n\n TelemetryTest.endTest(done);\n});\n\ntest('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async (done) => {\n await TelemetryTest.startTest();\n\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(\n name,\n async () => {\n getValueCalled = true;\n return version;\n },\n true,\n ),\n ).toBe(true);\n\n expect(getValueCalled).toBe(true);\n\n TelemetryTest.endTest(done);\n});\n\n/** Returns the CommandStartInfo for our fake 'test-command'. */\nfunction getTestCommandStartInfo(): CommandStartInfo {\n return {\n commandName: 'test-command',\n args: {\n testArg1: 'true',\n testArg2: '10',\n testArg3: 'testValue',\n },\n options: {\n testArg0: 'unsetArg',\n testArg1: true,\n testArg2: 10,\n testArg3: 'testValue',\n },\n defaultOptions: {\n testArg0: 'unsetArg',\n testArg1: false,\n testArg2: 0,\n testArg3: 'defaultValue',\n },\n };\n}\n\n/** Returns the CommandEndInfo for our fake 'test-command'. */\nfunction getTestCommandEndInfo(\n resultCode: errorUtils.CodedErrorType,\n): CommandEndInfo {\n return {\n resultCode,\n };\n}\n\nfunction getTestCommandProjectInfo(): projectUtils.AppProjectInfo {\n return {\n id: projectUtils.getProjectId('test-app-project'),\n platforms: ['windows'],\n rnwLang: 'cpp',\n usesTS: true,\n usesRNConfig: false,\n jsEngine: 'Chakra',\n rnwSource: 'Source',\n dependencies: [\n {\n id: projectUtils.getProjectId('test-module-project'),\n platforms: ['android', 'windows'],\n rnwLang: 'cpp',\n },\n ],\n };\n}\n\nfunction getExtraProps(): Record<string, any> {\n return {\n extraProp1: true,\n extraProp2: 1234,\n extraProp3: 'test',\n extraProp4: ['test'],\n extraProp5: {\n nestedProp1: true,\n nestedProp2: 1234,\n },\n };\n}\n\n/** Asynchronously waits the number in ms. */\nasync function promiseDelay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** The body of the fake 'test-command' which will throw the provided error. */\nasync function testCommandBody(errorToThrow?: Error): Promise<void> {\n await promiseDelay(100);\n if (errorToThrow) {\n throw errorToThrow;\n }\n}\n\n/** Runs the complete 'test-command' with the right Telemetry setup and cleanup. */\nasync function runTestCommandE2E(commandBody: () => Promise<void>) {\n TelemetryTest.startCommand(getTestCommandStartInfo());\n TelemetryTest.setProjectInfo(getTestCommandProjectInfo());\n let errorCode: errorUtils.CodedErrorType = 'Success';\n let caughtError: Error | undefined;\n try {\n await commandBody();\n } catch (ex) {\n caughtError = ex instanceof Error ? (ex as Error) : new Error(String(ex));\n errorCode =\n caughtError instanceof errorUtils.CodedError\n ? (caughtError as errorUtils.CodedError).type\n : 'Unknown';\n TelemetryTest.trackException(caughtError);\n }\n TelemetryTest.endCommand(getTestCommandEndInfo(errorCode), getExtraProps());\n}\n\n/** Verifys the contents of events fired during the 'test-command'. */\nfunction verifyTestCommandTelemetryProcessor(\n caughtErrors: Error[],\n expectedResultCode?: errorUtils.CodedErrorType,\n expectedError?: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n // Verify roleInstance has been removed\n expect(envelope.tags['ai.cloud.roleInstance']).toBeUndefined();\n\n const properties = envelope.data.baseData?.properties;\n expect(properties).toBeDefined();\n\n // Verify basics\n expect(properties.commandName).toBe('test-command');\n\n // Verify versions info\n const versions = JSON.parse(properties.versions);\n expect(versions).toBeDefined();\n\n // Verify project info\n const project = JSON.parse(properties.project);\n expect(project).toStrictEqual(getTestCommandProjectInfo());\n\n expect(Object.keys(versions).length).toBeGreaterThan(0);\n for (const key of Object.keys(versions)) {\n expect(versions[key]).toBe(TelemetryTest.getVersion(key));\n }\n\n if (envelope.data.baseType === 'ExceptionData') {\n // Verify event name\n expect(properties.eventName).toBe(CodedErrorEventName);\n\n // Verify exception info\n const exceptions = envelope.data.baseData?.exceptions;\n expect(exceptions).toBeDefined();\n expect(exceptions.length).toBe(1);\n expect(exceptions[0].message).toBeDefined();\n expect(exceptions[0].message).not.toBe('');\n\n expect(exceptions[0].message).toBe(\n TelemetryTest.getPreserveErrorMessages()\n ? errorUtils.sanitizeErrorMessage(expectedError?.message || 'None')\n : '[Removed]',\n );\n\n // Verify coded error info\n const codedError = JSON.parse(properties.codedError);\n expect(codedError).toBeDefined();\n\n expect(codedError.type).toBe(\n expectedError instanceof errorUtils.CodedError\n ? expectedError.type\n : 'Unknown',\n );\n\n expect(codedError.data).toStrictEqual(\n (expectedError as errorUtils.CodedError).data ?? {},\n );\n } else {\n // Verify event name\n expect(envelope.data.baseData?.name).toBe(CommandEventName);\n expect(properties.eventName).toBe(CommandEventName);\n\n // Verify command info\n const expectedInfo = getTestCommandStartInfo();\n\n const command = JSON.parse(properties.command);\n expect(command).toBeDefined();\n expect(command.args).toStrictEqual(expectedInfo.args);\n expect(command.options).toStrictEqual(expectedInfo.options);\n expect(command.defaultOptions).toStrictEqual(\n expectedInfo.defaultOptions,\n );\n expect(command.durationInSecs).toBeGreaterThan(0);\n expect(command.resultCode).toBe(expectedResultCode ?? 'Success');\n\n // Verify extra props\n const extraProps = getExtraProps();\n expect(JSON.parse(properties.extraProps)).toStrictEqual(extraProps);\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest('Telemetry run test command end to end, verify event fires', async (done) => {\n await TelemetryTest.startTest();\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors),\n );\n\n await runTestCommandE2E(testCommandBody);\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\nconst testTelemetryOptions = [\n {preserveErrorMessages: false},\n {preserveErrorMessages: true},\n];\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with CodedError, verify events fire %s',\n async (options, done: any) => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'test error',\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with CodedError (with error in message), verify events fire %s',\n async (options, done: any) => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'error FOO2020: test error',\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with CodedError (with data), verify events fire %s',\n async (options, done: any) => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'test error',\n {foo: 42},\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with Error, verify events fire %s',\n async (options, done: any) => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new Error('error FOO2020: test error');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n 'Unknown',\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with Error (no message), verify events fire %s',\n async (options, done: any) => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new Error();\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n 'Unknown',\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n },\n);\n\nfunction b(s: string) {\n throw new Error('hello ' + s);\n}\n\nfunction a(s: string) {\n b(s);\n}\n\n/** Verifies the contents of an exception's message and stack frames */\nfunction getVerifyStackTelemetryProcessor(\n caughtErrors: Error[],\n expectedError: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n if (envelope.data.baseType === 'ExceptionData') {\n const data = (envelope.data as any).baseData;\n expect(data.exceptions).toBeDefined();\n expect(data.exceptions.length).toBe(1);\n expect(data.exceptions[0].message).toBeDefined();\n expect(data.exceptions[0].message).not.toBe('');\n\n expect(data.exceptions[0].message).toBe(\n TelemetryTest.getPreserveErrorMessages()\n ? errorUtils.sanitizeErrorMessage(expectedError.message || 'None')\n : '[Removed]',\n );\n\n const stack = data.exceptions[0].parsedStack;\n expect(stack).toBeDefined();\n expect(stack.length).toBeGreaterThan(2);\n\n const filename = path.relative(process.cwd(), __filename);\n expect(stack[0].method).toEqual('b');\n expect(stack[1].method).toEqual('a');\n expect(stack[0].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[1].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with Error, verify sanitized message and stack %s',\n async (options, done: any) => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new Error('hello world');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a('world');\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with Error, verify sanitized message with path and stack %s',\n async (options, done: any) => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new Error(`hello ${process.cwd()}`);\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a(process.cwd());\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n },\n);\n"]}
|
|
@@ -108,7 +108,8 @@ class Telemetry {
|
|
|
108
108
|
}
|
|
109
109
|
/** Sets up Telemetry.client. */
|
|
110
110
|
static setupClient() {
|
|
111
|
-
|
|
111
|
+
var _a;
|
|
112
|
+
appInsights.Configuration.setInternalLogging(false, false);
|
|
112
113
|
Telemetry.client = new appInsights.TelemetryClient(Telemetry.options.setupString);
|
|
113
114
|
// Allow overriding the proxy server via an environment variable
|
|
114
115
|
const proxyServer = process.env[ENV_PROXY_OVERRIDE];
|
|
@@ -117,12 +118,21 @@ class Telemetry {
|
|
|
117
118
|
Telemetry.client.config.proxyHttpsUrl = proxyServer;
|
|
118
119
|
}
|
|
119
120
|
Telemetry.client.config.disableAppInsights = Telemetry.isTest;
|
|
121
|
+
Telemetry.client.config.disableStatsbeat = true;
|
|
122
|
+
// Despite trying to disable the statsbeat, it might still be running: https://github.com/microsoft/ApplicationInsights-node.js/issues/943
|
|
123
|
+
// So we want to disable it, and despite the method's typing, getStatsbeat() _can_ return undefined
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
125
|
+
(_a = Telemetry.client.getStatsbeat()) === null || _a === void 0 ? void 0 : _a.enable(false);
|
|
120
126
|
Telemetry.client.channel.setUseDiskRetryCaching(!Telemetry.isTest);
|
|
121
127
|
}
|
|
122
128
|
/** Sets up any base properties that all telemetry events require. */
|
|
123
129
|
static async setupBaseProperties() {
|
|
124
130
|
Telemetry.client.commonProperties.deviceId =
|
|
125
131
|
await basePropUtils.deviceId();
|
|
132
|
+
Telemetry.client.commonProperties.deviceArchitecture =
|
|
133
|
+
basePropUtils.deviceArchitecture();
|
|
134
|
+
Telemetry.client.commonProperties.devicePlatform =
|
|
135
|
+
basePropUtils.devicePlatform();
|
|
126
136
|
Telemetry.client.commonProperties.deviceLocale =
|
|
127
137
|
await basePropUtils.deviceLocale();
|
|
128
138
|
Telemetry.client.commonProperties.deviceNumCPUs = basePropUtils
|
|
@@ -141,11 +151,12 @@ class Telemetry {
|
|
|
141
151
|
Telemetry.client.commonProperties.isMsftInternal = basePropUtils
|
|
142
152
|
.isMsftInternal()
|
|
143
153
|
.toString();
|
|
144
|
-
Telemetry.client.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
154
|
+
Telemetry.client.commonProperties.sampleRate = basePropUtils
|
|
155
|
+
.sampleRate()
|
|
156
|
+
.toString();
|
|
157
|
+
Telemetry.client.commonProperties.isTest = Telemetry.isTest.toString();
|
|
148
158
|
Telemetry.client.commonProperties.sessionId = Telemetry.getSessionId();
|
|
159
|
+
Telemetry.client.config.samplingPercentage = basePropUtils.sampleRate();
|
|
149
160
|
await Telemetry.populateToolsVersions();
|
|
150
161
|
if (Telemetry.options.populateNpmPackageVersions) {
|
|
151
162
|
await Telemetry.populateNpmPackageVersions();
|
|
@@ -187,6 +198,8 @@ class Telemetry {
|
|
|
187
198
|
for (const frame of exception.parsedStack) {
|
|
188
199
|
errorUtils.sanitizeErrorStackFrame(frame);
|
|
189
200
|
}
|
|
201
|
+
// Exception message must never be blank, or AI will reject it
|
|
202
|
+
exception.message = exception.message || '[None]';
|
|
190
203
|
// CodedError has non-PII information in its 'type' member, plus optionally some more info in its 'data'.
|
|
191
204
|
// The message may contain PII information. This can be sanitized, but for now delete it.
|
|
192
205
|
// Note that the type of data.exceptions[0] is always going to be ExceptionDetails. It is not the original thrown exception.
|
|
@@ -195,7 +208,7 @@ class Telemetry {
|
|
|
195
208
|
exception.message = errorUtils.sanitizeErrorMessage(exception.message);
|
|
196
209
|
}
|
|
197
210
|
else {
|
|
198
|
-
|
|
211
|
+
exception.message = '[Removed]';
|
|
199
212
|
}
|
|
200
213
|
}
|
|
201
214
|
}
|
|
@@ -280,15 +293,17 @@ class Telemetry {
|
|
|
280
293
|
resultCode: (_d = Telemetry.commandInfo.endInfo) === null || _d === void 0 ? void 0 : _d.resultCode,
|
|
281
294
|
};
|
|
282
295
|
// Set remaining common props
|
|
283
|
-
Object.assign(props, extraProps);
|
|
284
296
|
props.project = Telemetry.projectProp;
|
|
285
297
|
props.versions = Telemetry.versionsProp;
|
|
298
|
+
// Set extra props
|
|
299
|
+
props.extraProps = {};
|
|
300
|
+
Object.assign(props.extraProps, extraProps);
|
|
286
301
|
// Fire event
|
|
287
302
|
Telemetry.client.trackEvent({ name: props.eventName, properties: props });
|
|
288
303
|
Telemetry.client.flush();
|
|
289
304
|
}
|
|
290
305
|
static trackException(error, extraProps) {
|
|
291
|
-
var _a, _b
|
|
306
|
+
var _a, _b;
|
|
292
307
|
if (!Telemetry.client) {
|
|
293
308
|
return;
|
|
294
309
|
}
|
|
@@ -301,11 +316,20 @@ class Telemetry {
|
|
|
301
316
|
: null;
|
|
302
317
|
props.codedError = {
|
|
303
318
|
type: (_a = codedError === null || codedError === void 0 ? void 0 : codedError.type) !== null && _a !== void 0 ? _a : 'Unknown',
|
|
304
|
-
|
|
305
|
-
data: (_c = codedError === null || codedError === void 0 ? void 0 : codedError.data) !== null && _c !== void 0 ? _c : {},
|
|
319
|
+
data: (_b = codedError === null || codedError === void 0 ? void 0 : codedError.data) !== null && _b !== void 0 ? _b : {},
|
|
306
320
|
};
|
|
307
|
-
|
|
308
|
-
|
|
321
|
+
// Copy msBuildErrorMessages into the codedError.data object
|
|
322
|
+
if (error.msBuildErrorMessages) {
|
|
323
|
+
// Always grab MSBuild error codes if possible
|
|
324
|
+
props.codedError.data.msBuildErrors = error.msBuildErrorMessages
|
|
325
|
+
.map(errorUtils.tryGetErrorCode)
|
|
326
|
+
.filter((msg) => msg);
|
|
327
|
+
// Grab sanitized MSBuild error messages if we're preserving them
|
|
328
|
+
if (Telemetry.options.preserveErrorMessages) {
|
|
329
|
+
props.codedError.data.msBuildErrorMessages = error.msBuildErrorMessages
|
|
330
|
+
.map(errorUtils.sanitizeErrorMessage)
|
|
331
|
+
.filter((msg) => msg);
|
|
332
|
+
}
|
|
309
333
|
}
|
|
310
334
|
// Copy miscellaneous system error fields into the codedError.data object
|
|
311
335
|
const syscallExceptionFieldsToCopy = ['errno', 'syscall', 'code'];
|
|
@@ -315,9 +339,11 @@ class Telemetry {
|
|
|
315
339
|
}
|
|
316
340
|
}
|
|
317
341
|
// Set remaining common props
|
|
318
|
-
Object.assign(props, extraProps);
|
|
319
342
|
props.project = Telemetry.projectProp;
|
|
320
343
|
props.versions = Telemetry.versionsProp;
|
|
344
|
+
// Set extra props
|
|
345
|
+
props.extraProps = {};
|
|
346
|
+
Object.assign(props.extraProps, extraProps);
|
|
321
347
|
// Fire event
|
|
322
348
|
Telemetry.client.trackException({
|
|
323
349
|
exception: error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as basePropUtils from './utils/basePropUtils';\nimport * as versionUtils from './utils/versionUtils';\nimport * as errorUtils from './utils/errorUtils';\nimport * as projectUtils from './utils/projectUtils';\n\nexport interface TelemetryOptions {\n setupString: string;\n preserveErrorMessages: boolean;\n populateNpmPackageVersions: boolean;\n}\n\nexport interface CommandStartInfo {\n commandName: string;\n args: Record<string, any>;\n options: Record<string, any>;\n defaultOptions: Record<string, any>;\n}\n\nexport interface CommandEndInfo {\n resultCode: errorUtils.CodedErrorType;\n}\n\ninterface CommandInfo {\n startTime?: number;\n endTime?: number;\n startInfo?: CommandStartInfo;\n endInfo?: CommandEndInfo;\n}\n\n// This is our key with the AI backend\nconst RNWSetupString = '795006ca-cf54-40ee-8bc6-03deb91401c3';\n\n// Environment variable to override the default setup string\nconst ENV_SETUP_OVERRIDE = 'RNW_TELEMETRY_SETUP';\n\n// Environment variable to override the http proxy (such as http://localhost:8888 for Fiddler debugging)\nconst ENV_PROXY_OVERRIDE = 'RNW_TELEMETRY_PROXY';\n\nexport const CommandEventName = 'RNWCLI.Command';\nexport const CodedErrorEventName = 'RNWCLI.CodedError';\n\n// These are the event names we're tracking\nexport const EventNamesWeTrack: string[] = [\n CommandEventName,\n CodedErrorEventName,\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\n// and getting more details about when reporting errors\nexport const NpmPackagesWeTrack: string[] = [\n '@react-native-community/cli',\n '@react-native-windows/cli',\n '@react-native-windows/telemetry',\n 'react',\n 'react-native',\n 'react-native-windows',\n 'react-native-windows-init',\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\nexport const NuGetPackagesWeTrack: string[] = [\n 'Microsoft.UI.Xaml',\n 'Microsoft.Windows.CppWinRT',\n 'Microsoft.WinUI',\n];\n\n/**\n * The Telemetry class is responsible for reporting telemetry for RNW CLI.\n */\nexport class Telemetry {\n protected static client?: appInsights.TelemetryClient = undefined;\n protected static options: TelemetryOptions = {\n setupString: Telemetry.getDefaultSetupString(), // We default to our AI key, but callers can easily override it in setup\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n\n protected static isTest: boolean = basePropUtils.isCliTest();\n protected static commandInfo: CommandInfo = {};\n protected static versionsProp: Record<string, string> = {};\n protected static projectProp?:\n | projectUtils.AppProjectInfo\n | projectUtils.DependencyProjectInfo = undefined;\n\n protected static getDefaultSetupString(): string {\n // Enable overriding the default setup string via an environment variable\n return process.env[ENV_SETUP_OVERRIDE] ?? RNWSetupString;\n }\n\n protected static reset(): void {\n // Reset client\n if (Telemetry.client) {\n Telemetry.client.flush();\n Telemetry.client = undefined;\n }\n\n // Reset local members\n Telemetry.options = {\n setupString: Telemetry.getDefaultSetupString(),\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n Telemetry.commandInfo = {};\n Telemetry.versionsProp = {};\n Telemetry.projectProp = undefined;\n }\n\n static isEnabled(): boolean {\n return Telemetry.client !== undefined;\n }\n\n static getSessionId(): string {\n return basePropUtils.getSessionId();\n }\n\n /** Sets up the Telemetry static to be used elsewhere. */\n static async setup(options?: Partial<TelemetryOptions>) {\n if (Telemetry.client) {\n // Bail since we've already setup\n return;\n }\n\n // Bail if we're in CI and not capturing CI\n if (!this.isTest && basePropUtils.isCI() && !basePropUtils.captureCI()) {\n return;\n }\n\n // Save off options for later\n Object.assign(Telemetry.options, options);\n\n Telemetry.setupClient();\n\n await Telemetry.setupBaseProperties();\n\n Telemetry.setupTelemetryProcessors();\n }\n\n /** Sets up Telemetry.client. */\n private static setupClient() {\n appInsights.Configuration.setInternalLogging(\n Telemetry.isTest,\n Telemetry.isTest,\n );\n\n Telemetry.client = new appInsights.TelemetryClient(\n Telemetry.options.setupString,\n );\n\n // Allow overriding the proxy server via an environment variable\n const proxyServer = process.env[ENV_PROXY_OVERRIDE];\n if (proxyServer) {\n Telemetry.client.config.proxyHttpUrl = proxyServer;\n Telemetry.client.config.proxyHttpsUrl = proxyServer;\n }\n\n Telemetry.client.config.disableAppInsights = Telemetry.isTest;\n Telemetry.client.channel.setUseDiskRetryCaching(!Telemetry.isTest);\n }\n\n /** Sets up any base properties that all telemetry events require. */\n private static async setupBaseProperties() {\n Telemetry.client!.commonProperties.deviceId =\n await basePropUtils.deviceId();\n Telemetry.client!.commonProperties.deviceLocale =\n await basePropUtils.deviceLocale();\n Telemetry.client!.commonProperties.deviceNumCPUs = basePropUtils\n .deviceNumCPUs()\n .toString();\n Telemetry.client!.commonProperties.deviceTotalMemory = basePropUtils\n .deviceTotalMemory()\n .toString();\n Telemetry.client!.commonProperties.deviceDiskFreeSpace = basePropUtils\n .deviceDiskFreeSpace()\n .toString();\n Telemetry.client!.commonProperties.ciCaptured = basePropUtils\n .captureCI()\n .toString();\n Telemetry.client!.commonProperties.ciType = basePropUtils.ciType();\n Telemetry.client!.commonProperties.isMsftInternal = basePropUtils\n .isMsftInternal()\n .toString();\n\n Telemetry.client!.config.samplingPercentage = basePropUtils.sampleRate();\n\n if (Telemetry.isTest) {\n Telemetry.client!.commonProperties.isTest = true.toString();\n }\n\n Telemetry.client!.commonProperties.sessionId = Telemetry.getSessionId();\n\n await Telemetry.populateToolsVersions();\n if (Telemetry.options.populateNpmPackageVersions) {\n await Telemetry.populateNpmPackageVersions();\n }\n }\n\n /** Sets up any telemetry processors. */\n private static setupTelemetryProcessors() {\n Telemetry.client!.addTelemetryProcessor(Telemetry.basicTelemetryProcessor);\n Telemetry.client!.addTelemetryProcessor(Telemetry.errorTelemetryProcessor);\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for all events.\n * @param envelope The ApplicationInsights event envelope.\n * @param _contextObjects An optional context object.\n * @returns Whether to kee\n */\n private static basicTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n delete envelope.tags['ai.cloud.roleInstance'];\n\n // Filter out \"legacy\" events from older stable branches\n const properties = envelope.data.baseData?.properties;\n if (\n properties?.eventName &&\n EventNamesWeTrack.includes(properties.eventName)\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for error events.\n * @param envelope\n * @param _contextObjects\n * @returns\n */\n private static errorTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n if (envelope.data.baseType === 'ExceptionData') {\n const data = envelope.data.baseData;\n if (data?.exceptions) {\n for (const exception of data.exceptions) {\n for (const frame of exception.parsedStack) {\n errorUtils.sanitizeErrorStackFrame(frame);\n }\n // CodedError has non-PII information in its 'type' member, plus optionally some more info in its 'data'.\n // The message may contain PII information. This can be sanitized, but for now delete it.\n // Note that the type of data.exceptions[0] is always going to be ExceptionDetails. It is not the original thrown exception.\n // https://github.com/microsoft/ApplicationInsights-node.js/issues/707\n if (Telemetry.options.preserveErrorMessages) {\n exception.message = errorUtils.sanitizeErrorMessage(\n exception.message,\n );\n } else {\n delete exception.message;\n }\n }\n }\n }\n return true;\n }\n\n /** Tries to update the version of the named package/tool by calling getValue(). */\n static async tryUpdateVersionsProp(\n name: string,\n getValue: () => Promise<string | null>,\n forceRefresh?: boolean,\n ): Promise<boolean> {\n if (!Telemetry.client) {\n return true;\n }\n\n if (forceRefresh === true || !Telemetry.versionsProp[name]) {\n const value = await getValue();\n if (value) {\n Telemetry.versionsProp[name] = value;\n return true;\n }\n }\n return false;\n }\n\n /** Populates the versions property of tools we care to track. */\n static async populateToolsVersions(refresh?: boolean) {\n await Telemetry.tryUpdateVersionsProp(\n 'node',\n versionUtils.getNodeVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'npm',\n versionUtils.getNpmVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'yarn',\n versionUtils.getYarnVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'VisualStudio',\n versionUtils.getVisualStudioVersion,\n refresh,\n );\n }\n\n /** Populates the versions property of npm packages we care to track. */\n static async populateNpmPackageVersions(refresh?: boolean) {\n for (const npmPackage of NpmPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n npmPackage,\n async () => await versionUtils.getVersionOfNpmPackage(npmPackage),\n refresh,\n );\n }\n }\n\n /** Populates the versions property of nuget packages we care to track. */\n static async populateNuGetPackageVersions(\n projectFile: string,\n refresh?: boolean,\n ) {\n const nugetVersions = await versionUtils.getVersionsOfNuGetPackages(\n projectFile,\n NuGetPackagesWeTrack,\n );\n\n for (const nugetPackage of NuGetPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n nugetPackage,\n async () => nugetVersions[nugetPackage],\n refresh,\n );\n }\n }\n\n static setProjectInfo(\n info: projectUtils.AppProjectInfo | projectUtils.DependencyProjectInfo,\n ) {\n if (!Telemetry.client) {\n return;\n }\n\n Telemetry.projectProp = info;\n }\n\n static startCommand(info: CommandStartInfo) {\n if (!Telemetry.client) {\n return;\n }\n\n if (Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.startTime = Date.now();\n Telemetry.commandInfo.startInfo = info;\n\n // Set common command props\n Telemetry.client!.commonProperties.commandName = info.commandName;\n }\n\n static endCommand(info: CommandEndInfo, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n if (!Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.endTime = Date.now();\n Telemetry.commandInfo.endInfo = info;\n\n Telemetry.trackCommandEvent(extraProps);\n }\n\n private static trackCommandEvent(extraProps?: Record<string, any>) {\n const props: Record<string, any> = {\n eventName: CommandEventName,\n };\n\n // Set command props\n props.command = {\n options: Telemetry.commandInfo.startInfo?.options,\n defaultOptions: Telemetry.commandInfo.startInfo?.defaultOptions,\n args: Telemetry.commandInfo.startInfo?.args,\n durationInSecs:\n (Telemetry.commandInfo.endTime! - Telemetry.commandInfo.startTime!) /\n 1000,\n resultCode: Telemetry.commandInfo.endInfo?.resultCode,\n };\n\n // Set remaining common props\n Object.assign(props, extraProps);\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Fire event\n Telemetry.client!.trackEvent({name: props.eventName, properties: props});\n Telemetry.client!.flush();\n }\n\n static trackException(error: Error, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n const props: Record<string, any> = {\n eventName: CodedErrorEventName,\n };\n\n // Save off CodedError info\n const codedError =\n error instanceof errorUtils.CodedError\n ? (error as errorUtils.CodedError)\n : null;\n props.codedError = {\n type: codedError?.type ?? 'Unknown',\n rawErrorCode: errorUtils.tryGetErrorCode(error.message) ?? '',\n data: codedError?.data ?? {},\n };\n\n if (codedError?.data) {\n Object.assign(props.codedError.data, codedError.data);\n }\n\n // Copy miscellaneous system error fields into the codedError.data object\n const syscallExceptionFieldsToCopy = ['errno', 'syscall', 'code'];\n for (const f of syscallExceptionFieldsToCopy) {\n if ((error as any)[f]) {\n props.codedError.data[f] = (error as any)[f];\n }\n }\n\n // Set remaining common props\n Object.assign(props, extraProps);\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Fire event\n Telemetry.client!.trackException({\n exception: error,\n properties: props,\n });\n Telemetry.client!.flush();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as basePropUtils from './utils/basePropUtils';\nimport * as versionUtils from './utils/versionUtils';\nimport * as errorUtils from './utils/errorUtils';\nimport * as projectUtils from './utils/projectUtils';\n\nexport interface TelemetryOptions {\n setupString: string;\n preserveErrorMessages: boolean;\n populateNpmPackageVersions: boolean;\n}\n\nexport interface CommandStartInfo {\n commandName: string;\n args: Record<string, any>;\n options: Record<string, any>;\n defaultOptions: Record<string, any>;\n}\n\nexport interface CommandEndInfo {\n resultCode: errorUtils.CodedErrorType;\n}\n\ninterface CommandInfo {\n startTime?: number;\n endTime?: number;\n startInfo?: CommandStartInfo;\n endInfo?: CommandEndInfo;\n}\n\n// This is our key with the AI backend\nconst RNWSetupString = '795006ca-cf54-40ee-8bc6-03deb91401c3';\n\n// Environment variable to override the default setup string\nconst ENV_SETUP_OVERRIDE = 'RNW_TELEMETRY_SETUP';\n\n// Environment variable to override the http proxy (such as http://localhost:8888 for Fiddler debugging)\nconst ENV_PROXY_OVERRIDE = 'RNW_TELEMETRY_PROXY';\n\nexport const CommandEventName = 'RNWCLI.Command';\nexport const CodedErrorEventName = 'RNWCLI.CodedError';\n\n// These are the event names we're tracking\nexport const EventNamesWeTrack: string[] = [\n CommandEventName,\n CodedErrorEventName,\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\n// and getting more details about when reporting errors\nexport const NpmPackagesWeTrack: string[] = [\n '@react-native-community/cli',\n '@react-native-windows/cli',\n '@react-native-windows/telemetry',\n 'react',\n 'react-native',\n 'react-native-windows',\n 'react-native-windows-init',\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\nexport const NuGetPackagesWeTrack: string[] = [\n 'Microsoft.UI.Xaml',\n 'Microsoft.Windows.CppWinRT',\n 'Microsoft.WinUI',\n];\n\n/**\n * The Telemetry class is responsible for reporting telemetry for RNW CLI.\n */\nexport class Telemetry {\n protected static client?: appInsights.TelemetryClient = undefined;\n protected static options: TelemetryOptions = {\n setupString: Telemetry.getDefaultSetupString(), // We default to our AI key, but callers can easily override it in setup\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n\n protected static isTest: boolean = basePropUtils.isCliTest();\n protected static commandInfo: CommandInfo = {};\n protected static versionsProp: Record<string, string> = {};\n protected static projectProp?:\n | projectUtils.AppProjectInfo\n | projectUtils.DependencyProjectInfo = undefined;\n\n protected static getDefaultSetupString(): string {\n // Enable overriding the default setup string via an environment variable\n return process.env[ENV_SETUP_OVERRIDE] ?? RNWSetupString;\n }\n\n protected static reset(): void {\n // Reset client\n if (Telemetry.client) {\n Telemetry.client.flush();\n Telemetry.client = undefined;\n }\n\n // Reset local members\n Telemetry.options = {\n setupString: Telemetry.getDefaultSetupString(),\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n Telemetry.commandInfo = {};\n Telemetry.versionsProp = {};\n Telemetry.projectProp = undefined;\n }\n\n static isEnabled(): boolean {\n return Telemetry.client !== undefined;\n }\n\n static getSessionId(): string {\n return basePropUtils.getSessionId();\n }\n\n /** Sets up the Telemetry static to be used elsewhere. */\n static async setup(options?: Partial<TelemetryOptions>) {\n if (Telemetry.client) {\n // Bail since we've already setup\n return;\n }\n\n // Bail if we're in CI and not capturing CI\n if (!this.isTest && basePropUtils.isCI() && !basePropUtils.captureCI()) {\n return;\n }\n\n // Save off options for later\n Object.assign(Telemetry.options, options);\n\n Telemetry.setupClient();\n\n await Telemetry.setupBaseProperties();\n\n Telemetry.setupTelemetryProcessors();\n }\n\n /** Sets up Telemetry.client. */\n private static setupClient() {\n appInsights.Configuration.setInternalLogging(false, false);\n\n Telemetry.client = new appInsights.TelemetryClient(\n Telemetry.options.setupString,\n );\n\n // Allow overriding the proxy server via an environment variable\n const proxyServer = process.env[ENV_PROXY_OVERRIDE];\n if (proxyServer) {\n Telemetry.client.config.proxyHttpUrl = proxyServer;\n Telemetry.client.config.proxyHttpsUrl = proxyServer;\n }\n\n Telemetry.client.config.disableAppInsights = Telemetry.isTest;\n Telemetry.client.config.disableStatsbeat = true;\n\n // Despite trying to disable the statsbeat, it might still be running: https://github.com/microsoft/ApplicationInsights-node.js/issues/943\n // So we want to disable it, and despite the method's typing, getStatsbeat() _can_ return undefined\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n Telemetry.client.getStatsbeat()?.enable(false);\n\n Telemetry.client.channel.setUseDiskRetryCaching(!Telemetry.isTest);\n }\n\n /** Sets up any base properties that all telemetry events require. */\n private static async setupBaseProperties() {\n Telemetry.client!.commonProperties.deviceId =\n await basePropUtils.deviceId();\n Telemetry.client!.commonProperties.deviceArchitecture =\n basePropUtils.deviceArchitecture();\n Telemetry.client!.commonProperties.devicePlatform =\n basePropUtils.devicePlatform();\n Telemetry.client!.commonProperties.deviceLocale =\n await basePropUtils.deviceLocale();\n Telemetry.client!.commonProperties.deviceNumCPUs = basePropUtils\n .deviceNumCPUs()\n .toString();\n Telemetry.client!.commonProperties.deviceTotalMemory = basePropUtils\n .deviceTotalMemory()\n .toString();\n Telemetry.client!.commonProperties.deviceDiskFreeSpace = basePropUtils\n .deviceDiskFreeSpace()\n .toString();\n Telemetry.client!.commonProperties.ciCaptured = basePropUtils\n .captureCI()\n .toString();\n Telemetry.client!.commonProperties.ciType = basePropUtils.ciType();\n Telemetry.client!.commonProperties.isMsftInternal = basePropUtils\n .isMsftInternal()\n .toString();\n Telemetry.client!.commonProperties.sampleRate = basePropUtils\n .sampleRate()\n .toString();\n Telemetry.client!.commonProperties.isTest = Telemetry.isTest.toString();\n Telemetry.client!.commonProperties.sessionId = Telemetry.getSessionId();\n\n Telemetry.client!.config.samplingPercentage = basePropUtils.sampleRate();\n\n await Telemetry.populateToolsVersions();\n if (Telemetry.options.populateNpmPackageVersions) {\n await Telemetry.populateNpmPackageVersions();\n }\n }\n\n /** Sets up any telemetry processors. */\n private static setupTelemetryProcessors() {\n Telemetry.client!.addTelemetryProcessor(Telemetry.basicTelemetryProcessor);\n Telemetry.client!.addTelemetryProcessor(Telemetry.errorTelemetryProcessor);\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for all events.\n * @param envelope The ApplicationInsights event envelope.\n * @param _contextObjects An optional context object.\n * @returns Whether to kee\n */\n private static basicTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n delete envelope.tags['ai.cloud.roleInstance'];\n\n // Filter out \"legacy\" events from older stable branches\n const properties = envelope.data.baseData?.properties;\n if (\n properties?.eventName &&\n EventNamesWeTrack.includes(properties.eventName)\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for error events.\n * @param envelope\n * @param _contextObjects\n * @returns\n */\n private static errorTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n if (envelope.data.baseType === 'ExceptionData') {\n const data = envelope.data.baseData;\n if (data?.exceptions) {\n for (const exception of data.exceptions) {\n for (const frame of exception.parsedStack) {\n errorUtils.sanitizeErrorStackFrame(frame);\n }\n\n // Exception message must never be blank, or AI will reject it\n exception.message = exception.message || '[None]';\n\n // CodedError has non-PII information in its 'type' member, plus optionally some more info in its 'data'.\n // The message may contain PII information. This can be sanitized, but for now delete it.\n // Note that the type of data.exceptions[0] is always going to be ExceptionDetails. It is not the original thrown exception.\n // https://github.com/microsoft/ApplicationInsights-node.js/issues/707\n if (Telemetry.options.preserveErrorMessages) {\n exception.message = errorUtils.sanitizeErrorMessage(\n exception.message,\n );\n } else {\n exception.message = '[Removed]';\n }\n }\n }\n }\n return true;\n }\n\n /** Tries to update the version of the named package/tool by calling getValue(). */\n static async tryUpdateVersionsProp(\n name: string,\n getValue: () => Promise<string | null>,\n forceRefresh?: boolean,\n ): Promise<boolean> {\n if (!Telemetry.client) {\n return true;\n }\n\n if (forceRefresh === true || !Telemetry.versionsProp[name]) {\n const value = await getValue();\n if (value) {\n Telemetry.versionsProp[name] = value;\n return true;\n }\n }\n return false;\n }\n\n /** Populates the versions property of tools we care to track. */\n static async populateToolsVersions(refresh?: boolean) {\n await Telemetry.tryUpdateVersionsProp(\n 'node',\n versionUtils.getNodeVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'npm',\n versionUtils.getNpmVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'yarn',\n versionUtils.getYarnVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'VisualStudio',\n versionUtils.getVisualStudioVersion,\n refresh,\n );\n }\n\n /** Populates the versions property of npm packages we care to track. */\n static async populateNpmPackageVersions(refresh?: boolean) {\n for (const npmPackage of NpmPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n npmPackage,\n async () => await versionUtils.getVersionOfNpmPackage(npmPackage),\n refresh,\n );\n }\n }\n\n /** Populates the versions property of nuget packages we care to track. */\n static async populateNuGetPackageVersions(\n projectFile: string,\n refresh?: boolean,\n ) {\n const nugetVersions = await versionUtils.getVersionsOfNuGetPackages(\n projectFile,\n NuGetPackagesWeTrack,\n );\n\n for (const nugetPackage of NuGetPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n nugetPackage,\n async () => nugetVersions[nugetPackage],\n refresh,\n );\n }\n }\n\n static setProjectInfo(\n info: projectUtils.AppProjectInfo | projectUtils.DependencyProjectInfo,\n ) {\n if (!Telemetry.client) {\n return;\n }\n\n Telemetry.projectProp = info;\n }\n\n static startCommand(info: CommandStartInfo) {\n if (!Telemetry.client) {\n return;\n }\n\n if (Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.startTime = Date.now();\n Telemetry.commandInfo.startInfo = info;\n\n // Set common command props\n Telemetry.client!.commonProperties.commandName = info.commandName;\n }\n\n static endCommand(info: CommandEndInfo, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n if (!Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.endTime = Date.now();\n Telemetry.commandInfo.endInfo = info;\n\n Telemetry.trackCommandEvent(extraProps);\n }\n\n private static trackCommandEvent(extraProps?: Record<string, any>) {\n const props: Record<string, any> = {\n eventName: CommandEventName,\n };\n\n // Set command props\n props.command = {\n options: Telemetry.commandInfo.startInfo?.options,\n defaultOptions: Telemetry.commandInfo.startInfo?.defaultOptions,\n args: Telemetry.commandInfo.startInfo?.args,\n durationInSecs:\n (Telemetry.commandInfo.endTime! - Telemetry.commandInfo.startTime!) /\n 1000,\n resultCode: Telemetry.commandInfo.endInfo?.resultCode,\n };\n\n // Set remaining common props\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Set extra props\n props.extraProps = {};\n Object.assign(props.extraProps, extraProps);\n\n // Fire event\n Telemetry.client!.trackEvent({name: props.eventName, properties: props});\n Telemetry.client!.flush();\n }\n\n static trackException(error: Error, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n const props: Record<string, any> = {\n eventName: CodedErrorEventName,\n };\n\n // Save off CodedError info\n const codedError =\n error instanceof errorUtils.CodedError\n ? (error as errorUtils.CodedError)\n : null;\n props.codedError = {\n type: codedError?.type ?? 'Unknown',\n data: codedError?.data ?? {},\n };\n\n // Copy msBuildErrorMessages into the codedError.data object\n if ((error as any).msBuildErrorMessages) {\n // Always grab MSBuild error codes if possible\n props.codedError.data.msBuildErrors = (error as any).msBuildErrorMessages\n .map(errorUtils.tryGetErrorCode)\n .filter((msg: string | undefined) => msg);\n\n // Grab sanitized MSBuild error messages if we're preserving them\n if (Telemetry.options.preserveErrorMessages) {\n props.codedError.data.msBuildErrorMessages = (\n error as any\n ).msBuildErrorMessages\n .map(errorUtils.sanitizeErrorMessage)\n .filter((msg: string) => msg);\n }\n }\n\n // Copy miscellaneous system error fields into the codedError.data object\n const syscallExceptionFieldsToCopy = ['errno', 'syscall', 'code'];\n for (const f of syscallExceptionFieldsToCopy) {\n if ((error as any)[f]) {\n props.codedError.data[f] = (error as any)[f];\n }\n }\n\n // Set remaining common props\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Set extra props\n props.extraProps = {};\n Object.assign(props.extraProps, extraProps);\n\n // Fire event\n Telemetry.client!.trackException({\n exception: error,\n properties: props,\n });\n Telemetry.client!.flush();\n }\n}\n"]}
|
|
@@ -35,6 +35,18 @@ test('deviceId() is valid', async () => {
|
|
|
35
35
|
test('deviceId() does not change', async () => {
|
|
36
36
|
expect(await basePropUtils.deviceId()).toBe(await basePropUtils.deviceId());
|
|
37
37
|
});
|
|
38
|
+
test('deviceArchitecture() is valid', () => {
|
|
39
|
+
const value = basePropUtils.deviceArchitecture();
|
|
40
|
+
expect(value).toBeDefined();
|
|
41
|
+
expect(value).not.toBe('');
|
|
42
|
+
expect(value).not.toBeNull();
|
|
43
|
+
});
|
|
44
|
+
test('devicePlatform() is valid', () => {
|
|
45
|
+
const value = basePropUtils.devicePlatform();
|
|
46
|
+
expect(value).toBeDefined();
|
|
47
|
+
expect(value).not.toBe('');
|
|
48
|
+
expect(value).not.toBeNull();
|
|
49
|
+
});
|
|
38
50
|
test('deviceLocale() is valid', async () => {
|
|
39
51
|
const value = await basePropUtils.deviceLocale();
|
|
40
52
|
expect(value).toBeDefined();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basePropUtils.test.js","sourceRoot":"","sources":["../../src/test/basePropUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as basePropUtils from '../utils/basePropUtils';\n\ntest('deviceId() is valid', async () => {\n const value = await basePropUtils.deviceId();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('deviceId() does not change', async () => {\n expect(await basePropUtils.deviceId()).toBe(await basePropUtils.deviceId());\n});\n\ntest('deviceLocale() is valid', async () => {\n const value = await basePropUtils.deviceLocale();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('deviceLocale() does not change', async () => {\n expect(await basePropUtils.deviceLocale()).toBe(\n await basePropUtils.deviceLocale(),\n );\n});\n\ntest('deviceNumCPUs() is valid', () => {\n const value = basePropUtils.deviceNumCPUs();\n expect(value).toBeGreaterThan(0);\n});\n\ntest('deviceTotalMemory() is valid', () => {\n const value = basePropUtils.deviceTotalMemory();\n expect(value).toBeGreaterThan(0);\n});\n\ntest('deviceDiskFreeSpace() is valid', () => {\n const value = basePropUtils.deviceDiskFreeSpace();\n expect(value).toBeGreaterThanOrEqual(0);\n});\n\ntest('sampleRate() is within valid range', () => {\n const value = basePropUtils.sampleRate();\n expect(value).toBeGreaterThanOrEqual(0);\n expect(value).toBeLessThanOrEqual(100);\n});\n\ntest('ciType() is valid', () => {\n const value = basePropUtils.ciType();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('ciType() is None when not in CI', () => {\n if (basePropUtils.isCI()) {\n expect(basePropUtils.ciType()).not.toBe('None');\n } else {\n expect(basePropUtils.ciType()).toBe('None');\n }\n});\n\ntest('isMsftInternal() is false with no domain', () => {\n delete process.env.UserDNSDomain;\n expect(basePropUtils.isMsftInternal()).toBe(false);\n});\n\ntest('isMsftInternal() is false with example.com domain', () => {\n process.env.UserDNSDomain = 'example.com';\n expect(basePropUtils.isMsftInternal()).toBe(false);\n});\n\ntest('isMsftInternal() is true with Msft domain', () => {\n process.env.UserDNSDomain = 'test.corp.microsoft.com';\n expect(basePropUtils.isMsftInternal()).toBe(true);\n});\n\ntest('isCliTest() is true if RNW_CLI_TEST env variable is set', () => {\n process.env.RNW_CLI_TEST = 'true';\n expect(basePropUtils.isCliTest()).toBe(true);\n});\n\ntest('isCliTest() is false if no RNW_CLI_TEST variable', () => {\n delete process.env.RNW_CLI_TEST;\n expect(basePropUtils.isCliTest()).toBe(false);\n});\n\ntest('getSessionId() is valid', () => {\n const value = basePropUtils.getSessionId();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n expect(value).toHaveLength(32);\n});\n\ntest('getSessionId() is a guid', () => {\n const value = basePropUtils.getSessionId();\n expect(value).toHaveLength(32);\n\n const parseGuid = () => {\n parseInt(value, 16);\n };\n\n expect(parseGuid).not.toThrow();\n});\n\ntest('getSessionId() does not change', () => {\n expect(basePropUtils.getSessionId()).toBe(basePropUtils.getSessionId());\n});\n"]}
|
|
1
|
+
{"version":3,"file":"basePropUtils.test.js","sourceRoot":"","sources":["../../src/test/basePropUtils.test.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;AAEH,sEAAwD;AAExD,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;IACrC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;IAC5C,MAAM,CAAC,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;IACzC,MAAM,KAAK,GAAG,aAAa,CAAC,kBAAkB,EAAE,CAAC;IACjD,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;IACzC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;IACjD,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;IAChD,MAAM,CAAC,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAC7C,MAAM,aAAa,CAAC,YAAY,EAAE,CACnC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACpC,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;IACxC,MAAM,KAAK,GAAG,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,mBAAmB,EAAE,CAAC;IAClD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC3C,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACjD;SAAM;QACL,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7C;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACpD,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACjC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;IAC1C,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,yBAAyB,CAAC;IACtD,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACnE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC;IAClC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAChC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACpC,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as basePropUtils from '../utils/basePropUtils';\n\ntest('deviceId() is valid', async () => {\n const value = await basePropUtils.deviceId();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('deviceId() does not change', async () => {\n expect(await basePropUtils.deviceId()).toBe(await basePropUtils.deviceId());\n});\n\ntest('deviceArchitecture() is valid', () => {\n const value = basePropUtils.deviceArchitecture();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('devicePlatform() is valid', () => {\n const value = basePropUtils.devicePlatform();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('deviceLocale() is valid', async () => {\n const value = await basePropUtils.deviceLocale();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('deviceLocale() does not change', async () => {\n expect(await basePropUtils.deviceLocale()).toBe(\n await basePropUtils.deviceLocale(),\n );\n});\n\ntest('deviceNumCPUs() is valid', () => {\n const value = basePropUtils.deviceNumCPUs();\n expect(value).toBeGreaterThan(0);\n});\n\ntest('deviceTotalMemory() is valid', () => {\n const value = basePropUtils.deviceTotalMemory();\n expect(value).toBeGreaterThan(0);\n});\n\ntest('deviceDiskFreeSpace() is valid', () => {\n const value = basePropUtils.deviceDiskFreeSpace();\n expect(value).toBeGreaterThanOrEqual(0);\n});\n\ntest('sampleRate() is within valid range', () => {\n const value = basePropUtils.sampleRate();\n expect(value).toBeGreaterThanOrEqual(0);\n expect(value).toBeLessThanOrEqual(100);\n});\n\ntest('ciType() is valid', () => {\n const value = basePropUtils.ciType();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n});\n\ntest('ciType() is None when not in CI', () => {\n if (basePropUtils.isCI()) {\n expect(basePropUtils.ciType()).not.toBe('None');\n } else {\n expect(basePropUtils.ciType()).toBe('None');\n }\n});\n\ntest('isMsftInternal() is false with no domain', () => {\n delete process.env.UserDNSDomain;\n expect(basePropUtils.isMsftInternal()).toBe(false);\n});\n\ntest('isMsftInternal() is false with example.com domain', () => {\n process.env.UserDNSDomain = 'example.com';\n expect(basePropUtils.isMsftInternal()).toBe(false);\n});\n\ntest('isMsftInternal() is true with Msft domain', () => {\n process.env.UserDNSDomain = 'test.corp.microsoft.com';\n expect(basePropUtils.isMsftInternal()).toBe(true);\n});\n\ntest('isCliTest() is true if RNW_CLI_TEST env variable is set', () => {\n process.env.RNW_CLI_TEST = 'true';\n expect(basePropUtils.isCliTest()).toBe(true);\n});\n\ntest('isCliTest() is false if no RNW_CLI_TEST variable', () => {\n delete process.env.RNW_CLI_TEST;\n expect(basePropUtils.isCliTest()).toBe(false);\n});\n\ntest('getSessionId() is valid', () => {\n const value = basePropUtils.getSessionId();\n expect(value).toBeDefined();\n expect(value).not.toBe('');\n expect(value).not.toBeNull();\n expect(value).toHaveLength(32);\n});\n\ntest('getSessionId() is a guid', () => {\n const value = basePropUtils.getSessionId();\n expect(value).toHaveLength(32);\n\n const parseGuid = () => {\n parseInt(value, 16);\n };\n\n expect(parseGuid).not.toThrow();\n});\n\ntest('getSessionId() does not change', () => {\n expect(basePropUtils.getSessionId()).toBe(basePropUtils.getSessionId());\n});\n"]}
|
|
@@ -105,6 +105,9 @@ test('sanitizeErrorMessage() with cpu id', () => {
|
|
|
105
105
|
test('sanitizeErrorMessage() with cpu/thread id', () => {
|
|
106
106
|
expect(errorUtils.sanitizeErrorMessage('5:42>This is an error')).toEqual('This is an error');
|
|
107
107
|
});
|
|
108
|
+
test('sanitizeErrorMessage() with standard MSBuild error', () => {
|
|
109
|
+
expect(errorUtils.sanitizeErrorMessage(`2:6>C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\XamlCompiler\\Microsoft.Windows.UI.Xaml.Common.targets(486,5): error MSB4181: The "CompileXaml" task returned false but did not log an error. [${process.cwd()}\\windows\\teltest68\\teltest68.csproj]`)).toEqual(`[path](486,5): error MSB4181: The CompileXaml task returned false but did not log an error. [windows]\\???.csproj(${'teltest68\\teltest68.csproj'.length})`);
|
|
110
|
+
});
|
|
108
111
|
test('sanitizeErrorStackFrame() with empty frame', () => {
|
|
109
112
|
const emptyFrame = {
|
|
110
113
|
level: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorUtils.test.js","sourceRoot":"","sources":["../../src/test/errorUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as errorUtils from '../utils/errorUtils';\n\ntest('tryGetErrorCode() with valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar error FOO2020: the thing')).toBe(\n 'FOO2020',\n );\n});\n\ntest('tryGetErrorCode() without valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar the thing')).toBeUndefined();\n});\n\ntest('tryGetErrorCode() with word error but no code', () => {\n expect(errorUtils.tryGetErrorCode('test error')).toBeUndefined();\n});\n\ntest('sanitizeErrorMessage() no-op on empty string', () => {\n expect(errorUtils.sanitizeErrorMessage('')).toBe('');\n});\n\ntest('sanitizeErrorMessage() no-op on test string', () => {\n expect(errorUtils.sanitizeErrorMessage('some text')).toBe('some text');\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is the cwd: '${process.cwd()}'`),\n ).toBe(`this is the cwd: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}'`,\n ),\n ).toBe(`uppercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}'`,\n ),\n ).toBe(`lowercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}' and something else`,\n ),\n ).toBe(`this is the cwd: [project_dir] and something else`);\n});\n\ntest('sanitizeErrorMessage() project_dir and something else', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()} and something else`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${' and something else'.length})`,\n );\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules'`,\n ),\n ).toBe(`this is the cwd: [project_dir]\\\\???(${'node_modules'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules\\\\foo'`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`uppercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`lowercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `trailing: '${process.cwd()}\\\\node_modules\\\\' and something else`,\n ),\n ).toBe(`trailing: [node_modules]\\\\???(0) and something else`);\n});\n\ntest('sanitizeErrorMessage() node_modules and something else that could be part of the path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules and something else that could be part of the path`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${\n 'node_modules and something else that could be part of the path'.length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() \\\\node_modules\\\\ a file under nm', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules\\\\ a file under nm`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${' a file under nm'.length})`);\n});\n\ntest('sanitizeErrorMessage() other path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is another path: A:\\\\foo\\\\bar\\\\baz`),\n ).toBe(`this is another path: [path]`);\n});\n\ntest(\"sanitizeErrorMessage() 'other path'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is another path: 'A:\\\\foo\\\\bar\\\\baz'`,\n ),\n ).toBe(`this is another path: [path]`);\n});\n\ntest('sanitizeErrorMessage() tracked packages in the npx cache', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `Cannot find module 'react-native/package.json'\n Require stack:\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\bin.js`,\n ),\n ).toBe(`Cannot find module react-native/package.json\n Require stack:\n - [node_modules]\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js\n - [node_modules]\\\\react-native-windows-init\\\\bin.js`);\n});\n\ntest('sanitizeErrorMessage() forward slashes', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `EPERM: operation not permitted, scandir ${process.env.UserProfile!.replace(\n /\\\\/g,\n '/',\n )}/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include`,\n ),\n ).toBe(\n `EPERM: operation not permitted, scandir [UserProfile]\\\\???(${\n '/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include'\n .length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() file share path', () => {\n expect(errorUtils.sanitizeErrorMessage(`file here: \\\\\\\\server\\\\share`)).toBe(\n 'file here: [path]',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu id', () => {\n expect(errorUtils.sanitizeErrorMessage('5>This is an error')).toBe(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu/thread id', () => {\n expect(errorUtils.sanitizeErrorMessage('5:42>This is an error')).toEqual(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorStackFrame() with empty frame', () => {\n const emptyFrame: appInsights.Contracts.StackFrame = {\n level: 0,\n method: '',\n fileName: '',\n assembly: 'asdf',\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(emptyFrame);\n expect(emptyFrame).toEqual({\n level: 0,\n assembly: '',\n fileName: '[path]',\n method: '',\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with assembly name', () => {\n const frame1: appInsights.Contracts.StackFrame = {\n method: '',\n fileName: `${process.cwd()}\\\\foo.js`,\n assembly: 'asdf',\n level: 0,\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(frame1);\n expect(frame1).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(6)',\n method: '',\n level: 0,\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with method name', () => {\n const frame2: appInsights.Contracts.StackFrame = {\n method: `myMethod (something ${process.cwd()}`,\n fileName: `${process.cwd()}\\\\telemetry\\\\foo.js`,\n assembly: 'asdf',\n level: 1,\n line: 42,\n };\n errorUtils.sanitizeErrorStackFrame(frame2);\n expect(frame2).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(16)',\n method: 'myMethod',\n level: 1,\n line: 42,\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"errorUtils.test.js","sourceRoot":"","sources":["../../src/test/errorUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as errorUtils from '../utils/errorUtils';\n\ntest('tryGetErrorCode() with valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar error FOO2020: the thing')).toBe(\n 'FOO2020',\n );\n});\n\ntest('tryGetErrorCode() without valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar the thing')).toBeUndefined();\n});\n\ntest('tryGetErrorCode() with word error but no code', () => {\n expect(errorUtils.tryGetErrorCode('test error')).toBeUndefined();\n});\n\ntest('sanitizeErrorMessage() no-op on empty string', () => {\n expect(errorUtils.sanitizeErrorMessage('')).toBe('');\n});\n\ntest('sanitizeErrorMessage() no-op on test string', () => {\n expect(errorUtils.sanitizeErrorMessage('some text')).toBe('some text');\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is the cwd: '${process.cwd()}'`),\n ).toBe(`this is the cwd: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}'`,\n ),\n ).toBe(`uppercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}'`,\n ),\n ).toBe(`lowercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}' and something else`,\n ),\n ).toBe(`this is the cwd: [project_dir] and something else`);\n});\n\ntest('sanitizeErrorMessage() project_dir and something else', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()} and something else`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${' and something else'.length})`,\n );\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules'`,\n ),\n ).toBe(`this is the cwd: [project_dir]\\\\???(${'node_modules'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules\\\\foo'`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`uppercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`lowercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `trailing: '${process.cwd()}\\\\node_modules\\\\' and something else`,\n ),\n ).toBe(`trailing: [node_modules]\\\\???(0) and something else`);\n});\n\ntest('sanitizeErrorMessage() node_modules and something else that could be part of the path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules and something else that could be part of the path`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${\n 'node_modules and something else that could be part of the path'.length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() \\\\node_modules\\\\ a file under nm', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules\\\\ a file under nm`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${' a file under nm'.length})`);\n});\n\ntest('sanitizeErrorMessage() other path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is another path: A:\\\\foo\\\\bar\\\\baz`),\n ).toBe(`this is another path: [path]`);\n});\n\ntest(\"sanitizeErrorMessage() 'other path'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is another path: 'A:\\\\foo\\\\bar\\\\baz'`,\n ),\n ).toBe(`this is another path: [path]`);\n});\n\ntest('sanitizeErrorMessage() tracked packages in the npx cache', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `Cannot find module 'react-native/package.json'\n Require stack:\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\bin.js`,\n ),\n ).toBe(`Cannot find module react-native/package.json\n Require stack:\n - [node_modules]\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js\n - [node_modules]\\\\react-native-windows-init\\\\bin.js`);\n});\n\ntest('sanitizeErrorMessage() forward slashes', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `EPERM: operation not permitted, scandir ${process.env.UserProfile!.replace(\n /\\\\/g,\n '/',\n )}/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include`,\n ),\n ).toBe(\n `EPERM: operation not permitted, scandir [UserProfile]\\\\???(${\n '/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include'\n .length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() file share path', () => {\n expect(errorUtils.sanitizeErrorMessage(`file here: \\\\\\\\server\\\\share`)).toBe(\n 'file here: [path]',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu id', () => {\n expect(errorUtils.sanitizeErrorMessage('5>This is an error')).toBe(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu/thread id', () => {\n expect(errorUtils.sanitizeErrorMessage('5:42>This is an error')).toEqual(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorMessage() with standard MSBuild error', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `2:6>C:\\\\Program Files (x86)\\\\Windows Kits\\\\10\\\\bin\\\\10.0.19041.0\\\\XamlCompiler\\\\Microsoft.Windows.UI.Xaml.Common.targets(486,5): error MSB4181: The \"CompileXaml\" task returned false but did not log an error. [${process.cwd()}\\\\windows\\\\teltest68\\\\teltest68.csproj]`,\n ),\n ).toEqual(\n `[path](486,5): error MSB4181: The CompileXaml task returned false but did not log an error. [windows]\\\\???.csproj(${\n 'teltest68\\\\teltest68.csproj'.length\n })`,\n );\n});\n\ntest('sanitizeErrorStackFrame() with empty frame', () => {\n const emptyFrame: appInsights.Contracts.StackFrame = {\n level: 0,\n method: '',\n fileName: '',\n assembly: 'asdf',\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(emptyFrame);\n expect(emptyFrame).toEqual({\n level: 0,\n assembly: '',\n fileName: '[path]',\n method: '',\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with assembly name', () => {\n const frame1: appInsights.Contracts.StackFrame = {\n method: '',\n fileName: `${process.cwd()}\\\\foo.js`,\n assembly: 'asdf',\n level: 0,\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(frame1);\n expect(frame1).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(6)',\n method: '',\n level: 0,\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with method name', () => {\n const frame2: appInsights.Contracts.StackFrame = {\n method: `myMethod (something ${process.cwd()}`,\n fileName: `${process.cwd()}\\\\telemetry\\\\foo.js`,\n assembly: 'asdf',\n level: 1,\n line: 42,\n };\n errorUtils.sanitizeErrorStackFrame(frame2);\n expect(frame2).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(16)',\n method: 'myMethod',\n level: 1,\n line: 42,\n });\n});\n"]}
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
* @returns A telemetry-safe stable device ID.
|
|
9
9
|
*/
|
|
10
10
|
export declare function deviceId(): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Gets the device architecture, like x64/arm64.
|
|
13
|
+
* @returns The device architecture.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deviceArchitecture(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Gets the device platform, like darwin/linux/win32.
|
|
18
|
+
* @returns The device platform.
|
|
19
|
+
*/
|
|
20
|
+
export declare function devicePlatform(): string;
|
|
11
21
|
/**
|
|
12
22
|
* Gets the device locale.
|
|
13
23
|
* @returns The device locale.
|
|
@@ -8,7 +8,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
8
8
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
9
|
};
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.getSessionId = exports.isCliTest = exports.isMsftInternal = exports.ciType = exports.isCI = exports.captureCI = exports.sampleRate = exports.deviceDiskFreeSpace = exports.deviceTotalMemory = exports.deviceNumCPUs = exports.deviceLocale = exports.deviceId = void 0;
|
|
11
|
+
exports.getSessionId = exports.isCliTest = exports.isMsftInternal = exports.ciType = exports.isCI = exports.captureCI = exports.sampleRate = exports.deviceDiskFreeSpace = exports.deviceTotalMemory = exports.deviceNumCPUs = exports.deviceLocale = exports.devicePlatform = exports.deviceArchitecture = exports.deviceId = void 0;
|
|
12
12
|
const child_process_1 = require("child_process");
|
|
13
13
|
const os_1 = require("os");
|
|
14
14
|
const ci_info_1 = __importDefault(require("ci-info"));
|
|
@@ -23,6 +23,22 @@ async function deviceId() {
|
|
|
23
23
|
return await (0, node_machine_id_1.machineId)(false);
|
|
24
24
|
}
|
|
25
25
|
exports.deviceId = deviceId;
|
|
26
|
+
/**
|
|
27
|
+
* Gets the device architecture, like x64/arm64.
|
|
28
|
+
* @returns The device architecture.
|
|
29
|
+
*/
|
|
30
|
+
function deviceArchitecture() {
|
|
31
|
+
return (0, os_1.arch)();
|
|
32
|
+
}
|
|
33
|
+
exports.deviceArchitecture = deviceArchitecture;
|
|
34
|
+
/**
|
|
35
|
+
* Gets the device platform, like darwin/linux/win32.
|
|
36
|
+
* @returns The device platform.
|
|
37
|
+
*/
|
|
38
|
+
function devicePlatform() {
|
|
39
|
+
return (0, os_1.platform)();
|
|
40
|
+
}
|
|
41
|
+
exports.devicePlatform = devicePlatform;
|
|
26
42
|
/**
|
|
27
43
|
* Gets the device locale.
|
|
28
44
|
* @returns The device locale.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basePropUtils.js","sourceRoot":"","sources":["../../src/utils/basePropUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,iDAAuC;AACvC,
|
|
1
|
+
{"version":3,"file":"basePropUtils.js","sourceRoot":"","sources":["../../src/utils/basePropUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {execSync} from 'child_process';\nimport {totalmem, cpus, arch, platform} from 'os';\n\nimport ci from 'ci-info';\nimport {randomBytes} from 'crypto';\nimport {machineId} from 'node-machine-id';\nimport osLocale from 'os-locale';\n\n/**\n * Gets a telemetry-safe stable device ID.\n * @returns A telemetry-safe stable device ID.\n */\nexport async function deviceId(): Promise<string> {\n return await machineId(false);\n}\n\n/**\n * Gets the device architecture, like x64/arm64.\n * @returns The device architecture.\n */\nexport function deviceArchitecture(): string {\n return arch();\n}\n\n/**\n * Gets the device platform, like darwin/linux/win32.\n * @returns The device platform.\n */\nexport function devicePlatform(): string {\n return platform();\n}\n\n/**\n * Gets the device locale.\n * @returns The device locale.\n */\nexport async function deviceLocale(): Promise<string> {\n return await osLocale();\n}\n\n/**\n * Gets the device's number of CPUs.\n * @returns The device's number of CPUs.\n */\nexport function deviceNumCPUs(): number {\n return cpus().length;\n}\n\n/**\n * Gets the device's total memory in bytes.\n * @returns The device's total memory in bytes.\n */\nexport function deviceTotalMemory(): number {\n return totalmem();\n}\n\n/**\n * Gets the free space of the give drive in bytes.\n * @param drivePath A path on the drive to check.\n * @returns The free space of the give drive in bytes.\n */\nexport function deviceDiskFreeSpace(drivePath?: string | null): number {\n try {\n const out = execSync(`dir /-C ${drivePath ?? process.cwd()}`)\n .toString()\n .split('\\r\\n');\n const line = out[out.length - 2];\n const result = line.match(/(\\d+) [^\\d]+(\\d+) /);\n if (result && result.length > 2) {\n return Number(result[2]);\n }\n } catch {}\n return -1;\n}\n\n/**\n * Gets the telemetry sample rate.\n * @returns The telemetry sample rate.\n */\nexport function sampleRate(): number {\n return 100;\n}\n\n/**\n * Gets whether or not telemetry events are captured when running in CI.\n * @returns Whether or not telemetry events are captured when running in CI.\n */\nexport function captureCI(): boolean {\n // Only capture events in CI if running tests\n return isCliTest();\n}\n\n/**\n * Gets the whether the process is currently running in CI.\n * @returns Whether the process is currently running in CI.\n */\nexport function isCI(): boolean {\n return ci.isCI;\n}\n\n/**\n * Gets the type of CI the process is running under.\n * @returns The type of CI the process is running under.\n */\nexport function ciType(): string {\n return ci.isCI ? ci.name ?? 'Unknown' : 'None';\n}\n\n/**\n * Gets whether the process is running on a Microsoft owned machine.\n * @returns Whether the process is running on a Microsoft owned machine.\n */\nexport function isMsftInternal(): boolean {\n return (\n process.env.UserDNSDomain !== undefined &&\n process.env.UserDNSDomain.toLowerCase().endsWith('corp.microsoft.com')\n );\n}\n\n/**\n * Gets whether the process is running as part of our CLI tests.\n * @returns Whether the process is running as part of our CLI tests.\n */\nexport function isCliTest(): boolean {\n return (\n process.env.RNW_CLI_TEST !== undefined &&\n process.env.RNW_CLI_TEST.toLowerCase().trim() === 'true'\n );\n}\n\nlet sessionId: string | undefined;\n\n/**\n * Gets a stable session ID for correlating telemetry events.\n * @returns A stable session ID for correlating telemetry events.\n */\nexport function getSessionId(): string {\n return (\n sessionId ?? (sessionId = randomBytes(16).toString('hex').padStart(32, '0'))\n );\n}\n"]}
|
|
@@ -115,6 +115,8 @@ exports.tryGetErrorCode = tryGetErrorCode;
|
|
|
115
115
|
* @return The message with any paths anonymized.
|
|
116
116
|
*/
|
|
117
117
|
function sanitizeErrorMessage(msg) {
|
|
118
|
+
const msBuildErrorMessage = /^\d+:\d+>(.*)(\(\d+,\d+\)): error (\w+\d+): (.*)/g;
|
|
119
|
+
msg = msg.replace(msBuildErrorMessage, '[$1]$2: error $3: $4');
|
|
118
120
|
const cpuThreadId = /^\d+(:\d+)?>/g;
|
|
119
121
|
msg = msg.replace(cpuThreadId, '');
|
|
120
122
|
const parts = msg.split(/['[\]"]/g);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;AAIH,+DAAiD;AAEjD,6EAA6E;AAC7E,iEAAiE;AACjE,yEAAyE;AACzE,iEAAiE;AAEpD,QAAA,WAAW,GAAG;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC,CAAC;IAEX,OAAO;IACP,6BAA6B,EAAE,IAAI;IACnC,UAAU,EAAE,IAAI;IAChB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,IAAI;IACnB,0BAA0B,EAAE,IAAI;IAChC,gCAAgC,EAAE,IAAI;IACtC,mBAAmB,EAAE,IAAI;IACzB,yBAAyB,EAAE,IAAI;IAC/B,wBAAwB,EAAE,IAAI;IAE9B,cAAc;IACd,UAAU,EAAE,IAAI;IAChB,qBAAqB;IACrB,mBAAmB,EAAE,IAAI;IACzB,+BAA+B,EAAE,IAAI;IACrC,6BAA6B,EAAE,IAAI;IACnC,gCAAgC,EAAE,IAAI;IACtC,mBAAmB;IACnB,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,IAAI;IACzB,KAAK,EAAE,IAAI;IACX,QAAQ;IACR,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,SAAS;IACT,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,oBAAoB,EAAE,IAAI;IAC1B,0BAA0B,EAAE,IAAI;IAChC,oBAAoB,EAAE,IAAI;IAC1B,iBAAiB,EAAE,IAAI;IACvB,6BAA6B,EAAE,IAAI;IACnC,wBAAwB,EAAE,IAAI;IAC9B,yBAAyB,EAAE,IAAI;IAC/B,2BAA2B,EAAE,IAAI;IACjC,mBAAmB,EAAE,IAAI;IACzB,SAAS;IACT,iBAAiB,EAAE,IAAI;IAEvB,mBAAmB;IACnB,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;IACrB,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,IAAI;CAClB,CAAC;AAIF;;;;;;GAMG;AACH,MAAa,UAAW,SAAQ,KAAK;IACnC,YACkB,IAAoB,EACpC,OAAe,EACC,IAA0B;QAE1C,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAgB;QAEpB,SAAI,GAAJ,IAAI,CAAsB;QAG1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,gCASC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,GAAW;IACzC,MAAM,UAAU,GAAG,mBAAmB,CAAC;IACvC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9B,CAAC;AAJD,0CAIC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,MAAM,WAAW,GAAG,eAAe,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as sanitizeUtils from './sanitizeUtils';\n\n// Note: All CLI commands will set process.exitCode to the numerical value of\n// a thrown CodedError. However node reserves codes 1-192 as per:\n// https://nodejs.org/api/process.html#process_exit_codes so we shouldn't\n// override those as other tools may be monitoring the error code\n\nexport const CodedErrors = {\n Success: 0,\n Unknown: -1,\n\n // init\n UnsupportedReactNativeVersion: 1000,\n UserCancel: 1001,\n NoReactNativeFound: 1002,\n NoPackageJson: 1003,\n NoLatestReactNativeWindows: 1004,\n NoAutoMatchingReactNativeWindows: 1005,\n IncompatibleOptions: 1006,\n NoReactNativeDependencies: 1007,\n NoMatchingPackageVersion: 1008,\n\n // run-windows\n NoSolution: 2000,\n // Project generation\n NoPropertyInProject: 2100,\n CopyProjectTemplateNoSourcePath: 2101,\n CopyProjectTemplateNoDestPath: 2102,\n CopyProjectTemplateNoProjectName: 2103,\n // SDK requirements\n MinSDKVersionNotMet: 2200,\n BadSDKVersionFormat: 2201,\n NoSDK: 2202,\n // Build\n NoMSBuild: 2300,\n NoVSWhere: 2301,\n MSBuildError: 2302,\n // Deploy\n NoAppPackage: 2400,\n NoAppxManifest: 2401,\n NoDevice: 2402,\n AppDidNotDeploy: 2403,\n InvalidDevicesOutput: 2404,\n RemoveOldAppVersionFailure: 2405,\n EnableDevModeFailure: 2406,\n InstallAppFailure: 2407,\n InstallAppDependenciesFailure: 2408,\n CheckNetIsolationFailure: 2409,\n InstallAppToDeviceFailure: 2410,\n UninstallAppOnDeviceFailure: 2411,\n DeployRecipeFailure: 2412,\n // Launch\n AppStartupFailure: 2500,\n\n // autolink-windows\n NoWindowsConfig: 3000,\n IncompleteConfig: 3001,\n InvalidConfig: 3002,\n NeedAutolinking: 3003,\n AddProjectToSolution: 3004,\n Autolinking: 3005,\n};\n\nexport type CodedErrorType = keyof typeof CodedErrors;\n\n/**\n * Represents an error whose message might contain user-originating content,\n * therefore when transmitting telemetry, only the type should be sent.\n * @param type a stable ID identifying the type of error.\n * @param message the error text. This should only be used for display to the user.\n * @param data any additional metadata that is safe to collect for telemetry purposes.\n */\nexport class CodedError extends Error {\n constructor(\n public readonly type: CodedErrorType,\n message: string,\n public readonly data?: Record<string, any>,\n ) {\n super(message);\n this.name = type;\n }\n}\n\n/**\n * Tries to parse an error code out of an error message.\n * @param msg An error message to process.\n * @returns The parsed error code.\n */\nexport function tryGetErrorCode(msg: string): string | undefined {\n const errorRegEx = /error (\\w+\\d+):/gi;\n const m = errorRegEx.exec(msg);\n return m ? m[1] : undefined;\n}\n\n/**\n * Sanitize an error message by anonymizing any paths that appear between quotes (''), brackets ([]), or double quotes (\"\").\n * @param msg The error message to sanitize.\n * @return The message with any paths anonymized.\n */\nexport function sanitizeErrorMessage(msg: string): string {\n const msBuildErrorMessage =\n /^\\d+:\\d+>(.*)(\\(\\d+,\\d+\\)): error (\\w+\\d+): (.*)/g;\n msg = msg.replace(msBuildErrorMessage, '[$1]$2: error $3: $4');\n\n const cpuThreadId = /^\\d+(:\\d+)?>/g;\n msg = msg.replace(cpuThreadId, '');\n\n const parts = msg.split(/['[\\]\"]/g);\n const clean = [];\n const pathRegEx =\n /(['[\"]?)([A-Za-z]:|\\\\)[\\\\/]([^<>:;,?\"*\\t\\r\\n|/\\\\]+[\\\\/])+([^<>:;,?\"*\\t\\r\\n|]+\\/?(['[\"]?))/gi;\n for (const part of parts) {\n if (pathRegEx.test(part)) {\n pathRegEx.lastIndex = -1;\n let matches: RegExpExecArray | null;\n let noPath = '';\n let last = 0;\n while ((matches = pathRegEx.exec(part))) {\n noPath +=\n part.substr(last, matches!.index - last) +\n sanitizeUtils.getAnonymizedPath(matches[0]);\n last = matches!.index + matches![0].length;\n }\n if (noPath !== '') {\n clean.push(noPath);\n }\n } else if (part !== '') {\n clean.push(part);\n }\n }\n return clean.join('').trim();\n}\n\n/**\n * Sanitizes an error stack frame.\n * @param frame\n */\nexport function sanitizeErrorStackFrame(\n frame: appInsights.Contracts.StackFrame,\n): void {\n const parens = frame.method.indexOf('(');\n if (parens !== -1) {\n // case 1: method === 'methodName (rootOfThePath'\n frame.method = frame.method.substr(0, parens).trim();\n } else {\n // case 2: method === <no_method> or something without '(', fileName is full path\n }\n // anonymize the filename\n frame.fileName = sanitizeUtils.getAnonymizedPath(frame.fileName);\n frame.assembly = '';\n}\n"]}
|
|
@@ -56,7 +56,7 @@ function getAnonymizedPath(filepath, projectRoot) {
|
|
|
56
56
|
const rest = filepath.slice(projectRoot.length);
|
|
57
57
|
if (rest.toLowerCase().startsWith(windows)) {
|
|
58
58
|
// We are under the windows path, anonymize with [windows]
|
|
59
|
-
return `[windows]\\???${ext}(${rest.length - windows.length
|
|
59
|
+
return `[windows]\\???${ext}(${rest.length - windows.length})`;
|
|
60
60
|
}
|
|
61
61
|
else {
|
|
62
62
|
// We are just within the projectRoot, anonymize with [project_dir]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeUtils.js","sourceRoot":"","sources":["../../src/utils/sanitizeUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,gDAAwB;AAExB,4CAAgD;AAEhD,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC;AAE9B,MAAM,6BAA6B,GAAG;IACpC,SAAS;IACT,cAAc;IACd,aAAa;CACd,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,WAAoB;IAEpB,WAAW,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;SACzC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,WAAW,EAAE,CAAC;IACjB,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,WAAW,CAAC;IAChB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,oCAAoC;IACpC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzE,IAAI,gBAAgB,IAAI,CAAC,EAAE;QACzB,4BAA4B;QAE5B,8CAA8C;QAC9C,KAAK,MAAM,iBAAiB,IAAI,8BAAkB,EAAE;YAClD,MAAM,UAAU,GAAG,QAAQ;iBACxB,WAAW,EAAE;iBACb,WAAW,CACV,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAC5D,CAAC;YACJ,IAAI,UAAU,IAAI,CAAC,EAAE;gBACnB,6FAA6F;gBAC7F,OAAO,CACL,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CACrE,CAAC;aACH;SACF;QAED,wEAAwE;QACxE,OAAO,sBAAsB,GAAG,IAC9B,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,MACxD,GAAG,CAAC;KACL;IAED,uCAAuC;IACvC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QAClD,+BAA+B;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC1C,0DAA0D;YAC1D,OAAO,iBAAiB,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"sanitizeUtils.js","sourceRoot":"","sources":["../../src/utils/sanitizeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport path from 'path';\n\nimport {NpmPackagesWeTrack} from '../telemetry';\n\nconst nodeModules = '\\\\node_modules\\\\';\nconst windows = '\\\\windows\\\\';\n\nconst knownEnvironmentVariablePaths = [\n 'AppData',\n 'LocalAppData',\n 'UserProfile',\n];\n\n/**\n * Gets an anonymized version of the given path, suitable for Telemetry.\n * @param filepath The path to anonymize.\n * @param projectRoot Optional root path for the project. Defaults to process.cwd().\n * @returns The anonymized path.\n */\nexport function getAnonymizedPath(\n filepath: string,\n projectRoot?: string,\n): string {\n projectRoot = (projectRoot ?? process.cwd())\n .replace(/\\//g, '\\\\')\n .toLowerCase();\n projectRoot = projectRoot.endsWith('\\\\')\n ? projectRoot.slice(0, -1)\n : projectRoot;\n filepath = filepath.replace(/\\//g, '\\\\');\n\n const ext = path.extname(filepath);\n\n // Check if we're under node_modules\n const nodeModulesIndex = filepath.toLowerCase().lastIndexOf(nodeModules);\n if (nodeModulesIndex >= 0) {\n // We are under node_modules\n\n // Check if it's an npm package we're tracking\n for (const trackedNpmPackage of NpmPackagesWeTrack) {\n const startIndex = filepath\n .toLowerCase()\n .lastIndexOf(\n nodeModules + trackedNpmPackage.replace(/\\//g, '\\\\') + '\\\\',\n );\n if (startIndex >= 0) {\n // We are under node_modules within an npm package we're tracking, anonymize by removing root\n return (\n '[node_modules]\\\\' + filepath.slice(startIndex + nodeModules.length)\n );\n }\n }\n\n // It's an npm package we're not tracking, anonymize with [node_modules]\n return `[node_modules]\\\\???${ext}(${\n filepath.slice(nodeModulesIndex).length - nodeModules.length\n })`;\n }\n\n // Check if we're under the projectRoot\n if (filepath.toLowerCase().startsWith(projectRoot)) {\n // We are under the projectRoot\n const rest = filepath.slice(projectRoot.length);\n if (rest.toLowerCase().startsWith(windows)) {\n // We are under the windows path, anonymize with [windows]\n return `[windows]\\\\???${ext}(${rest.length - windows.length})`;\n } else {\n // We are just within the projectRoot, anonymize with [project_dir]\n if (rest === '' || rest === '\\\\') {\n return '[project_dir]';\n } else {\n return `[project_dir]\\\\???${ext}(${\n rest.length - (rest.startsWith('\\\\') ? 1 : 0)\n })`;\n }\n }\n }\n\n // Check if we're under a known environmental variable path\n for (const knownPath of knownEnvironmentVariablePaths) {\n if (\n process.env[knownPath] &&\n filepath.toLowerCase().startsWith(process.env[knownPath]!.toLowerCase())\n ) {\n return `[${knownPath}]\\\\???(${\n filepath.length - process.env[knownPath]!.length\n })`;\n }\n }\n\n // We are somewhere else, anonymize with [path]\n return '[path]';\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-windows/telemetry",
|
|
3
|
-
"version": "0.68.
|
|
3
|
+
"version": "0.68.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"typings": "lib-commonjs/index.d.ts",
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
"clean": "rnw-scripts clean",
|
|
15
15
|
"lint": "rnw-scripts lint",
|
|
16
16
|
"lint:fix": "rnw-scripts lint:fix",
|
|
17
|
-
"test": "set RNW_CLI_TEST=true&& rnw-scripts test",
|
|
17
|
+
"test": "set RNW_CLI_TEST=true&&set APPLICATION_INSIGHTS_NO_STATSBEAT=true&& rnw-scripts test",
|
|
18
18
|
"watch": "rnw-scripts watch"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@react-native-windows/fs": "0.68.0
|
|
21
|
+
"@react-native-windows/fs": "0.68.0",
|
|
22
22
|
"@xmldom/xmldom": "^0.7.5",
|
|
23
|
-
"applicationinsights": "^2.1
|
|
23
|
+
"applicationinsights": "^2.3.1",
|
|
24
24
|
"ci-info": "^3.2.0",
|
|
25
25
|
"envinfo": "^7.8.1",
|
|
26
26
|
"lodash": "^4.17.21",
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"lib-commonjs"
|
|
51
51
|
],
|
|
52
52
|
"beachball": {
|
|
53
|
-
"defaultNpmTag": "
|
|
53
|
+
"defaultNpmTag": "latest",
|
|
54
54
|
"disallowedChangeTypes": [
|
|
55
55
|
"major",
|
|
56
56
|
"minor",
|
|
57
|
-
"
|
|
57
|
+
"prerelease"
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
60
|
"promoteRelease": true,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../src/test/telemetry.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\nimport CorrelationIdManager from 'applicationinsights/out/Library/CorrelationIdManager';\nimport * as path from 'path';\n\nimport {\n Telemetry,\n CommandStartInfo,\n CommandEndInfo,\n CommandEventName,\n CodedErrorEventName,\n} from '../telemetry';\nimport * as basePropUtils from '../utils/basePropUtils';\nimport * as errorUtils from '../utils/errorUtils';\nimport * as projectUtils from '../utils/projectUtils';\nimport * as versionUtils from '../utils/versionUtils';\n\nexport class TelemetryTest extends Telemetry {\n protected static hasTestTelemetryProviders: boolean;\n protected static testTelemetryProvidersRan: boolean;\n\n /** Run at the beginning of each test. */\n static async startTest() {\n TelemetryTest.hasTestTelemetryProviders = false;\n TelemetryTest.testTelemetryProvidersRan = false;\n\n jest.setTimeout(10000); // These E2E tests can run longer than the default 5000ms\n\n if (TelemetryTest.isEnabled()) {\n Telemetry.reset();\n }\n\n // Ensure that we don't actually fire events when testing\n Telemetry.isTest = true;\n\n await Telemetry.setup({preserveErrorMessages: true});\n\n // Workaround for https://github.com/microsoft/ApplicationInsights-node.js/issues/833\n Telemetry.client!.config.correlationIdRetryIntervalMs = 500;\n CorrelationIdManager.cancelCorrelationIdQuery(\n Telemetry.client!.config,\n () => {},\n );\n }\n\n /** Run at the end of each test where telemetry was fired. */\n static endTest(finalCallback: () => void): void {\n Telemetry.client?.flush({\n callback: (_) => {\n if (TelemetryTest.hasTestTelemetryProviders) {\n expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);\n }\n finalCallback();\n },\n });\n }\n\n /** Sets that the telemetry provider has run. */\n static setTestTelemetryProvidersRan() {\n TelemetryTest.testTelemetryProvidersRan = true;\n }\n\n /** Retrieves the value of a common property.*/\n static getCommonProperty(key: string): string | undefined {\n return TelemetryTest.client?.commonProperties[key];\n }\n\n /** Retrieves the version of the specified tool/package. */\n static getVersion(key: string): string | null {\n return key in TelemetryTest.versionsProp\n ? TelemetryTest.versionsProp[key]\n : null;\n }\n\n /** Adds a telemetry processor, usually for verifying the envelope. */\n static addTelemetryProcessor(\n telemetryProcessor: (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n ) => boolean,\n ): void {\n TelemetryTest.client?.addTelemetryProcessor(telemetryProcessor);\n TelemetryTest.hasTestTelemetryProviders = true;\n }\n}\n\nbeforeEach(async () => {\n await TelemetryTest.startTest();\n});\n\ntest('setup() verify session id is valid and a common property', async () => {\n const sessionId = TelemetryTest.getSessionId();\n expect(sessionId).toBeDefined();\n expect(sessionId!).toHaveLength(32);\n expect(sessionId!).toBe(basePropUtils.getSessionId());\n expect(sessionId!).toBe(TelemetryTest.getCommonProperty('sessionId'));\n});\n\ntest('setup() verify static common property values with async sources', async () => {\n const props: Record<string, () => Promise<string | undefined>> = {\n deviceId: basePropUtils.deviceId,\n deviceLocale: basePropUtils.deviceLocale,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = await props[key]();\n expect(value).toBeDefined();\n expect(value).toBe(TelemetryTest.getCommonProperty(key));\n }\n }\n});\n\ntest('setup() verify static common property values with sync sources', () => {\n const props: Record<string, () => string | undefined> = {\n deviceNumCPUs: () => basePropUtils.deviceNumCPUs().toString(),\n deviceTotalMemory: () => basePropUtils.deviceTotalMemory().toString(),\n ciCaptured: () => basePropUtils.captureCI().toString(),\n ciType: () => basePropUtils.ciType(),\n isMsftInternal: () => basePropUtils.isMsftInternal().toString(),\n isTest: () => 'true',\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = props[key]();\n expect(value).toBeDefined();\n expect(value).toBe(TelemetryTest.getCommonProperty(key));\n }\n }\n});\n\ntest('setup() verify other common property values are defined', () => {\n const props: string[] = ['deviceDiskFreeSpace'];\n\n for (const key of props) {\n const value = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n }\n});\n\ntest('setup() verify tool versions are populated', async () => {\n const props: Record<string, () => Promise<string | null>> = {\n node: versionUtils.getNodeVersion,\n npm: versionUtils.getNpmVersion,\n yarn: versionUtils.getYarnVersion,\n VisualStudio: versionUtils.getVisualStudioVersion,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = await props[key]();\n expect(value).toBe(TelemetryTest.getVersion(key));\n }\n }\n});\n\ntest('tryUpdateVersionsProp() returns true for adding a new version', async () => {\n const name = 'test';\n const version = '1.0';\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n expect(TelemetryTest.getVersion(name)).toBe(version);\n});\n\ntest('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async () => {\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => {\n getValueCalled = true;\n return version;\n }),\n ).toBe(false);\n\n expect(getValueCalled).toBe(false);\n});\n\ntest('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async () => {\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(\n name,\n async () => {\n getValueCalled = true;\n return version;\n },\n true,\n ),\n ).toBe(true);\n\n expect(getValueCalled).toBe(true);\n});\n\n/** Returns the CommandStartInfo for our fake 'test-command'. */\nfunction getTestCommandStartInfo(): CommandStartInfo {\n return {\n commandName: 'test-command',\n args: {\n testArg1: 'true',\n testArg2: '10',\n testArg3: 'testValue',\n },\n options: {\n testArg0: 'unsetArg',\n testArg1: true,\n testArg2: 10,\n testArg3: 'testValue',\n },\n defaultOptions: {\n testArg0: 'unsetArg',\n testArg1: false,\n testArg2: 0,\n testArg3: 'defaultValue',\n },\n };\n}\n\n/** Returns the CommandEndInfo for our fake 'test-command'. */\nfunction getTestCommandEndInfo(\n resultCode: errorUtils.CodedErrorType,\n): CommandEndInfo {\n return {\n resultCode,\n };\n}\n\nfunction getTestCommandProjectInfo(): projectUtils.AppProjectInfo {\n return {\n id: projectUtils.getProjectId('test-app-project'),\n platforms: ['windows'],\n rnwLang: 'cpp',\n usesTS: true,\n usesRNConfig: false,\n jsEngine: 'Chakra',\n rnwSource: 'Source',\n dependencies: [\n {\n id: projectUtils.getProjectId('test-module-project'),\n platforms: ['android', 'windows'],\n rnwLang: 'cpp',\n },\n ],\n };\n}\n\nfunction getExtraProps(): Record<string, any> {\n return {\n extraProp1: true,\n extraProp2: 1234,\n extraProp3: 'test',\n extraProp4: ['test'],\n extraProp5: {\n nestedProp1: true,\n nestedProp2: 1234,\n },\n };\n}\n\n/** Asynchronously waits the number in ms. */\nasync function promiseDelay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** The body of the fake 'test-command' which will throw the provided error. */\nasync function testCommandBody(errorToThrow?: Error): Promise<void> {\n await promiseDelay(100);\n if (errorToThrow) {\n throw errorToThrow;\n }\n}\n\n/** Runs the complete 'test-command' with the right Telemetry setup and cleanup. */\nasync function runTestCommandE2E(commandBody: () => Promise<void>) {\n TelemetryTest.startCommand(getTestCommandStartInfo());\n TelemetryTest.setProjectInfo(getTestCommandProjectInfo());\n let errorCode: errorUtils.CodedErrorType = 'Success';\n let caughtError: Error | undefined;\n try {\n await commandBody();\n } catch (ex) {\n caughtError = ex instanceof Error ? (ex as Error) : new Error(String(ex));\n errorCode =\n caughtError instanceof errorUtils.CodedError\n ? (caughtError as errorUtils.CodedError).type\n : 'Unknown';\n TelemetryTest.trackException(caughtError);\n }\n TelemetryTest.endCommand(getTestCommandEndInfo(errorCode), getExtraProps());\n}\n\n/** Verifys the contents of events fired during the 'test-command'. */\nfunction verifyTestCommandTelemetryProcessor(\n caughtErrors: Error[],\n expectedResultCode?: errorUtils.CodedErrorType,\n expectedError?: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n // Verify roleInstance has been removed\n expect(envelope.tags['ai.cloud.roleInstance']).toBeUndefined();\n\n const properties = envelope.data.baseData?.properties;\n expect(properties).toBeDefined();\n\n // Verify basics\n expect(properties.commandName).toBe('test-command');\n\n // Verify versions info\n const versions = JSON.parse(properties.versions);\n expect(versions).toBeDefined();\n\n // Verify project info\n const project = JSON.parse(properties.project);\n expect(project).toStrictEqual(getTestCommandProjectInfo());\n\n expect(Object.keys(versions).length).toBeGreaterThan(0);\n for (const key of Object.keys(versions)) {\n expect(versions[key]).toBe(TelemetryTest.getVersion(key));\n }\n\n if (envelope.data.baseType === 'ExceptionData') {\n // Verify event name\n expect(properties.eventName).toBe(CodedErrorEventName);\n\n // Verify coded error info\n const codedError = JSON.parse(properties.codedError);\n expect(codedError).toBeDefined();\n\n expect(codedError.type).toBe(\n expectedError instanceof errorUtils.CodedError\n ? expectedError.type\n : 'Unknown',\n );\n expect(codedError.rawErrorCode).toBe(\n errorUtils.tryGetErrorCode(expectedError?.message ?? '') ?? '',\n );\n expect(codedError.data).toStrictEqual(\n (expectedError as errorUtils.CodedError).data ?? {},\n );\n } else {\n // Verify event name\n expect(envelope.data.baseData?.name).toBe(CommandEventName);\n expect(properties.eventName).toBe(CommandEventName);\n\n // Verify command info\n const expectedInfo = getTestCommandStartInfo();\n\n const command = JSON.parse(properties.command);\n expect(command).toBeDefined();\n expect(command.args).toStrictEqual(expectedInfo.args);\n expect(command.options).toStrictEqual(expectedInfo.options);\n expect(command.defaultOptions).toStrictEqual(\n expectedInfo.defaultOptions,\n );\n expect(command.durationInSecs).toBeGreaterThan(0);\n expect(command.resultCode).toBe(expectedResultCode ?? 'Success');\n\n // Verify extra props\n const extraProps = getExtraProps();\n for (const key of Object.keys(extraProps)) {\n switch (typeof extraProps[key]) {\n case 'object':\n expect(JSON.parse(properties[key])).toStrictEqual(\n extraProps[key],\n );\n break;\n default:\n expect(properties[key]).toBe(extraProps[key].toString());\n }\n }\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest('Telemetry run test command end to end, verify event fires', async (done) => {\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors),\n );\n\n await runTestCommandE2E(testCommandBody);\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError, verify events fire', async (done) => {\n const expectedError = new errorUtils.CodedError('MSBuildError', 'test error');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError (with error in message), verify events fire', async (done) => {\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'error FOO2020: test error',\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError (with data), verify events fire', async (done) => {\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'test error',\n {foo: 42},\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error, verify events fire', async (done) => {\n const expectedError = new Error('error FOO2020: test error');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors, 'Unknown', expectedError),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error (no message), verify events fire', async (done) => {\n const expectedError = new Error();\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors, 'Unknown', expectedError),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\nfunction b(s: string) {\n throw new Error('hello ' + s);\n}\n\nfunction a(s: string) {\n b(s);\n}\n\n/** Verifies the contents of an exception's message and stack frames */\nfunction getVerifyStackTelemetryProcessor(\n caughtErrors: Error[],\n expectedError: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n if (envelope.data.baseType === 'ExceptionData') {\n const data = (envelope.data as any).baseData;\n expect(data.exceptions).toBeDefined();\n expect(data.exceptions.length).toBe(1);\n expect(data.exceptions[0].message).toBe(\n errorUtils.sanitizeErrorMessage(expectedError.message),\n );\n\n const stack = data.exceptions[0].parsedStack;\n expect(stack).toBeDefined();\n expect(stack.length).toBeGreaterThan(2);\n\n const filename = path.relative(process.cwd(), __filename);\n expect(stack[0].method).toEqual('b');\n expect(stack[1].method).toEqual('a');\n expect(stack[0].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[1].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest('Telemetry run test command end to end with Error, verify sanitized message and stack', async (done) => {\n const expectedError = new Error('hello world');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a('world');\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error, verify sanitized message with path and stack', async (done) => {\n const expectedError = new Error(`hello ${process.cwd()}`);\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a(process.cwd());\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n"]}
|