@react-native-windows/telemetry 0.81.0 → 0.82.0-preview.1
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/e2etest/telemetry.test.js +1 -1
- package/lib-commonjs/e2etest/telemetry.test.js.map +1 -1
- package/lib-commonjs/telemetry.js +2 -2
- package/lib-commonjs/telemetry.js.map +1 -1
- package/lib-commonjs/utils/projectUtils.js +4 -6
- package/lib-commonjs/utils/projectUtils.js.map +1 -1
- package/package.json +7 -6
|
@@ -1 +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 coreOneDS from '@microsoft/1ds-core-js';\nimport * as path from 'path';\n\nimport {\n Telemetry,\n TelemetryOptions,\n CommandStartInfo,\n CommandEndInfo,\n CommandEventName,\n CodedErrorEventName,\n} from '../telemetry';\n\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\nclass CustomTestError extends Error {\n // Declare a mock errno field, so it is picked up by trackException() (see syscallExceptionFieldsToCopy)\n // to copy it into codedError.data.\n errno: string;\n\n constructor(message: string) {\n super(message);\n this.name = 'CustomTestError';\n this.errno = '123';\n }\n}\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.isTestEnvironment = 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.appInsightsCore?.flush(undefined /* isAsync */, () => {\n // Your callback logic here\n if (TelemetryTest.hasTestTelemetryProviders) {\n expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);\n }\n if (finalCallback) {\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.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 addTelemetryInitializer(\n telemetryInitializer: (envelope: coreOneDS.ITelemetryItem) => boolean,\n ): void {\n TelemetryTest.appInsightsCore?.addTelemetryInitializer(\n telemetryInitializer,\n );\n TelemetryTest.hasTestTelemetryProviders = true;\n }\n}\n\ntest('setup() verify session id is valid and a common property', async () => {\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();\n});\n\ntest('setup() verify static common property values with async sources', async () => {\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();\n});\n\ntest('setup() verify static common property values with sync sources', async () => {\n await TelemetryTest.startTest();\n\n const props: Record<string, () => string | undefined> = {\n deviceArchitecture: () => basePropUtils.deviceArchitecture(),\n nodePlatform: () => basePropUtils.nodePlatform(),\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 = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n expect(value).toBe(props[key]());\n }\n }\n\n TelemetryTest.endTest();\n});\n\ntest('setup() verify other common property values are defined', async () => {\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();\n});\n\ntest('setup() verify tool versions are populated', async () => {\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();\n});\n\ntest('tryUpdateVersionsProp() returns true for adding a new version', async () => {\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();\n});\n\ntest('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async () => {\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();\n});\n\ntest('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async () => {\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();\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/** Verifies the contents of events fired during the 'test-command'. */\nfunction verifyTestCommandTelemetryProcessor(\n caughtErrors: Error[],\n expectedResultCode?: errorUtils.CodedErrorType,\n expectedError?: Error,\n): (envelope: coreOneDS.ITelemetryItem) => boolean {\n return envelope => {\n TelemetryTest.setTestTelemetryProvidersRan();\n\n try {\n // Processor has run, so the test can (potentially) pass\n const properties = envelope.baseData;\n expect(properties).toBeDefined();\n\n // Verify basics\n const commonProperties = properties!.common;\n expect(commonProperties.commandName).toBe('test-command');\n\n // Verify versions info\n const versions = properties!.versions;\n expect(versions).toBeDefined();\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 // Verify project info\n const project = properties!.project;\n expect(project).toStrictEqual(getTestCommandProjectInfo());\n\n // Verify properties exclusive to error scenarios\n if (envelope.name === CodedErrorEventName) {\n // Verify exception info\n const exceptionData = envelope.data!.exceptionData;\n expect(exceptionData).toBeDefined();\n expect(exceptionData.message).toBeDefined();\n expect(exceptionData.message).not.toBe('');\n\n expect(exceptionData.message).toBe(\n TelemetryTest.getPreserveErrorMessages()\n ? errorUtils.sanitizeErrorMessage(expectedError?.message || 'None')\n : '[Removed]',\n );\n\n // Verify coded error info\n const codedError = envelope.data!.codedError;\n expect(codedError).toBeDefined();\n\n expect(codedError.type).toBe(\n expectedError instanceof errorUtils.CodedError\n ? expectedError.type\n : 'Unknown',\n );\n\n // If the exception type is not CodedError but any data got copied into envelope.CodedError.data,\n // for instance autolinking error info, build the expected CodedError.data.\n let expectedCodedErrorData = {};\n if (expectedError instanceof CustomTestError) {\n expectedCodedErrorData = {errno: expectedError.errno};\n }\n\n expect(codedError.data).toStrictEqual(\n (expectedError as errorUtils.CodedError).data ??\n expectedCodedErrorData,\n );\n } else {\n // If this is not error scenario, it must be a command successful event.\n expect(envelope.name).toBe(CommandEventName);\n\n // Verify command info\n const expectedInfo = getTestCommandStartInfo();\n\n const command = envelope.data!.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(envelope.data?.additionalData).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 () => {\n await TelemetryTest.startTest();\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with Error, verify events fire %s',\n async options => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\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): (envelope: coreOneDS.ITelemetryItem) => boolean {\n return envelope => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n if (envelope.name === CodedErrorEventName) {\n const data = envelope.data as any;\n expect(data.exceptionData).toBeDefined();\n expect(data.exceptionData.message).toBeDefined();\n expect(data.exceptionData.message).not.toBe('');\n\n expect(data.exceptionData.message).toBe(\n TelemetryTest.getPreserveErrorMessages()\n ? errorUtils.sanitizeErrorMessage(expectedError.message || 'None')\n : '[Removed]',\n );\n\n const stack = data.exceptionData.parsedStack;\n expect(stack).toBeDefined();\n expect(stack.length).toBeGreaterThan(2);\n\n const filename = path.relative(process.cwd(), __filename);\n expect(stack[0].functionName).toEqual('b');\n expect(stack[1].functionName).toEqual('b');\n expect(stack[2].functionName).toEqual('a');\n expect(stack[0].filePath).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[1].filePath).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[2].filePath).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 => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'A custom Error-based object with MS Build error info is copied into codedError.data appropriately by trackException()',\n async options => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new CustomTestError('some message');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryInitializer(\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 });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with CodedError, verifies PII is scrubbed if present in CodedError.',\n async options => {\n await TelemetryTest.startTest(options);\n\n const codedErrorInfo = new errorUtils.CodedError(\n 'MSBuildError', // type\n 'test error', // message\n {\n fieldWithPath:\n 'Test Error occurred at C:\\\\some\\\\file\\\\path\\\\project.build.appxrecipe', // expectation: replace the whole C:\\\\... thing with \"[path]\".\n fieldWithNoPath: 'Test Error data', // expectation: no changes to this string.\n fieldWithNoString: 14, // expectation: no changes to this value.\n arrayField: [\n 'No path',\n 15,\n 'Clean this path: C:\\\\some\\\\file\\\\path2\\\\project.build.appxrecipe',\n [\n 'No path',\n 150,\n 'Also clean this: C:\\\\some\\\\file\\\\path2\\\\project.build.appxrecipe',\n ],\n ],\n someObject: {\n fieldWithPath:\n 'Test Error occurred at C:\\\\some\\\\file\\\\path3\\\\project.build.appxrecipe', // expectation: replace the whole C:\\\\... thing with \"[path]\".\n fieldWithNoPath: 'Test Error data 2', // expectation: no changes to this string.\n fieldWithNoString: 16, // expectation: no changes to this value.\n nestedObject: {\n fieldWithPath:\n 'Test Error occurred at C:\\\\some\\\\file\\\\path4\\\\project.build.appxrecipe', // expectation: replace the whole C:\\\\... thing with \"[path]\".\n fieldWithNoPath: 'Test Error data 3', // expectation: no changes to this string.\n fieldWithNoString: 17, // expectation: no changes to this value.\n },\n },\n }, // data\n );\n\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError', // type\n 'test error', // message\n {\n fieldWithPath: 'Test Error occurred at [path]',\n fieldWithNoPath: 'Test Error data',\n fieldWithNoString: 14,\n arrayField: [\n 'No path',\n 15,\n 'Clean this path: [path]',\n ['No path', 150, 'Also clean this: [path]'],\n ],\n someObject: {\n fieldWithPath: 'Test Error occurred at [path]',\n fieldWithNoPath: 'Test Error data 2',\n fieldWithNoString: 16,\n nestedObject: {\n fieldWithPath: 'Test Error occurred at [path]',\n fieldWithNoPath: 'Test Error data 3',\n fieldWithNoString: 17,\n },\n },\n }, // data\n );\n\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryInitializer(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(codedErrorInfo));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n });\n },\n);\n"]}
|
|
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 coreOneDS from '@microsoft/1ds-core-js';\nimport * as path from 'path';\n\nimport {\n Telemetry,\n TelemetryOptions,\n CommandStartInfo,\n CommandEndInfo,\n CommandEventName,\n CodedErrorEventName,\n} from '../telemetry';\n\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\nclass CustomTestError extends Error {\n // Declare a mock errno field, so it is picked up by trackException() (see syscallExceptionFieldsToCopy)\n // to copy it into codedError.data.\n errno: string;\n\n constructor(message: string) {\n super(message);\n this.name = 'CustomTestError';\n this.errno = '123';\n }\n}\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.isTestEnvironment = 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.appInsightsCore?.flush(undefined /* isAsync */, () => {\n // Your callback logic here\n if (TelemetryTest.hasTestTelemetryProviders) {\n expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);\n }\n if (finalCallback) {\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.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 addTelemetryInitializer(\n telemetryInitializer: (envelope: coreOneDS.ITelemetryItem) => boolean,\n ): void {\n TelemetryTest.appInsightsCore?.addTelemetryInitializer(\n telemetryInitializer,\n );\n TelemetryTest.hasTestTelemetryProviders = true;\n }\n}\n\ntest('setup() verify session id is valid and a common property', async () => {\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();\n});\n\ntest('setup() verify static common property values with async sources', async () => {\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();\n});\n\ntest('setup() verify static common property values with sync sources', async () => {\n await TelemetryTest.startTest();\n\n const props: Record<string, () => string | undefined> = {\n deviceArchitecture: () => basePropUtils.deviceArchitecture(),\n nodePlatform: () => basePropUtils.nodePlatform(),\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 = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n expect(value).toBe(props[key]());\n }\n }\n\n TelemetryTest.endTest();\n});\n\ntest('setup() verify other common property values are defined', async () => {\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();\n});\n\ntest('setup() verify tool versions are populated', async () => {\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();\n});\n\ntest('tryUpdateVersionsProp() returns true for adding a new version', async () => {\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();\n});\n\ntest('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async () => {\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();\n});\n\ntest('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async () => {\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();\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: 'Hermes',\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/** Verifies the contents of events fired during the 'test-command'. */\nfunction verifyTestCommandTelemetryProcessor(\n caughtErrors: Error[],\n expectedResultCode?: errorUtils.CodedErrorType,\n expectedError?: Error,\n): (envelope: coreOneDS.ITelemetryItem) => boolean {\n return envelope => {\n TelemetryTest.setTestTelemetryProvidersRan();\n\n try {\n // Processor has run, so the test can (potentially) pass\n const properties = envelope.baseData;\n expect(properties).toBeDefined();\n\n // Verify basics\n const commonProperties = properties!.common;\n expect(commonProperties.commandName).toBe('test-command');\n\n // Verify versions info\n const versions = properties!.versions;\n expect(versions).toBeDefined();\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 // Verify project info\n const project = properties!.project;\n expect(project).toStrictEqual(getTestCommandProjectInfo());\n\n // Verify properties exclusive to error scenarios\n if (envelope.name === CodedErrorEventName) {\n // Verify exception info\n const exceptionData = envelope.data!.exceptionData;\n expect(exceptionData).toBeDefined();\n expect(exceptionData.message).toBeDefined();\n expect(exceptionData.message).not.toBe('');\n\n expect(exceptionData.message).toBe(\n TelemetryTest.getPreserveErrorMessages()\n ? errorUtils.sanitizeErrorMessage(expectedError?.message || 'None')\n : '[Removed]',\n );\n\n // Verify coded error info\n const codedError = envelope.data!.codedError;\n expect(codedError).toBeDefined();\n\n expect(codedError.type).toBe(\n expectedError instanceof errorUtils.CodedError\n ? expectedError.type\n : 'Unknown',\n );\n\n // If the exception type is not CodedError but any data got copied into envelope.CodedError.data,\n // for instance autolinking error info, build the expected CodedError.data.\n let expectedCodedErrorData = {};\n if (expectedError instanceof CustomTestError) {\n expectedCodedErrorData = {errno: expectedError.errno};\n }\n\n expect(codedError.data).toStrictEqual(\n (expectedError as errorUtils.CodedError).data ??\n expectedCodedErrorData,\n );\n } else {\n // If this is not error scenario, it must be a command successful event.\n expect(envelope.name).toBe(CommandEventName);\n\n // Verify command info\n const expectedInfo = getTestCommandStartInfo();\n\n const command = envelope.data!.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(envelope.data?.additionalData).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 () => {\n await TelemetryTest.startTest();\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with Error, verify events fire %s',\n async options => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\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): (envelope: coreOneDS.ITelemetryItem) => boolean {\n return envelope => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n if (envelope.name === CodedErrorEventName) {\n const data = envelope.data as any;\n expect(data.exceptionData).toBeDefined();\n expect(data.exceptionData.message).toBeDefined();\n expect(data.exceptionData.message).not.toBe('');\n\n expect(data.exceptionData.message).toBe(\n TelemetryTest.getPreserveErrorMessages()\n ? errorUtils.sanitizeErrorMessage(expectedError.message || 'None')\n : '[Removed]',\n );\n\n const stack = data.exceptionData.parsedStack;\n expect(stack).toBeDefined();\n expect(stack.length).toBeGreaterThan(2);\n\n const filename = path.relative(process.cwd(), __filename);\n expect(stack[0].functionName).toEqual('b');\n expect(stack[1].functionName).toEqual('b');\n expect(stack[2].functionName).toEqual('a');\n expect(stack[0].filePath).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[1].filePath).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[2].filePath).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 => {\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.addTelemetryInitializer(\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 });\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 => {\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.addTelemetryInitializer(\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 });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'A custom Error-based object with MS Build error info is copied into codedError.data appropriately by trackException()',\n async options => {\n await TelemetryTest.startTest(options);\n\n const expectedError = new CustomTestError('some message');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryInitializer(\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 });\n },\n);\n\ntest.each(testTelemetryOptions)(\n 'Telemetry run test command end to end with CodedError, verifies PII is scrubbed if present in CodedError.',\n async options => {\n await TelemetryTest.startTest(options);\n\n const codedErrorInfo = new errorUtils.CodedError(\n 'MSBuildError', // type\n 'test error', // message\n {\n fieldWithPath:\n 'Test Error occurred at C:\\\\some\\\\file\\\\path\\\\project.build.appxrecipe', // expectation: replace the whole C:\\\\... thing with \"[path]\".\n fieldWithNoPath: 'Test Error data', // expectation: no changes to this string.\n fieldWithNoString: 14, // expectation: no changes to this value.\n arrayField: [\n 'No path',\n 15,\n 'Clean this path: C:\\\\some\\\\file\\\\path2\\\\project.build.appxrecipe',\n [\n 'No path',\n 150,\n 'Also clean this: C:\\\\some\\\\file\\\\path2\\\\project.build.appxrecipe',\n ],\n ],\n someObject: {\n fieldWithPath:\n 'Test Error occurred at C:\\\\some\\\\file\\\\path3\\\\project.build.appxrecipe', // expectation: replace the whole C:\\\\... thing with \"[path]\".\n fieldWithNoPath: 'Test Error data 2', // expectation: no changes to this string.\n fieldWithNoString: 16, // expectation: no changes to this value.\n nestedObject: {\n fieldWithPath:\n 'Test Error occurred at C:\\\\some\\\\file\\\\path4\\\\project.build.appxrecipe', // expectation: replace the whole C:\\\\... thing with \"[path]\".\n fieldWithNoPath: 'Test Error data 3', // expectation: no changes to this string.\n fieldWithNoString: 17, // expectation: no changes to this value.\n },\n },\n }, // data\n );\n\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError', // type\n 'test error', // message\n {\n fieldWithPath: 'Test Error occurred at [path]',\n fieldWithNoPath: 'Test Error data',\n fieldWithNoString: 14,\n arrayField: [\n 'No path',\n 15,\n 'Clean this path: [path]',\n ['No path', 150, 'Also clean this: [path]'],\n ],\n someObject: {\n fieldWithPath: 'Test Error occurred at [path]',\n fieldWithNoPath: 'Test Error data 2',\n fieldWithNoString: 16,\n nestedObject: {\n fieldWithPath: 'Test Error occurred at [path]',\n fieldWithNoPath: 'Test Error data 3',\n fieldWithNoString: 17,\n },\n },\n }, // data\n );\n\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryInitializer(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(codedErrorInfo));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n });\n },\n);\n"]}
|
|
@@ -287,7 +287,7 @@ class Telemetry {
|
|
|
287
287
|
Telemetry.appInsightsCore.flush();
|
|
288
288
|
}
|
|
289
289
|
static trackCommandEvent(extraProps) {
|
|
290
|
-
var _a, _b, _c, _d;
|
|
290
|
+
var _a, _b, _c, _d, _e;
|
|
291
291
|
const telemetryItem = { name: exports.CommandEventName };
|
|
292
292
|
// This is logged in Part C.
|
|
293
293
|
const command = {
|
|
@@ -296,7 +296,7 @@ class Telemetry {
|
|
|
296
296
|
args: (_c = Telemetry.commandInfo.startInfo) === null || _c === void 0 ? void 0 : _c.args,
|
|
297
297
|
durationInSecs: (Telemetry.commandInfo.endTime - Telemetry.commandInfo.startTime) /
|
|
298
298
|
1000,
|
|
299
|
-
resultCode: (_d = Telemetry.commandInfo.endInfo) === null || _d === void 0 ? void 0 : _d.resultCode,
|
|
299
|
+
resultCode: (_e = (_d = Telemetry.commandInfo.endInfo) === null || _d === void 0 ? void 0 : _d.resultCode) !== null && _e !== void 0 ? _e : 'Unknown',
|
|
300
300
|
};
|
|
301
301
|
telemetryItem.data = {
|
|
302
302
|
command: command,
|
|
@@ -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 coreOneDS from '@microsoft/1ds-core-js';\nimport {PostChannel, IChannelConfiguration} from '@microsoft/1ds-post-js';\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';\nimport * as nameUtils from './utils/nameUtils';\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 finalOptions?: Record<string, any>;\n}\n\ninterface CommandInfo {\n startTime?: number;\n endTime?: number;\n startInfo?: CommandStartInfo;\n endInfo?: CommandEndInfo;\n}\n\n// 1DS instrumentation key\nconst RNW_1DS_INSTRUMENTATION_KEY =\n '49ff6d3ef12f4578a7b75a2573d9dba8-026332b2-2d50-452f-ad0d-50f921c97a9d-7145';\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 appInsightsCore?: coreOneDS.AppInsightsCore = undefined;\n\n protected static options: TelemetryOptions = {\n setupString: Telemetry.getDefaultSetupString(), // We default to our 1DS instrumentation key, but callers can easily override it in setup.\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n\n protected static isTestEnvironment: boolean = basePropUtils.isCliTest();\n\n protected static commandInfo: CommandInfo = {};\n\n // Stores the version of a list of packages used by the RNW app project.\n protected static versionsProp: Record<string, string> = {};\n\n protected static projectProp?:\n | projectUtils.AppProjectInfo\n | projectUtils.DependencyProjectInfo = undefined;\n\n // Store \"Common Properties\" in a single object. This will be logged in all telemetry events.\n protected static commonProperties: {[key: string]: string} = {};\n\n protected static getDefaultSetupString(): string {\n // Enable overriding the default setup string via an environment variable\n return process.env[ENV_SETUP_OVERRIDE] ?? RNW_1DS_INSTRUMENTATION_KEY;\n }\n\n protected static reset(): void {\n // Reset client\n if (Telemetry.appInsightsCore) {\n Telemetry.appInsightsCore.flush();\n Telemetry.appInsightsCore = 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.appInsightsCore !== 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.appInsightsCore) {\n // Bail since we've already setup\n return;\n }\n\n // Bail if we're in CI and not capturing CI\n if (\n !Telemetry.isTestEnvironment &&\n basePropUtils.isCI() &&\n !basePropUtils.captureCI()\n ) {\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\n private static basicTelemetryInitializer(\n envelope: coreOneDS.ITelemetryItem,\n ): boolean {\n // Filter out \"legacy\" events from older stable branches\n if (envelope.name && EventNamesWeTrack.includes(envelope.name)) {\n return true;\n }\n\n return false;\n }\n\n /** Sets up Telemetry.appInsightsCore. */\n private static setupClient() {\n const postChannel: PostChannel = new PostChannel();\n\n const coreConfiguration: coreOneDS.IExtendedConfiguration = {\n instrumentationKey: Telemetry.getDefaultSetupString(),\n };\n\n const postChannelConfig: IChannelConfiguration = {\n eventsLimitInMem: 5000,\n };\n\n coreConfiguration.extensionConfig = {};\n coreConfiguration.extensionConfig[postChannel.identifier] =\n postChannelConfig;\n\n // Allow overriding the endpoint URL via an environment variable.\n if (process.env[ENV_PROXY_OVERRIDE] !== undefined) {\n coreConfiguration.endpointUrl = process.env[ENV_PROXY_OVERRIDE];\n }\n\n Telemetry.appInsightsCore = new coreOneDS.AppInsightsCore();\n Telemetry.appInsightsCore.initialize(\n coreConfiguration,\n [postChannel] /* extensions */,\n );\n\n Telemetry.appInsightsCore.addTelemetryInitializer(\n Telemetry.basicTelemetryInitializer,\n );\n }\n\n /** Sets up any base properties that all telemetry events require. */\n private static async setupBaseProperties() {\n // Telemetry.commonProperties.deviceId = await basePropUtils.deviceId();\n Telemetry.commonProperties.fullBuildInfo =\n await basePropUtils.fullBuildInfo();\n Telemetry.commonProperties.deviceArchitecture =\n basePropUtils.deviceArchitecture();\n Telemetry.commonProperties.nodeArchitecture =\n basePropUtils.nodeArchitecture();\n Telemetry.commonProperties.nodePlatform = basePropUtils.nodePlatform();\n Telemetry.commonProperties.deviceClass = basePropUtils.deviceClass();\n Telemetry.commonProperties.deviceLocale =\n await basePropUtils.deviceLocale();\n Telemetry.commonProperties.deviceNumCPUs = basePropUtils\n .deviceNumCPUs()\n .toString();\n Telemetry.commonProperties.deviceTotalMemory = basePropUtils\n .deviceTotalMemory()\n .toString();\n Telemetry.commonProperties.deviceDiskFreeSpace = basePropUtils\n .deviceDiskFreeSpace()\n .toString();\n Telemetry.commonProperties.ciCaptured = basePropUtils\n .captureCI()\n .toString();\n Telemetry.commonProperties.ciType = basePropUtils.ciType();\n Telemetry.commonProperties.isMsftInternal = basePropUtils\n .isMsftInternal()\n .toString();\n Telemetry.commonProperties.isTest = Telemetry.isTestEnvironment.toString();\n Telemetry.commonProperties.sessionId = Telemetry.getSessionId();\n\n await Telemetry.populateToolsVersions();\n if (Telemetry.options.populateNpmPackageVersions) {\n await Telemetry.populateNpmPackageVersions();\n }\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.appInsightsCore) {\n return true;\n }\n\n // Process the package name to comply with the backend requirements\n const packageName = nameUtils.isValidTelemetryPackageName(name)\n ? name\n : nameUtils.cleanTelemetryPackageName(name);\n\n if (forceRefresh === true || !Telemetry.versionsProp[packageName]) {\n const value = await getValue();\n if (value) {\n Telemetry.versionsProp[packageName] = 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.appInsightsCore) {\n return;\n }\n\n Telemetry.projectProp = info;\n }\n\n static startCommand(info: CommandStartInfo) {\n if (!Telemetry.appInsightsCore) {\n return;\n }\n\n // startCommand() was called before invoking endCommand(), bail out.\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.commonProperties.commandName = info.commandName;\n }\n\n static endCommand(info: CommandEndInfo, extraProps?: Record<string, any>) {\n if (!Telemetry.appInsightsCore) {\n return;\n }\n\n // startCommand() wasn't called, bail out.\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 trackEvent(telemetryItem: coreOneDS.ITelemetryItem) {\n // Populate Part A\n telemetryItem.ver = '4.0'; // Current Common Schema version\n telemetryItem.time = new Date().toISOString();\n telemetryItem.iKey = RNW_1DS_INSTRUMENTATION_KEY;\n\n // Populate Part A extensions\n telemetryItem.ext = {};\n telemetryItem.ext.device = {\n //id: Telemetry.commonProperties.deviceId,\n deviceClass: Telemetry.commonProperties.deviceClass,\n };\n telemetryItem.ext.os = {\n locale: Telemetry.commonProperties.deviceLocale,\n ver: Telemetry.commonProperties.fullBuildInfo,\n };\n\n // Populate most of \"common\" properties into Part B.\n telemetryItem.baseData = {\n common: {\n device: {\n architecture: Telemetry.commonProperties.deviceArchitecture,\n numCPUs: Telemetry.commonProperties.numCPUs,\n totalMemory: Telemetry.commonProperties.totalMemory,\n diskFreeSpace: Telemetry.commonProperties.deviceDiskFreeSpace,\n },\n nodePlatform: Telemetry.commonProperties.nodePlatform,\n nodeArchitecture: Telemetry.commonProperties.nodeArchitecture,\n ciCaptured: Telemetry.commonProperties.ciCaptured,\n ciType: Telemetry.commonProperties.ciType,\n isMsftInternal: Telemetry.commonProperties.isMsftInternal,\n isCliTest: Telemetry.commonProperties.isTest,\n sessionId: Telemetry.commonProperties.sessionId,\n commandName: Telemetry.commonProperties.commandName,\n },\n // Set project and versions props, belonging to Part B.\n project: Telemetry.projectProp,\n versions: Telemetry.versionsProp,\n };\n\n // Send and post the telemetry event!\n Telemetry.appInsightsCore!.track(telemetryItem);\n Telemetry.appInsightsCore!.flush();\n }\n\n private static trackCommandEvent(extraProps?: Record<string, any>) {\n const telemetryItem: coreOneDS.ITelemetryItem = {name: CommandEventName};\n\n // This is logged in Part C.\n const 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 telemetryItem.data = {\n command: command,\n };\n\n if (extraProps) {\n telemetryItem.data.additionalData = extraProps;\n }\n\n // Populate common properties and fire event\n Telemetry.trackEvent(telemetryItem);\n }\n\n static trackException(error: Error, extraProps?: Record<string, any>) {\n if (!Telemetry.appInsightsCore) {\n return;\n }\n\n const telemetryItem: coreOneDS.ITelemetryItem = {name: CodedErrorEventName};\n\n // Save off CodedError info in Part C.\n const codedError =\n error instanceof errorUtils.CodedError\n ? (error as errorUtils.CodedError)\n : null;\n\n const codedErrorStruct = {\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 codedErrorStruct.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 codedErrorStruct.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 codedErrorStruct.data[f] = (error as any)[f];\n }\n }\n\n // Scrub any potential PII present in codedError.data array, as long as the data is a string.\n codedErrorStruct.data = Telemetry.sanitizeAny(codedErrorStruct.data);\n\n // Break down TS Error object into Exception Data\n const exceptionData = Telemetry.convertErrorIntoExceptionData(error);\n\n telemetryItem.data = {\n codedError: codedErrorStruct,\n exceptionData: exceptionData,\n };\n\n Telemetry.trackEvent(telemetryItem);\n }\n\n static convertErrorIntoExceptionData(error: Error): Record<string, any> {\n const exceptionData = {\n hasFullStack: false,\n message: error.message,\n parsedStack: {},\n };\n\n exceptionData.message = exceptionData.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 if (Telemetry.options.preserveErrorMessages) {\n exceptionData.message = errorUtils.sanitizeErrorMessage(\n exceptionData.message,\n );\n } else {\n exceptionData.message = '[Removed]';\n }\n\n const lines = error.stack?.split('\\n');\n\n const parsedStack = lines?.slice(1).map(line => {\n const errorStackFrame: errorUtils.ErrorStackFrame = {};\n\n const match = line\n .trim()\n .match(/^\\s*at\\s+(?:(.*?)\\s+\\((.*):(\\d+):(\\d+)\\)|(.*):(\\d+):(\\d+))$/);\n if (match) {\n errorStackFrame.functionName = match[1] || 'N/A'; // Use a default value if no function name\n errorStackFrame.filePath = match[2] || match[5];\n errorStackFrame.lineNumber =\n parseInt(match[3], 10) || parseInt(match[6], 10);\n errorStackFrame.columnNumber =\n parseInt(match[4], 10) || parseInt(match[7], 10);\n }\n\n return errorStackFrame;\n });\n\n if (parsedStack) {\n parsedStack.filter(Boolean);\n\n // Sanitize parsed error stack frames\n for (const frame of parsedStack) {\n errorUtils.sanitizeErrorStackFrame(frame);\n }\n\n exceptionData.hasFullStack = true;\n exceptionData.parsedStack = parsedStack;\n }\n\n return exceptionData;\n }\n\n static sanitizeAny(data: any): any {\n if (Array.isArray(data)) {\n // This is an array, sanitize each element recursively.\n return data.map(item => Telemetry.sanitizeAny(item));\n } else if (typeof data === 'object' && data !== null) {\n // This is an object, sanitize each field recursively.\n const sanitizedObject: Record<string, any> = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n sanitizedObject[key] = Telemetry.sanitizeAny(data[key]);\n }\n }\n return sanitizedObject;\n } else if (typeof data === 'string') {\n // The base case: this is a string, sanitize it.\n return errorUtils.sanitizeErrorMessage(data);\n }\n\n // Not a string, return the data unchanged.\n return data;\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 coreOneDS from '@microsoft/1ds-core-js';\nimport {PostChannel, IChannelConfiguration} from '@microsoft/1ds-post-js';\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';\nimport * as nameUtils from './utils/nameUtils';\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 finalOptions?: Record<string, any>;\n}\n\ninterface CommandInfo {\n startTime?: number;\n endTime?: number;\n startInfo?: CommandStartInfo;\n endInfo?: CommandEndInfo;\n}\n\n// 1DS instrumentation key\nconst RNW_1DS_INSTRUMENTATION_KEY =\n '49ff6d3ef12f4578a7b75a2573d9dba8-026332b2-2d50-452f-ad0d-50f921c97a9d-7145';\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 appInsightsCore?: coreOneDS.AppInsightsCore = undefined;\n\n protected static options: TelemetryOptions = {\n setupString: Telemetry.getDefaultSetupString(), // We default to our 1DS instrumentation key, but callers can easily override it in setup.\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n\n protected static isTestEnvironment: boolean = basePropUtils.isCliTest();\n\n protected static commandInfo: CommandInfo = {};\n\n // Stores the version of a list of packages used by the RNW app project.\n protected static versionsProp: Record<string, string> = {};\n\n protected static projectProp?:\n | projectUtils.AppProjectInfo\n | projectUtils.DependencyProjectInfo = undefined;\n\n // Store \"Common Properties\" in a single object. This will be logged in all telemetry events.\n protected static commonProperties: {[key: string]: string} = {};\n\n protected static getDefaultSetupString(): string {\n // Enable overriding the default setup string via an environment variable\n return process.env[ENV_SETUP_OVERRIDE] ?? RNW_1DS_INSTRUMENTATION_KEY;\n }\n\n protected static reset(): void {\n // Reset client\n if (Telemetry.appInsightsCore) {\n Telemetry.appInsightsCore.flush();\n Telemetry.appInsightsCore = 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.appInsightsCore !== 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.appInsightsCore) {\n // Bail since we've already setup\n return;\n }\n\n // Bail if we're in CI and not capturing CI\n if (\n !Telemetry.isTestEnvironment &&\n basePropUtils.isCI() &&\n !basePropUtils.captureCI()\n ) {\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\n private static basicTelemetryInitializer(\n envelope: coreOneDS.ITelemetryItem,\n ): boolean {\n // Filter out \"legacy\" events from older stable branches\n if (envelope.name && EventNamesWeTrack.includes(envelope.name)) {\n return true;\n }\n\n return false;\n }\n\n /** Sets up Telemetry.appInsightsCore. */\n private static setupClient() {\n const postChannel: PostChannel = new PostChannel();\n\n const coreConfiguration: coreOneDS.IExtendedConfiguration = {\n instrumentationKey: Telemetry.getDefaultSetupString(),\n };\n\n const postChannelConfig: IChannelConfiguration = {\n eventsLimitInMem: 5000,\n };\n\n coreConfiguration.extensionConfig = {};\n coreConfiguration.extensionConfig[postChannel.identifier] =\n postChannelConfig;\n\n // Allow overriding the endpoint URL via an environment variable.\n if (process.env[ENV_PROXY_OVERRIDE] !== undefined) {\n coreConfiguration.endpointUrl = process.env[ENV_PROXY_OVERRIDE];\n }\n\n Telemetry.appInsightsCore = new coreOneDS.AppInsightsCore();\n Telemetry.appInsightsCore.initialize(\n coreConfiguration,\n [postChannel] /* extensions */,\n );\n\n Telemetry.appInsightsCore.addTelemetryInitializer(\n Telemetry.basicTelemetryInitializer,\n );\n }\n\n /** Sets up any base properties that all telemetry events require. */\n private static async setupBaseProperties() {\n // Telemetry.commonProperties.deviceId = await basePropUtils.deviceId();\n Telemetry.commonProperties.fullBuildInfo =\n await basePropUtils.fullBuildInfo();\n Telemetry.commonProperties.deviceArchitecture =\n basePropUtils.deviceArchitecture();\n Telemetry.commonProperties.nodeArchitecture =\n basePropUtils.nodeArchitecture();\n Telemetry.commonProperties.nodePlatform = basePropUtils.nodePlatform();\n Telemetry.commonProperties.deviceClass = basePropUtils.deviceClass();\n Telemetry.commonProperties.deviceLocale =\n await basePropUtils.deviceLocale();\n Telemetry.commonProperties.deviceNumCPUs = basePropUtils\n .deviceNumCPUs()\n .toString();\n Telemetry.commonProperties.deviceTotalMemory = basePropUtils\n .deviceTotalMemory()\n .toString();\n Telemetry.commonProperties.deviceDiskFreeSpace = basePropUtils\n .deviceDiskFreeSpace()\n .toString();\n Telemetry.commonProperties.ciCaptured = basePropUtils\n .captureCI()\n .toString();\n Telemetry.commonProperties.ciType = basePropUtils.ciType();\n Telemetry.commonProperties.isMsftInternal = basePropUtils\n .isMsftInternal()\n .toString();\n Telemetry.commonProperties.isTest = Telemetry.isTestEnvironment.toString();\n Telemetry.commonProperties.sessionId = Telemetry.getSessionId();\n\n await Telemetry.populateToolsVersions();\n if (Telemetry.options.populateNpmPackageVersions) {\n await Telemetry.populateNpmPackageVersions();\n }\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.appInsightsCore) {\n return true;\n }\n\n // Process the package name to comply with the backend requirements\n const packageName = nameUtils.isValidTelemetryPackageName(name)\n ? name\n : nameUtils.cleanTelemetryPackageName(name);\n\n if (forceRefresh === true || !Telemetry.versionsProp[packageName]) {\n const value = await getValue();\n if (value) {\n Telemetry.versionsProp[packageName] = 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.appInsightsCore) {\n return;\n }\n\n Telemetry.projectProp = info;\n }\n\n static startCommand(info: CommandStartInfo) {\n if (!Telemetry.appInsightsCore) {\n return;\n }\n\n // startCommand() was called before invoking endCommand(), bail out.\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.commonProperties.commandName = info.commandName;\n }\n\n static endCommand(info: CommandEndInfo, extraProps?: Record<string, any>) {\n if (!Telemetry.appInsightsCore) {\n return;\n }\n\n // startCommand() wasn't called, bail out.\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 trackEvent(telemetryItem: coreOneDS.ITelemetryItem) {\n // Populate Part A\n telemetryItem.ver = '4.0'; // Current Common Schema version\n telemetryItem.time = new Date().toISOString();\n telemetryItem.iKey = RNW_1DS_INSTRUMENTATION_KEY;\n\n // Populate Part A extensions\n telemetryItem.ext = {};\n telemetryItem.ext.device = {\n //id: Telemetry.commonProperties.deviceId,\n deviceClass: Telemetry.commonProperties.deviceClass,\n };\n telemetryItem.ext.os = {\n locale: Telemetry.commonProperties.deviceLocale,\n ver: Telemetry.commonProperties.fullBuildInfo,\n };\n\n // Populate most of \"common\" properties into Part B.\n telemetryItem.baseData = {\n common: {\n device: {\n architecture: Telemetry.commonProperties.deviceArchitecture,\n numCPUs: Telemetry.commonProperties.numCPUs,\n totalMemory: Telemetry.commonProperties.totalMemory,\n diskFreeSpace: Telemetry.commonProperties.deviceDiskFreeSpace,\n },\n nodePlatform: Telemetry.commonProperties.nodePlatform,\n nodeArchitecture: Telemetry.commonProperties.nodeArchitecture,\n ciCaptured: Telemetry.commonProperties.ciCaptured,\n ciType: Telemetry.commonProperties.ciType,\n isMsftInternal: Telemetry.commonProperties.isMsftInternal,\n isCliTest: Telemetry.commonProperties.isTest,\n sessionId: Telemetry.commonProperties.sessionId,\n commandName: Telemetry.commonProperties.commandName,\n },\n // Set project and versions props, belonging to Part B.\n project: Telemetry.projectProp,\n versions: Telemetry.versionsProp,\n };\n\n // Send and post the telemetry event!\n Telemetry.appInsightsCore!.track(telemetryItem);\n Telemetry.appInsightsCore!.flush();\n }\n\n private static trackCommandEvent(extraProps?: Record<string, any>) {\n const telemetryItem: coreOneDS.ITelemetryItem = {name: CommandEventName};\n\n // This is logged in Part C.\n const 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 ?? 'Unknown',\n };\n\n telemetryItem.data = {\n command: command,\n };\n\n if (extraProps) {\n telemetryItem.data.additionalData = extraProps;\n }\n\n // Populate common properties and fire event\n Telemetry.trackEvent(telemetryItem);\n }\n\n static trackException(error: Error, extraProps?: Record<string, any>) {\n if (!Telemetry.appInsightsCore) {\n return;\n }\n\n const telemetryItem: coreOneDS.ITelemetryItem = {name: CodedErrorEventName};\n\n // Save off CodedError info in Part C.\n const codedError =\n error instanceof errorUtils.CodedError\n ? (error as errorUtils.CodedError)\n : null;\n\n const codedErrorStruct = {\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 codedErrorStruct.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 codedErrorStruct.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 codedErrorStruct.data[f] = (error as any)[f];\n }\n }\n\n // Scrub any potential PII present in codedError.data array, as long as the data is a string.\n codedErrorStruct.data = Telemetry.sanitizeAny(codedErrorStruct.data);\n\n // Break down TS Error object into Exception Data\n const exceptionData = Telemetry.convertErrorIntoExceptionData(error);\n\n telemetryItem.data = {\n codedError: codedErrorStruct,\n exceptionData: exceptionData,\n };\n\n Telemetry.trackEvent(telemetryItem);\n }\n\n static convertErrorIntoExceptionData(error: Error): Record<string, any> {\n const exceptionData = {\n hasFullStack: false,\n message: error.message,\n parsedStack: {},\n };\n\n exceptionData.message = exceptionData.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 if (Telemetry.options.preserveErrorMessages) {\n exceptionData.message = errorUtils.sanitizeErrorMessage(\n exceptionData.message,\n );\n } else {\n exceptionData.message = '[Removed]';\n }\n\n const lines = error.stack?.split('\\n');\n\n const parsedStack = lines?.slice(1).map(line => {\n const errorStackFrame: errorUtils.ErrorStackFrame = {};\n\n const match = line\n .trim()\n .match(/^\\s*at\\s+(?:(.*?)\\s+\\((.*):(\\d+):(\\d+)\\)|(.*):(\\d+):(\\d+))$/);\n if (match) {\n errorStackFrame.functionName = match[1] || 'N/A'; // Use a default value if no function name\n errorStackFrame.filePath = match[2] || match[5];\n errorStackFrame.lineNumber =\n parseInt(match[3], 10) || parseInt(match[6], 10);\n errorStackFrame.columnNumber =\n parseInt(match[4], 10) || parseInt(match[7], 10);\n }\n\n return errorStackFrame;\n });\n\n if (parsedStack) {\n parsedStack.filter(Boolean);\n\n // Sanitize parsed error stack frames\n for (const frame of parsedStack) {\n errorUtils.sanitizeErrorStackFrame(frame);\n }\n\n exceptionData.hasFullStack = true;\n exceptionData.parsedStack = parsedStack;\n }\n\n return exceptionData;\n }\n\n static sanitizeAny(data: any): any {\n if (Array.isArray(data)) {\n // This is an array, sanitize each element recursively.\n return data.map(item => Telemetry.sanitizeAny(item));\n } else if (typeof data === 'object' && data !== null) {\n // This is an object, sanitize each field recursively.\n const sanitizedObject: Record<string, any> = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n sanitizedObject[key] = Telemetry.sanitizeAny(data[key]);\n }\n }\n return sanitizedObject;\n } else if (typeof data === 'string') {\n // The base case: this is a string, sanitize it.\n return errorUtils.sanitizeErrorMessage(data);\n }\n\n // Not a string, return the data unchanged.\n return data;\n }\n}\n"]}
|
|
@@ -115,7 +115,7 @@ function parseBoolean(item) {
|
|
|
115
115
|
* @returns The calculated project info.
|
|
116
116
|
*/
|
|
117
117
|
async function configToProjectInfo(config) {
|
|
118
|
-
var _a, _b
|
|
118
|
+
var _a, _b;
|
|
119
119
|
try {
|
|
120
120
|
const id = getProjectId(require(path_1.default.join(config.root, 'package.json')).name);
|
|
121
121
|
const platforms = getDefinedKeys(config.project);
|
|
@@ -123,10 +123,8 @@ async function configToProjectInfo(config) {
|
|
|
123
123
|
const rnwLang = (_a = config.project.windows.project) === null || _a === void 0 ? void 0 : _a.projectLang;
|
|
124
124
|
const usesTS = await usesTypeScript(config.project.windows.folder);
|
|
125
125
|
const usesRNConfig = await usesReactNativeConfig(config.project.windows.folder);
|
|
126
|
-
const jsEngine =
|
|
127
|
-
|
|
128
|
-
: 'Chakra';
|
|
129
|
-
const rnwSource = parseBoolean((_c = config.project.windows.experimentalFeatures) === null || _c === void 0 ? void 0 : _c.UseExperimentalNuget)
|
|
126
|
+
const jsEngine = 'Hermes';
|
|
127
|
+
const rnwSource = parseBoolean((_b = config.project.windows.experimentalFeatures) === null || _b === void 0 ? void 0 : _b.UseExperimentalNuget)
|
|
130
128
|
? 'NuGet'
|
|
131
129
|
: 'Source';
|
|
132
130
|
const dependencies = [];
|
|
@@ -165,7 +163,7 @@ async function configToProjectInfo(config) {
|
|
|
165
163
|
};
|
|
166
164
|
return dependencyInfo;
|
|
167
165
|
}
|
|
168
|
-
catch (
|
|
166
|
+
catch (_c) { }
|
|
169
167
|
return null;
|
|
170
168
|
}
|
|
171
169
|
exports.configToProjectInfo = configToProjectInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectUtils.js","sourceRoot":"","sources":["../../src/utils/projectUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,mCAAkC;AAClC,kEAA0C;AAC1C,gDAAwB;AAkBxB;;;;GAIG;AACH,SAAgB,YAAY,CAAC,WAAmB;IAC9C,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAJD,oCAIC;AAED;;;;;GAKG;AACH,KAAK,UAAU,UAAU,CACvB,QAAgB,EAChB,WAAmB;IAEnB,IAAI;QACF,MAAM,qBAAqB,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,YAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;KACvB;IAAC,WAAM,GAAE;IACV,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,qBAAqB,CACzC,WAAmB;IAEnB,OAAO,UAAU,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;AAC7D,CAAC;AAJD,sDAIC;AAED;;;;GAIG;AACI,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,OAAO,UAAU,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AACpD,CAAC;AAFD,wCAEC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAwB;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAC5B,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,KAAK,CAClE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAC3B,MAA8C;IAE9C,IAAI,MAAM,EAAE;QACV,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;YACrC,QAAQ,OAAO,CAAC,WAAW,EAAE;gBAC3B,KAAK,KAAK;oBACR,QAAQ,EAAE,CAAC;oBACX,MAAM;gBACR,KAAK,IAAI;oBACP,OAAO,EAAE,CAAC;oBACV,MAAM;aACT;SACF;QACD,IAAI,QAAQ,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE;YAC/B,OAAO,QAAQ,CAAC;SACjB;aAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;aAAM,IAAI,OAAO,GAAG,CAAC,EAAE;YACtB,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,IAAS;IAC7B,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;KACtC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAA2B;;IAE3B,IAAI;QACF,MAAM,EAAE,GAAW,YAAY,CAC7B,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CACrD,CAAC;QACF,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,SAAS,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;YAClE,MAAM,OAAO,GAAG,MAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,0CAAE,WAAW,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAC9C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAC9B,CAAC;YACF,MAAM,QAAQ,GAAG,YAAY,CAC3B,MAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,0CAAE,SAAS,CACvD;gBACC,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,QAAQ,CAAC;YACb,MAAM,SAAS,GAAG,YAAY,CAC5B,MAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,0CAAE,oBAAoB,CAClE;gBACC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,QAAQ,CAAC;YAEb,MAAM,YAAY,GAA4B,EAAE,CAAC;YACjD,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,YAAY,EAAE;gBAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;oBACpD,MAAM,YAAY,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;oBAClD,MAAM,mBAAmB,GAAG,cAAc,CACxC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAC9C,CAAC;oBAEF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClC,MAAM,iBAAiB,GAAG,oBAAoB,CAC5C,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,OAAO,CACtD,CAAC;wBACF,MAAM,cAAc,GAA0B;4BAC5C,EAAE,EAAE,YAAY;4BAChB,SAAS,EAAE,mBAAmB;4BAC9B,OAAO,EAAE,iBAAiB;yBAC3B,CAAC;wBACF,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;qBACnC;iBACF;aACF;YAED,MAAM,OAAO,GAAmB;gBAC9B,EAAE;gBACF,SAAS;gBACT,OAAO;gBACP,MAAM;gBACN,YAAY;gBACZ,QAAQ;gBACR,SAAS;gBACT,YAAY;aACb,CAAC;YAEF,OAAO,OAAO,CAAC;SAChB;QAED,0DAA0D;QAC1D,MAAM,cAAc,GAA0B;YAC5C,EAAE;YACF,SAAS;YACT,OAAO,EAAE,IAAI;SACd,CAAC;QACF,OAAO,cAAc,CAAC;KACvB;IAAC,WAAM,GAAE;IACV,OAAO,IAAI,CAAC;AACd,CAAC;AAvED,kDAuEC;AAED;;;;GAIG;AACH,SAAgB,wBAAwB,CACtC,MAA2B;IAE3B,IAAI;QACF,IAAI,SAAS,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;YAClE,OAAO,cAAI,CAAC,IAAI,CACd,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAChC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAC3C,CAAC;SACH;KACF;IAAC,WAAM,GAAE;IACV,OAAO,IAAI,CAAC;AACd,CAAC;AAbD,4DAaC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {createHash} from 'crypto';\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\n\ninterface ProjectInfo {\n id: string | null;\n platforms: Array<string>;\n rnwLang: 'cpp' | 'cs' | 'cpp+cs' | null;\n}\n\nexport interface DependencyProjectInfo extends ProjectInfo {}\n\nexport interface AppProjectInfo extends ProjectInfo {\n usesTS: boolean;\n usesRNConfig: boolean;\n jsEngine: string;\n rnwSource: string;\n dependencies: Array<DependencyProjectInfo>;\n}\n\n/**\n * Gets a unique, telemetry-safe project ID based on the project name.\n * @param projectName The project name.\n * @returns The telemetry-safe project ID.\n */\nexport function getProjectId(projectName: string): string {\n const hash = createHash('sha256');\n hash.update(projectName);\n return hash.digest('hex');\n}\n\n/**\n * Checks that a given file exits in the path specified.\n * @param fileName The file to check for.\n * @param projectRoot The root path to look in.\n * @returns Whether the file exists.\n */\nasync function fileExists(\n fileName: string,\n projectRoot: string,\n): Promise<boolean> {\n try {\n const reactNativeConfigPath = path.resolve(projectRoot, fileName);\n const stats = await fs.stat(reactNativeConfigPath);\n return stats.isFile();\n } catch {}\n return false;\n}\n\n/**\n * Gets whether the project at the given path has a react-native.config.js file.\n * @param projectRoot The project root path to look in.\n * @returns Whether the project at the given path has a react-native.config.js file.\n */\nexport async function usesReactNativeConfig(\n projectRoot: string,\n): Promise<boolean> {\n return fileExists('./react-native.config.js', projectRoot);\n}\n\n/**\n * Gets whether the project at the given path is using TypeScript.\n * @param projectRoot The project root path to look in.\n * @returns Whether the project at the given path is using TypeScript.\n */\nexport async function usesTypeScript(projectRoot: string): Promise<boolean> {\n return fileExists('./tsconfig.json', projectRoot);\n}\n\n/**\n * Get the list of keys in the object for which the value is defined.\n * @param obj The object to search.\n * @returns The list of keys.\n */\nfunction getDefinedKeys(obj: Record<string, any>): string[] {\n return Object.keys(obj).filter(\n value => obj[value] !== undefined && obj[value] !== null && value,\n );\n}\n\n/**\n * Given a react-native CLI config, determine the language of the RNW dependency if possible.\n * @param config Dependency config passed from react-native CLI.\n * @returns The language of the RNW dependency.\n */\nfunction getDependencyRnwLang(\n config: Record<string, any> | null | undefined,\n): 'cpp' | 'cs' | 'cpp+cs' | null {\n if (config) {\n let cppCount = 0;\n let csCount = 0;\n for (const project of config.projects) {\n switch (project.projectLang) {\n case 'cpp':\n cppCount++;\n break;\n case 'cs':\n csCount++;\n break;\n }\n }\n if (cppCount > 0 && csCount > 0) {\n return 'cpp+cs';\n } else if (cppCount > 0) {\n return 'cpp';\n } else if (csCount > 0) {\n return 'cs';\n }\n }\n return null;\n}\n\n/**\n * Returns true if the item is a boolean with a value of true or a string with a value of 'true'.\n * @param item The item to parse.\n * @returns The boolean value.\n */\nfunction parseBoolean(item: any): boolean {\n if (typeof item === 'boolean') {\n return item;\n } else if (typeof item === 'string') {\n return item.toLowerCase() === 'true';\n }\n return false;\n}\n\n/**\n * Calculate the project telemetry info from a react-native CLI config.\n * @param config Config passed from react-native CLI.\n * @returns The calculated project info.\n */\nexport async function configToProjectInfo(\n config: Record<string, any>,\n): Promise<AppProjectInfo | DependencyProjectInfo | null> {\n try {\n const id: string = getProjectId(\n require(path.join(config.root, 'package.json')).name,\n );\n const platforms = getDefinedKeys(config.project);\n\n if ('windows' in config.project && config.project.windows !== null) {\n const rnwLang = config.project.windows.project?.projectLang;\n const usesTS = await usesTypeScript(config.project.windows.folder);\n const usesRNConfig = await usesReactNativeConfig(\n config.project.windows.folder,\n );\n const jsEngine = parseBoolean(\n config.project.windows.experimentalFeatures?.UseHermes,\n )\n ? 'Hermes'\n : 'Chakra';\n const rnwSource = parseBoolean(\n config.project.windows.experimentalFeatures?.UseExperimentalNuget,\n )\n ? 'NuGet'\n : 'Source';\n\n const dependencies: DependencyProjectInfo[] = [];\n for (const dependencyName in config.dependencies) {\n if (!Object.prototype.hasOwnProperty(dependencyName)) {\n const dependencyId = getProjectId(dependencyName);\n const dependencyPlatforms = getDefinedKeys(\n config.dependencies[dependencyName].platforms,\n );\n\n if (dependencyPlatforms.length > 0) {\n const dependencyRnwLang = getDependencyRnwLang(\n config.dependencies[dependencyName].platforms.windows,\n );\n const dependencyInfo: DependencyProjectInfo = {\n id: dependencyId,\n platforms: dependencyPlatforms,\n rnwLang: dependencyRnwLang,\n };\n dependencies.push(dependencyInfo);\n }\n }\n }\n\n const appInfo: AppProjectInfo = {\n id,\n platforms,\n rnwLang,\n usesTS,\n usesRNConfig,\n jsEngine,\n rnwSource,\n dependencies,\n };\n\n return appInfo;\n }\n\n // Probably just a dependency project, return minimal info\n const dependencyInfo: DependencyProjectInfo = {\n id,\n platforms,\n rnwLang: null,\n };\n return dependencyInfo;\n } catch {}\n return null;\n}\n\n/**\n * Gets the full path to the app's native project file from a react-native CLI config.\n * @param config Config passed from react-native CLI.\n * @returns The full path to the app's native project file\n */\nexport function getProjectFileFromConfig(\n config: Record<string, any>,\n): string | null {\n try {\n if ('windows' in config.project && config.project.windows !== null) {\n return path.join(\n config.project.windows.folder,\n config.project.windows.sourceDir,\n config.project.windows.project.projectFile,\n );\n }\n } catch {}\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"projectUtils.js","sourceRoot":"","sources":["../../src/utils/projectUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {createHash} from 'crypto';\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\n\ninterface ProjectInfo {\n id: string | null;\n platforms: Array<string>;\n rnwLang: 'cpp' | 'cs' | 'cpp+cs' | null;\n}\n\nexport interface DependencyProjectInfo extends ProjectInfo {}\n\nexport interface AppProjectInfo extends ProjectInfo {\n usesTS: boolean;\n usesRNConfig: boolean;\n jsEngine: string;\n rnwSource: string;\n dependencies: Array<DependencyProjectInfo>;\n}\n\n/**\n * Gets a unique, telemetry-safe project ID based on the project name.\n * @param projectName The project name.\n * @returns The telemetry-safe project ID.\n */\nexport function getProjectId(projectName: string): string {\n const hash = createHash('sha256');\n hash.update(projectName);\n return hash.digest('hex');\n}\n\n/**\n * Checks that a given file exits in the path specified.\n * @param fileName The file to check for.\n * @param projectRoot The root path to look in.\n * @returns Whether the file exists.\n */\nasync function fileExists(\n fileName: string,\n projectRoot: string,\n): Promise<boolean> {\n try {\n const reactNativeConfigPath = path.resolve(projectRoot, fileName);\n const stats = await fs.stat(reactNativeConfigPath);\n return stats.isFile();\n } catch {}\n return false;\n}\n\n/**\n * Gets whether the project at the given path has a react-native.config.js file.\n * @param projectRoot The project root path to look in.\n * @returns Whether the project at the given path has a react-native.config.js file.\n */\nexport async function usesReactNativeConfig(\n projectRoot: string,\n): Promise<boolean> {\n return fileExists('./react-native.config.js', projectRoot);\n}\n\n/**\n * Gets whether the project at the given path is using TypeScript.\n * @param projectRoot The project root path to look in.\n * @returns Whether the project at the given path is using TypeScript.\n */\nexport async function usesTypeScript(projectRoot: string): Promise<boolean> {\n return fileExists('./tsconfig.json', projectRoot);\n}\n\n/**\n * Get the list of keys in the object for which the value is defined.\n * @param obj The object to search.\n * @returns The list of keys.\n */\nfunction getDefinedKeys(obj: Record<string, any>): string[] {\n return Object.keys(obj).filter(\n value => obj[value] !== undefined && obj[value] !== null && value,\n );\n}\n\n/**\n * Given a react-native CLI config, determine the language of the RNW dependency if possible.\n * @param config Dependency config passed from react-native CLI.\n * @returns The language of the RNW dependency.\n */\nfunction getDependencyRnwLang(\n config: Record<string, any> | null | undefined,\n): 'cpp' | 'cs' | 'cpp+cs' | null {\n if (config) {\n let cppCount = 0;\n let csCount = 0;\n for (const project of config.projects) {\n switch (project.projectLang) {\n case 'cpp':\n cppCount++;\n break;\n case 'cs':\n csCount++;\n break;\n }\n }\n if (cppCount > 0 && csCount > 0) {\n return 'cpp+cs';\n } else if (cppCount > 0) {\n return 'cpp';\n } else if (csCount > 0) {\n return 'cs';\n }\n }\n return null;\n}\n\n/**\n * Returns true if the item is a boolean with a value of true or a string with a value of 'true'.\n * @param item The item to parse.\n * @returns The boolean value.\n */\nfunction parseBoolean(item: any): boolean {\n if (typeof item === 'boolean') {\n return item;\n } else if (typeof item === 'string') {\n return item.toLowerCase() === 'true';\n }\n return false;\n}\n\n/**\n * Calculate the project telemetry info from a react-native CLI config.\n * @param config Config passed from react-native CLI.\n * @returns The calculated project info.\n */\nexport async function configToProjectInfo(\n config: Record<string, any>,\n): Promise<AppProjectInfo | DependencyProjectInfo | null> {\n try {\n const id: string = getProjectId(\n require(path.join(config.root, 'package.json')).name,\n );\n const platforms = getDefinedKeys(config.project);\n\n if ('windows' in config.project && config.project.windows !== null) {\n const rnwLang = config.project.windows.project?.projectLang;\n const usesTS = await usesTypeScript(config.project.windows.folder);\n const usesRNConfig = await usesReactNativeConfig(\n config.project.windows.folder,\n );\n const jsEngine = 'Hermes';\n const rnwSource = parseBoolean(\n config.project.windows.experimentalFeatures?.UseExperimentalNuget,\n )\n ? 'NuGet'\n : 'Source';\n\n const dependencies: DependencyProjectInfo[] = [];\n for (const dependencyName in config.dependencies) {\n if (!Object.prototype.hasOwnProperty(dependencyName)) {\n const dependencyId = getProjectId(dependencyName);\n const dependencyPlatforms = getDefinedKeys(\n config.dependencies[dependencyName].platforms,\n );\n\n if (dependencyPlatforms.length > 0) {\n const dependencyRnwLang = getDependencyRnwLang(\n config.dependencies[dependencyName].platforms.windows,\n );\n const dependencyInfo: DependencyProjectInfo = {\n id: dependencyId,\n platforms: dependencyPlatforms,\n rnwLang: dependencyRnwLang,\n };\n dependencies.push(dependencyInfo);\n }\n }\n }\n\n const appInfo: AppProjectInfo = {\n id,\n platforms,\n rnwLang,\n usesTS,\n usesRNConfig,\n jsEngine,\n rnwSource,\n dependencies,\n };\n\n return appInfo;\n }\n\n // Probably just a dependency project, return minimal info\n const dependencyInfo: DependencyProjectInfo = {\n id,\n platforms,\n rnwLang: null,\n };\n return dependencyInfo;\n } catch {}\n return null;\n}\n\n/**\n * Gets the full path to the app's native project file from a react-native CLI config.\n * @param config Config passed from react-native CLI.\n * @returns The full path to the app's native project file\n */\nexport function getProjectFileFromConfig(\n config: Record<string, any>,\n): string | null {\n try {\n if ('windows' in config.project && config.project.windows !== null) {\n return path.join(\n config.project.windows.folder,\n config.project.windows.sourceDir,\n config.project.windows.project.projectFile,\n );\n }\n } catch {}\n return null;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-windows/telemetry",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.82.0-preview.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"typings": "lib-commonjs/index.d.ts",
|
|
@@ -20,18 +20,19 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@microsoft/1ds-core-js": "^4.3.0",
|
|
22
22
|
"@microsoft/1ds-post-js": "^4.3.0",
|
|
23
|
-
"@react-native-windows/fs": "0.
|
|
23
|
+
"@react-native-windows/fs": "0.82.0-preview.1",
|
|
24
24
|
"@xmldom/xmldom": "^0.7.7",
|
|
25
25
|
"ci-info": "^3.2.0",
|
|
26
26
|
"envinfo": "^7.8.1",
|
|
27
27
|
"lodash": "^4.17.21",
|
|
28
|
+
"minimatch": "^10.0.3",
|
|
28
29
|
"os-locale": "^5.0.0",
|
|
29
30
|
"xpath": "^0.0.27"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
|
-
"@rnw-scripts/eslint-config": "1.2.
|
|
33
|
+
"@rnw-scripts/eslint-config": "1.2.38",
|
|
33
34
|
"@rnw-scripts/jest-unittest-config": "1.5.12",
|
|
34
|
-
"@rnw-scripts/just-task": "2.3.
|
|
35
|
+
"@rnw-scripts/just-task": "2.3.58",
|
|
35
36
|
"@rnw-scripts/ts-config": "2.0.6",
|
|
36
37
|
"@types/envinfo": "^7.8.1",
|
|
37
38
|
"@types/jest": "^29.2.2",
|
|
@@ -51,11 +52,11 @@
|
|
|
51
52
|
"lib-commonjs"
|
|
52
53
|
],
|
|
53
54
|
"beachball": {
|
|
54
|
-
"defaultNpmTag": "
|
|
55
|
+
"defaultNpmTag": "preview",
|
|
55
56
|
"disallowedChangeTypes": [
|
|
56
57
|
"major",
|
|
57
58
|
"minor",
|
|
58
|
-
"
|
|
59
|
+
"patch",
|
|
59
60
|
"premajor",
|
|
60
61
|
"preminor",
|
|
61
62
|
"prepatch"
|