@react-native-windows/telemetry 0.0.0-canary.28 → 0.0.0-canary.31

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.
@@ -9,6 +9,7 @@ import * as projectUtils from './utils/projectUtils';
9
9
  export interface TelemetryOptions {
10
10
  setupString: string;
11
11
  preserveErrorMessages: boolean;
12
+ populateNpmPackageVersions: boolean;
12
13
  }
13
14
  export interface CommandStartInfo {
14
15
  commandName: string;
@@ -78,6 +78,7 @@ class Telemetry {
78
78
  Telemetry.options = {
79
79
  setupString: Telemetry.getDefaultSetupString(),
80
80
  preserveErrorMessages: false,
81
+ populateNpmPackageVersions: true,
81
82
  };
82
83
  Telemetry.commandInfo = {};
83
84
  Telemetry.versionsProp = {};
@@ -120,8 +121,10 @@ class Telemetry {
120
121
  }
121
122
  /** Sets up any base properties that all telemetry events require. */
122
123
  static async setupBaseProperties() {
123
- Telemetry.client.commonProperties.deviceId = await basePropUtils.deviceId();
124
- Telemetry.client.commonProperties.deviceLocale = await basePropUtils.deviceLocale();
124
+ Telemetry.client.commonProperties.deviceId =
125
+ await basePropUtils.deviceId();
126
+ Telemetry.client.commonProperties.deviceLocale =
127
+ await basePropUtils.deviceLocale();
125
128
  Telemetry.client.commonProperties.deviceNumCPUs = basePropUtils
126
129
  .deviceNumCPUs()
127
130
  .toString();
@@ -144,7 +147,9 @@ class Telemetry {
144
147
  }
145
148
  Telemetry.client.commonProperties.sessionId = Telemetry.getSessionId();
146
149
  await Telemetry.populateToolsVersions();
147
- await Telemetry.populateNpmPackageVersions();
150
+ if (Telemetry.options.populateNpmPackageVersions) {
151
+ await Telemetry.populateNpmPackageVersions();
152
+ }
148
153
  }
149
154
  /** Sets up any telemetry processors. */
150
155
  static setupTelemetryProcessors() {
@@ -326,6 +331,7 @@ Telemetry.client = undefined;
326
331
  Telemetry.options = {
327
332
  setupString: Telemetry.getDefaultSetupString(),
328
333
  preserveErrorMessages: false,
334
+ populateNpmPackageVersions: true,
329
335
  };
330
336
  Telemetry.isTest = basePropUtils.isCliTest();
331
337
  Telemetry.commandInfo = {};
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as basePropUtils from './utils/basePropUtils';\nimport * as versionUtils from './utils/versionUtils';\nimport * as errorUtils from './utils/errorUtils';\nimport * as projectUtils from './utils/projectUtils';\n\nexport interface TelemetryOptions {\n setupString: string;\n preserveErrorMessages: boolean;\n}\n\nexport interface CommandStartInfo {\n commandName: string;\n args: Record<string, any>;\n options: Record<string, any>;\n defaultOptions: Record<string, any>;\n}\n\nexport interface CommandEndInfo {\n resultCode: errorUtils.CodedErrorType;\n}\n\ninterface CommandInfo {\n startTime?: number;\n endTime?: number;\n startInfo?: CommandStartInfo;\n endInfo?: CommandEndInfo;\n}\n\n// This is our key with the AI backend\nconst RNWSetupString = '795006ca-cf54-40ee-8bc6-03deb91401c3';\n\n// Environment variable to override the default setup string\nconst ENV_SETUP_OVERRIDE = 'RNW_TELEMETRY_SETUP';\n\n// Environment variable to override the http proxy (such as http://localhost:8888 for Fiddler debugging)\nconst ENV_PROXY_OVERRIDE = 'RNW_TELEMETRY_PROXY';\n\nexport const CommandEventName = 'RNWCLI.Command';\nexport const CodedErrorEventName = 'RNWCLI.CodedError';\n\n// These are the event names we're tracking\nexport const EventNamesWeTrack: string[] = [\n CommandEventName,\n CodedErrorEventName,\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\n// and getting more details about when reporting errors\nexport const NpmPackagesWeTrack: string[] = [\n '@react-native-community/cli',\n '@react-native-windows/cli',\n '@react-native-windows/telemetry',\n 'react',\n 'react-native',\n 'react-native-windows',\n 'react-native-windows-init',\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\nexport const NuGetPackagesWeTrack: string[] = [\n 'Microsoft.UI.Xaml',\n 'Microsoft.Windows.CppWinRT',\n 'Microsoft.WinUI',\n];\n\n/**\n * The Telemetry class is responsible for reporting telemetry for RNW CLI.\n */\nexport class Telemetry {\n protected static client?: appInsights.TelemetryClient = undefined;\n protected static options: TelemetryOptions = {\n setupString: Telemetry.getDefaultSetupString(), // We default to our AI key, but callers can easily override it in setup\n preserveErrorMessages: false,\n };\n\n protected static isTest: boolean = basePropUtils.isCliTest();\n protected static commandInfo: CommandInfo = {};\n protected static versionsProp: Record<string, string> = {};\n protected static projectProp?:\n | projectUtils.AppProjectInfo\n | projectUtils.DependencyProjectInfo = undefined;\n\n protected static getDefaultSetupString(): string {\n // Enable overriding the default setup string via an environment variable\n return process.env[ENV_SETUP_OVERRIDE] ?? RNWSetupString;\n }\n\n protected static reset(): void {\n // Reset client\n if (Telemetry.client) {\n Telemetry.client.flush();\n Telemetry.client = undefined;\n }\n\n // Reset local members\n Telemetry.options = {\n setupString: Telemetry.getDefaultSetupString(),\n preserveErrorMessages: false,\n };\n Telemetry.commandInfo = {};\n Telemetry.versionsProp = {};\n Telemetry.projectProp = undefined;\n }\n\n static isEnabled(): boolean {\n return Telemetry.client !== undefined;\n }\n\n static getSessionId(): string {\n return basePropUtils.getSessionId();\n }\n\n /** Sets up the Telemetry static to be used elsewhere. */\n static async setup(options?: Partial<TelemetryOptions>) {\n if (Telemetry.client) {\n // Bail since we've already setup\n return;\n }\n\n // Bail if we're in CI and not capturing CI\n if (!this.isTest && basePropUtils.isCI() && !basePropUtils.captureCI()) {\n return;\n }\n\n // Save off options for later\n Object.assign(Telemetry.options, options);\n\n Telemetry.setupClient();\n\n await Telemetry.setupBaseProperties();\n\n Telemetry.setupTelemetryProcessors();\n }\n\n /** Sets up Telemetry.client. */\n private static setupClient() {\n appInsights.Configuration.setInternalLogging(\n Telemetry.isTest,\n Telemetry.isTest,\n );\n\n Telemetry.client = new appInsights.TelemetryClient(\n Telemetry.options.setupString,\n );\n\n // Allow overriding the proxy server via an environment variable\n const proxyServer = process.env[ENV_PROXY_OVERRIDE];\n if (proxyServer) {\n Telemetry.client.config.proxyHttpUrl = proxyServer;\n Telemetry.client.config.proxyHttpsUrl = proxyServer;\n }\n\n Telemetry.client.config.disableAppInsights = Telemetry.isTest;\n Telemetry.client.channel.setUseDiskRetryCaching(!Telemetry.isTest);\n }\n\n /** Sets up any base properties that all telemetry events require. */\n private static async setupBaseProperties() {\n Telemetry.client!.commonProperties.deviceId = await basePropUtils.deviceId();\n Telemetry.client!.commonProperties.deviceLocale = await basePropUtils.deviceLocale();\n Telemetry.client!.commonProperties.deviceNumCPUs = basePropUtils\n .deviceNumCPUs()\n .toString();\n Telemetry.client!.commonProperties.deviceTotalMemory = basePropUtils\n .deviceTotalMemory()\n .toString();\n Telemetry.client!.commonProperties.deviceDiskFreeSpace = basePropUtils\n .deviceDiskFreeSpace()\n .toString();\n Telemetry.client!.commonProperties.ciCaptured = basePropUtils\n .captureCI()\n .toString();\n Telemetry.client!.commonProperties.ciType = basePropUtils.ciType();\n Telemetry.client!.commonProperties.isMsftInternal = basePropUtils\n .isMsftInternal()\n .toString();\n\n Telemetry.client!.config.samplingPercentage = basePropUtils.sampleRate();\n\n if (Telemetry.isTest) {\n Telemetry.client!.commonProperties.isTest = true.toString();\n }\n\n Telemetry.client!.commonProperties.sessionId = Telemetry.getSessionId();\n\n await Telemetry.populateToolsVersions();\n await Telemetry.populateNpmPackageVersions();\n }\n\n /** Sets up any telemetry processors. */\n private static setupTelemetryProcessors() {\n Telemetry.client!.addTelemetryProcessor(Telemetry.basicTelemetryProcessor);\n Telemetry.client!.addTelemetryProcessor(Telemetry.errorTelemetryProcessor);\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for all events.\n * @param envelope The ApplicationInsights event envelope.\n * @param _contextObjects An optional context object.\n * @returns Whether to kee\n */\n private static basicTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n delete envelope.tags['ai.cloud.roleInstance'];\n\n // Filter out \"legacy\" events from older stable branches\n const properties = envelope.data.baseData?.properties;\n if (\n properties?.eventName &&\n EventNamesWeTrack.includes(properties.eventName)\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for error events.\n * @param envelope\n * @param _contextObjects\n * @returns\n */\n private static errorTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n if (envelope.data.baseType === 'ExceptionData') {\n const data = envelope.data.baseData;\n if (data?.exceptions) {\n for (const exception of data.exceptions) {\n for (const frame of exception.parsedStack) {\n errorUtils.sanitizeErrorStackFrame(frame);\n }\n // CodedError has non-PII information in its 'type' member, plus optionally some more info in its 'data'.\n // The message may contain PII information. This can be sanitized, but for now delete it.\n // Note that the type of data.exceptions[0] is always going to be ExceptionDetails. It is not the original thrown exception.\n // https://github.com/microsoft/ApplicationInsights-node.js/issues/707\n if (Telemetry.options.preserveErrorMessages) {\n exception.message = errorUtils.sanitizeErrorMessage(\n exception.message,\n );\n } else {\n delete exception.message;\n }\n }\n }\n }\n return true;\n }\n\n /** Tries to update the version of the named package/tool by calling getValue(). */\n static async tryUpdateVersionsProp(\n name: string,\n getValue: () => Promise<string | null>,\n forceRefresh?: boolean,\n ): Promise<boolean> {\n if (!Telemetry.client) {\n return true;\n }\n\n if (forceRefresh === true || !Telemetry.versionsProp[name]) {\n const value = await getValue();\n if (value) {\n Telemetry.versionsProp[name] = value;\n return true;\n }\n }\n return false;\n }\n\n /** Populates the versions property of tools we care to track. */\n static async populateToolsVersions(refresh?: boolean) {\n await Telemetry.tryUpdateVersionsProp(\n 'node',\n versionUtils.getNodeVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'npm',\n versionUtils.getNpmVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'yarn',\n versionUtils.getYarnVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'VisualStudio',\n versionUtils.getVisualStudioVersion,\n refresh,\n );\n }\n\n /** Populates the versions property of npm packages we care to track. */\n static async populateNpmPackageVersions(refresh?: boolean) {\n for (const npmPackage of NpmPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n npmPackage,\n async () => await versionUtils.getVersionOfNpmPackage(npmPackage),\n refresh,\n );\n }\n }\n\n /** Populates the versions property of nuget packages we care to track. */\n static async populateNuGetPackageVersions(\n projectFile: string,\n refresh?: boolean,\n ) {\n const nugetVersions = await versionUtils.getVersionsOfNuGetPackages(\n projectFile,\n NuGetPackagesWeTrack,\n );\n\n for (const nugetPackage of NuGetPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n nugetPackage,\n async () => nugetVersions[nugetPackage],\n refresh,\n );\n }\n }\n\n static setProjectInfo(\n info: projectUtils.AppProjectInfo | projectUtils.DependencyProjectInfo,\n ) {\n if (!Telemetry.client) {\n return;\n }\n\n Telemetry.projectProp = info;\n }\n\n static startCommand(info: CommandStartInfo) {\n if (!Telemetry.client) {\n return;\n }\n\n if (Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.startTime = Date.now();\n Telemetry.commandInfo.startInfo = info;\n\n // Set common command props\n Telemetry.client!.commonProperties.commandName = info.commandName;\n }\n\n static endCommand(info: CommandEndInfo, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n if (!Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.endTime = Date.now();\n Telemetry.commandInfo.endInfo = info;\n\n Telemetry.trackCommandEvent(extraProps);\n }\n\n private static trackCommandEvent(extraProps?: Record<string, any>) {\n const props: Record<string, any> = {\n eventName: CommandEventName,\n };\n\n // Set command props\n props.command = {\n options: Telemetry.commandInfo.startInfo?.options,\n defaultOptions: Telemetry.commandInfo.startInfo?.defaultOptions,\n args: Telemetry.commandInfo.startInfo?.args,\n durationInSecs:\n (Telemetry.commandInfo.endTime! - Telemetry.commandInfo.startTime!) /\n 1000,\n resultCode: Telemetry.commandInfo.endInfo?.resultCode,\n };\n\n // Set remaining common props\n Object.assign(props, extraProps);\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Fire event\n Telemetry.client!.trackEvent({name: props.eventName, properties: props});\n Telemetry.client!.flush();\n }\n\n static trackException(error: Error, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n const props: Record<string, any> = {\n eventName: CodedErrorEventName,\n };\n\n // Save off CodedError info\n const codedError =\n error instanceof errorUtils.CodedError\n ? (error as errorUtils.CodedError)\n : null;\n props.codedError = {\n type: codedError?.type ?? 'Unknown',\n rawErrorCode: errorUtils.tryGetErrorCode(error.message) ?? '',\n data: codedError?.data ?? {},\n };\n\n if (codedError?.data) {\n Object.assign(props.codedError.data, codedError.data);\n }\n\n // Copy miscellaneous system error fields into the codedError.data object\n const syscallExceptionFieldsToCopy = ['errno', 'syscall', 'code'];\n for (const f of syscallExceptionFieldsToCopy) {\n if ((error as any)[f]) {\n props.codedError.data[f] = (error as any)[f];\n }\n }\n\n // Set remaining common props\n Object.assign(props, extraProps);\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Fire event\n Telemetry.client!.trackException({\n exception: error,\n properties: props,\n });\n Telemetry.client!.flush();\n }\n}\n"]}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as basePropUtils from './utils/basePropUtils';\nimport * as versionUtils from './utils/versionUtils';\nimport * as errorUtils from './utils/errorUtils';\nimport * as projectUtils from './utils/projectUtils';\n\nexport interface TelemetryOptions {\n setupString: string;\n preserveErrorMessages: boolean;\n populateNpmPackageVersions: boolean;\n}\n\nexport interface CommandStartInfo {\n commandName: string;\n args: Record<string, any>;\n options: Record<string, any>;\n defaultOptions: Record<string, any>;\n}\n\nexport interface CommandEndInfo {\n resultCode: errorUtils.CodedErrorType;\n}\n\ninterface CommandInfo {\n startTime?: number;\n endTime?: number;\n startInfo?: CommandStartInfo;\n endInfo?: CommandEndInfo;\n}\n\n// This is our key with the AI backend\nconst RNWSetupString = '795006ca-cf54-40ee-8bc6-03deb91401c3';\n\n// Environment variable to override the default setup string\nconst ENV_SETUP_OVERRIDE = 'RNW_TELEMETRY_SETUP';\n\n// Environment variable to override the http proxy (such as http://localhost:8888 for Fiddler debugging)\nconst ENV_PROXY_OVERRIDE = 'RNW_TELEMETRY_PROXY';\n\nexport const CommandEventName = 'RNWCLI.Command';\nexport const CodedErrorEventName = 'RNWCLI.CodedError';\n\n// These are the event names we're tracking\nexport const EventNamesWeTrack: string[] = [\n CommandEventName,\n CodedErrorEventName,\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\n// and getting more details about when reporting errors\nexport const NpmPackagesWeTrack: string[] = [\n '@react-native-community/cli',\n '@react-native-windows/cli',\n '@react-native-windows/telemetry',\n 'react',\n 'react-native',\n 'react-native-windows',\n 'react-native-windows-init',\n];\n\n// These are NPM packages we care about, in terms of capturing versions used\nexport const NuGetPackagesWeTrack: string[] = [\n 'Microsoft.UI.Xaml',\n 'Microsoft.Windows.CppWinRT',\n 'Microsoft.WinUI',\n];\n\n/**\n * The Telemetry class is responsible for reporting telemetry for RNW CLI.\n */\nexport class Telemetry {\n protected static client?: appInsights.TelemetryClient = undefined;\n protected static options: TelemetryOptions = {\n setupString: Telemetry.getDefaultSetupString(), // We default to our AI key, but callers can easily override it in setup\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n\n protected static isTest: boolean = basePropUtils.isCliTest();\n protected static commandInfo: CommandInfo = {};\n protected static versionsProp: Record<string, string> = {};\n protected static projectProp?:\n | projectUtils.AppProjectInfo\n | projectUtils.DependencyProjectInfo = undefined;\n\n protected static getDefaultSetupString(): string {\n // Enable overriding the default setup string via an environment variable\n return process.env[ENV_SETUP_OVERRIDE] ?? RNWSetupString;\n }\n\n protected static reset(): void {\n // Reset client\n if (Telemetry.client) {\n Telemetry.client.flush();\n Telemetry.client = undefined;\n }\n\n // Reset local members\n Telemetry.options = {\n setupString: Telemetry.getDefaultSetupString(),\n preserveErrorMessages: false,\n populateNpmPackageVersions: true,\n };\n Telemetry.commandInfo = {};\n Telemetry.versionsProp = {};\n Telemetry.projectProp = undefined;\n }\n\n static isEnabled(): boolean {\n return Telemetry.client !== undefined;\n }\n\n static getSessionId(): string {\n return basePropUtils.getSessionId();\n }\n\n /** Sets up the Telemetry static to be used elsewhere. */\n static async setup(options?: Partial<TelemetryOptions>) {\n if (Telemetry.client) {\n // Bail since we've already setup\n return;\n }\n\n // Bail if we're in CI and not capturing CI\n if (!this.isTest && basePropUtils.isCI() && !basePropUtils.captureCI()) {\n return;\n }\n\n // Save off options for later\n Object.assign(Telemetry.options, options);\n\n Telemetry.setupClient();\n\n await Telemetry.setupBaseProperties();\n\n Telemetry.setupTelemetryProcessors();\n }\n\n /** Sets up Telemetry.client. */\n private static setupClient() {\n appInsights.Configuration.setInternalLogging(\n Telemetry.isTest,\n Telemetry.isTest,\n );\n\n Telemetry.client = new appInsights.TelemetryClient(\n Telemetry.options.setupString,\n );\n\n // Allow overriding the proxy server via an environment variable\n const proxyServer = process.env[ENV_PROXY_OVERRIDE];\n if (proxyServer) {\n Telemetry.client.config.proxyHttpUrl = proxyServer;\n Telemetry.client.config.proxyHttpsUrl = proxyServer;\n }\n\n Telemetry.client.config.disableAppInsights = Telemetry.isTest;\n Telemetry.client.channel.setUseDiskRetryCaching(!Telemetry.isTest);\n }\n\n /** Sets up any base properties that all telemetry events require. */\n private static async setupBaseProperties() {\n Telemetry.client!.commonProperties.deviceId =\n await basePropUtils.deviceId();\n Telemetry.client!.commonProperties.deviceLocale =\n await basePropUtils.deviceLocale();\n Telemetry.client!.commonProperties.deviceNumCPUs = basePropUtils\n .deviceNumCPUs()\n .toString();\n Telemetry.client!.commonProperties.deviceTotalMemory = basePropUtils\n .deviceTotalMemory()\n .toString();\n Telemetry.client!.commonProperties.deviceDiskFreeSpace = basePropUtils\n .deviceDiskFreeSpace()\n .toString();\n Telemetry.client!.commonProperties.ciCaptured = basePropUtils\n .captureCI()\n .toString();\n Telemetry.client!.commonProperties.ciType = basePropUtils.ciType();\n Telemetry.client!.commonProperties.isMsftInternal = basePropUtils\n .isMsftInternal()\n .toString();\n\n Telemetry.client!.config.samplingPercentage = basePropUtils.sampleRate();\n\n if (Telemetry.isTest) {\n Telemetry.client!.commonProperties.isTest = true.toString();\n }\n\n Telemetry.client!.commonProperties.sessionId = Telemetry.getSessionId();\n\n await Telemetry.populateToolsVersions();\n if (Telemetry.options.populateNpmPackageVersions) {\n await Telemetry.populateNpmPackageVersions();\n }\n }\n\n /** Sets up any telemetry processors. */\n private static setupTelemetryProcessors() {\n Telemetry.client!.addTelemetryProcessor(Telemetry.basicTelemetryProcessor);\n Telemetry.client!.addTelemetryProcessor(Telemetry.errorTelemetryProcessor);\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for all events.\n * @param envelope The ApplicationInsights event envelope.\n * @param _contextObjects An optional context object.\n * @returns Whether to kee\n */\n private static basicTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n delete envelope.tags['ai.cloud.roleInstance'];\n\n // Filter out \"legacy\" events from older stable branches\n const properties = envelope.data.baseData?.properties;\n if (\n properties?.eventName &&\n EventNamesWeTrack.includes(properties.eventName)\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Performs the processing necessary (mostly PII sanitization) for error events.\n * @param envelope\n * @param _contextObjects\n * @returns\n */\n private static errorTelemetryProcessor(\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n _contextObjects?: {\n [name: string]: any;\n },\n ): boolean {\n if (envelope.data.baseType === 'ExceptionData') {\n const data = envelope.data.baseData;\n if (data?.exceptions) {\n for (const exception of data.exceptions) {\n for (const frame of exception.parsedStack) {\n errorUtils.sanitizeErrorStackFrame(frame);\n }\n // CodedError has non-PII information in its 'type' member, plus optionally some more info in its 'data'.\n // The message may contain PII information. This can be sanitized, but for now delete it.\n // Note that the type of data.exceptions[0] is always going to be ExceptionDetails. It is not the original thrown exception.\n // https://github.com/microsoft/ApplicationInsights-node.js/issues/707\n if (Telemetry.options.preserveErrorMessages) {\n exception.message = errorUtils.sanitizeErrorMessage(\n exception.message,\n );\n } else {\n delete exception.message;\n }\n }\n }\n }\n return true;\n }\n\n /** Tries to update the version of the named package/tool by calling getValue(). */\n static async tryUpdateVersionsProp(\n name: string,\n getValue: () => Promise<string | null>,\n forceRefresh?: boolean,\n ): Promise<boolean> {\n if (!Telemetry.client) {\n return true;\n }\n\n if (forceRefresh === true || !Telemetry.versionsProp[name]) {\n const value = await getValue();\n if (value) {\n Telemetry.versionsProp[name] = value;\n return true;\n }\n }\n return false;\n }\n\n /** Populates the versions property of tools we care to track. */\n static async populateToolsVersions(refresh?: boolean) {\n await Telemetry.tryUpdateVersionsProp(\n 'node',\n versionUtils.getNodeVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'npm',\n versionUtils.getNpmVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'yarn',\n versionUtils.getYarnVersion,\n refresh,\n );\n await Telemetry.tryUpdateVersionsProp(\n 'VisualStudio',\n versionUtils.getVisualStudioVersion,\n refresh,\n );\n }\n\n /** Populates the versions property of npm packages we care to track. */\n static async populateNpmPackageVersions(refresh?: boolean) {\n for (const npmPackage of NpmPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n npmPackage,\n async () => await versionUtils.getVersionOfNpmPackage(npmPackage),\n refresh,\n );\n }\n }\n\n /** Populates the versions property of nuget packages we care to track. */\n static async populateNuGetPackageVersions(\n projectFile: string,\n refresh?: boolean,\n ) {\n const nugetVersions = await versionUtils.getVersionsOfNuGetPackages(\n projectFile,\n NuGetPackagesWeTrack,\n );\n\n for (const nugetPackage of NuGetPackagesWeTrack) {\n await Telemetry.tryUpdateVersionsProp(\n nugetPackage,\n async () => nugetVersions[nugetPackage],\n refresh,\n );\n }\n }\n\n static setProjectInfo(\n info: projectUtils.AppProjectInfo | projectUtils.DependencyProjectInfo,\n ) {\n if (!Telemetry.client) {\n return;\n }\n\n Telemetry.projectProp = info;\n }\n\n static startCommand(info: CommandStartInfo) {\n if (!Telemetry.client) {\n return;\n }\n\n if (Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.startTime = Date.now();\n Telemetry.commandInfo.startInfo = info;\n\n // Set common command props\n Telemetry.client!.commonProperties.commandName = info.commandName;\n }\n\n static endCommand(info: CommandEndInfo, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n if (!Telemetry.commandInfo.startInfo) {\n return;\n }\n\n Telemetry.commandInfo.endTime = Date.now();\n Telemetry.commandInfo.endInfo = info;\n\n Telemetry.trackCommandEvent(extraProps);\n }\n\n private static trackCommandEvent(extraProps?: Record<string, any>) {\n const props: Record<string, any> = {\n eventName: CommandEventName,\n };\n\n // Set command props\n props.command = {\n options: Telemetry.commandInfo.startInfo?.options,\n defaultOptions: Telemetry.commandInfo.startInfo?.defaultOptions,\n args: Telemetry.commandInfo.startInfo?.args,\n durationInSecs:\n (Telemetry.commandInfo.endTime! - Telemetry.commandInfo.startTime!) /\n 1000,\n resultCode: Telemetry.commandInfo.endInfo?.resultCode,\n };\n\n // Set remaining common props\n Object.assign(props, extraProps);\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Fire event\n Telemetry.client!.trackEvent({name: props.eventName, properties: props});\n Telemetry.client!.flush();\n }\n\n static trackException(error: Error, extraProps?: Record<string, any>) {\n if (!Telemetry.client) {\n return;\n }\n\n const props: Record<string, any> = {\n eventName: CodedErrorEventName,\n };\n\n // Save off CodedError info\n const codedError =\n error instanceof errorUtils.CodedError\n ? (error as errorUtils.CodedError)\n : null;\n props.codedError = {\n type: codedError?.type ?? 'Unknown',\n rawErrorCode: errorUtils.tryGetErrorCode(error.message) ?? '',\n data: codedError?.data ?? {},\n };\n\n if (codedError?.data) {\n Object.assign(props.codedError.data, codedError.data);\n }\n\n // Copy miscellaneous system error fields into the codedError.data object\n const syscallExceptionFieldsToCopy = ['errno', 'syscall', 'code'];\n for (const f of syscallExceptionFieldsToCopy) {\n if ((error as any)[f]) {\n props.codedError.data[f] = (error as any)[f];\n }\n }\n\n // Set remaining common props\n Object.assign(props, extraProps);\n props.project = Telemetry.projectProp;\n props.versions = Telemetry.versionsProp;\n\n // Fire event\n Telemetry.client!.trackException({\n exception: error,\n properties: props,\n });\n Telemetry.client!.flush();\n }\n}\n"]}
@@ -83,16 +83,14 @@ test('sanitizeErrorMessage() other path', () => {
83
83
  test("sanitizeErrorMessage() 'other path'", () => {
84
84
  expect(errorUtils.sanitizeErrorMessage(`this is another path: 'A:\\foo\\bar\\baz'`)).toBe(`this is another path: [path]`);
85
85
  });
86
- test('sanitizeErrorMessage() multiple known paths', () => {
86
+ test('sanitizeErrorMessage() tracked packages in the npx cache', () => {
87
87
  expect(errorUtils.sanitizeErrorMessage(`Cannot find module 'react-native/package.json'
88
88
  Require stack:
89
89
  - ${process.env.AppData}\\npm-cache\\_npx\\1384\\node_modules\\react-native-windows-init\\lib-commonjs\\Cli.js
90
90
  - ${process.env.AppData}\\npm-cache\\_npx\\1384\\node_modules\\react-native-windows-init\\bin.js`)).toBe(`Cannot find module react-native/package.json
91
91
  Require stack:
92
- - [AppData]\\???(${'\\npm-cache\\_npx\\1384\\node_modules\\react-native-windows-init\\lib-commonjs\\Cli.js'
93
- .length})
94
- - [AppData]\\???(${'\\npm-cache\\_npx\\1384\\node_modules\\react-native-windows-init\\bin.js'
95
- .length})`);
92
+ - [node_modules]\\react-native-windows-init\\lib-commonjs\\Cli.js
93
+ - [node_modules]\\react-native-windows-init\\bin.js`);
96
94
  });
97
95
  test('sanitizeErrorMessage() forward slashes', () => {
98
96
  expect(errorUtils.sanitizeErrorMessage(`EPERM: operation not permitted, scandir ${process.env.UserProfile.replace(/\\/g, '/')}/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include`)).toBe(`EPERM: operation not permitted, scandir [UserProfile]\\???(${'/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include'
@@ -1 +1 @@
1
- {"version":3,"file":"errorUtils.test.js","sourceRoot":"","sources":["../../src/test/errorUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as errorUtils from '../utils/errorUtils';\n\ntest('tryGetErrorCode() with valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar error FOO2020: the thing')).toBe(\n 'FOO2020',\n );\n});\n\ntest('tryGetErrorCode() without valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar the thing')).toBeUndefined();\n});\n\ntest('tryGetErrorCode() with word error but no code', () => {\n expect(errorUtils.tryGetErrorCode('test error')).toBeUndefined();\n});\n\ntest('sanitizeErrorMessage() no-op on empty string', () => {\n expect(errorUtils.sanitizeErrorMessage('')).toBe('');\n});\n\ntest('sanitizeErrorMessage() no-op on test string', () => {\n expect(errorUtils.sanitizeErrorMessage('some text')).toBe('some text');\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is the cwd: '${process.cwd()}'`),\n ).toBe(`this is the cwd: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}'`,\n ),\n ).toBe(`uppercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}'`,\n ),\n ).toBe(`lowercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}' and something else`,\n ),\n ).toBe(`this is the cwd: [project_dir] and something else`);\n});\n\ntest('sanitizeErrorMessage() project_dir and something else', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()} and something else`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${' and something else'.length})`,\n );\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules'`,\n ),\n ).toBe(`this is the cwd: [project_dir]\\\\???(${'node_modules'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules\\\\foo'`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`uppercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`lowercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `trailing: '${process.cwd()}\\\\node_modules\\\\' and something else`,\n ),\n ).toBe(`trailing: [node_modules]\\\\???(0) and something else`);\n});\n\ntest('sanitizeErrorMessage() node_modules and something else that could be part of the path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules and something else that could be part of the path`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${\n 'node_modules and something else that could be part of the path'.length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() \\\\node_modules\\\\ a file under nm', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules\\\\ a file under nm`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${' a file under nm'.length})`);\n});\n\ntest('sanitizeErrorMessage() other path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is another path: A:\\\\foo\\\\bar\\\\baz`),\n ).toBe(`this is another path: [path]`);\n});\n\ntest(\"sanitizeErrorMessage() 'other path'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is another path: 'A:\\\\foo\\\\bar\\\\baz'`,\n ),\n ).toBe(`this is another path: [path]`);\n});\n\ntest('sanitizeErrorMessage() multiple known paths', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `Cannot find module 'react-native/package.json'\n Require stack:\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\bin.js`,\n ),\n ).toBe(`Cannot find module react-native/package.json\n Require stack:\n - [AppData]\\\\???(${\n '\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js'\n .length\n })\n - [AppData]\\\\???(${\n '\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\bin.js'\n .length\n })`);\n});\n\ntest('sanitizeErrorMessage() forward slashes', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `EPERM: operation not permitted, scandir ${process.env.UserProfile!.replace(\n /\\\\/g,\n '/',\n )}/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include`,\n ),\n ).toBe(\n `EPERM: operation not permitted, scandir [UserProfile]\\\\???(${\n '/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include'\n .length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() file share path', () => {\n expect(errorUtils.sanitizeErrorMessage(`file here: \\\\\\\\server\\\\share`)).toBe(\n 'file here: [path]',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu id', () => {\n expect(errorUtils.sanitizeErrorMessage('5>This is an error')).toBe(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu/thread id', () => {\n expect(errorUtils.sanitizeErrorMessage('5:42>This is an error')).toEqual(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorStackFrame() with empty frame', () => {\n const emptyFrame: appInsights.Contracts.StackFrame = {\n level: 0,\n method: '',\n fileName: '',\n assembly: 'asdf',\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(emptyFrame);\n expect(emptyFrame).toEqual({\n level: 0,\n assembly: '',\n fileName: '[path]',\n method: '',\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with assembly name', () => {\n const frame1: appInsights.Contracts.StackFrame = {\n method: '',\n fileName: `${process.cwd()}\\\\foo.js`,\n assembly: 'asdf',\n level: 0,\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(frame1);\n expect(frame1).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(6)',\n method: '',\n level: 0,\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with method name', () => {\n const frame2: appInsights.Contracts.StackFrame = {\n method: `myMethod (something ${process.cwd()}`,\n fileName: `${process.cwd()}\\\\telemetry\\\\foo.js`,\n assembly: 'asdf',\n level: 1,\n line: 42,\n };\n errorUtils.sanitizeErrorStackFrame(frame2);\n expect(frame2).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(16)',\n method: 'myMethod',\n level: 1,\n line: 42,\n });\n});\n"]}
1
+ {"version":3,"file":"errorUtils.test.js","sourceRoot":"","sources":["../../src/test/errorUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as errorUtils from '../utils/errorUtils';\n\ntest('tryGetErrorCode() with valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar error FOO2020: the thing')).toBe(\n 'FOO2020',\n );\n});\n\ntest('tryGetErrorCode() without valid error code', () => {\n expect(errorUtils.tryGetErrorCode('foo bar the thing')).toBeUndefined();\n});\n\ntest('tryGetErrorCode() with word error but no code', () => {\n expect(errorUtils.tryGetErrorCode('test error')).toBeUndefined();\n});\n\ntest('sanitizeErrorMessage() no-op on empty string', () => {\n expect(errorUtils.sanitizeErrorMessage('')).toBe('');\n});\n\ntest('sanitizeErrorMessage() no-op on test string', () => {\n expect(errorUtils.sanitizeErrorMessage('some text')).toBe('some text');\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is the cwd: '${process.cwd()}'`),\n ).toBe(`this is the cwd: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}'`,\n ),\n ).toBe(`uppercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}'`,\n ),\n ).toBe(`lowercase: [project_dir]`);\n});\n\ntest(\"sanitizeErrorMessage() 'project_dir' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}' and something else`,\n ),\n ).toBe(`this is the cwd: [project_dir] and something else`);\n});\n\ntest('sanitizeErrorMessage() project_dir and something else', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()} and something else`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${' and something else'.length})`,\n );\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules'`,\n ),\n ).toBe(`this is the cwd: [project_dir]\\\\???(${'node_modules'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: '${process.cwd()}\\\\node_modules\\\\foo'`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' uppercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `uppercase: '${process.cwd().toUpperCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`uppercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\foo' lowercase\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `lowercase: '${process.cwd().toLowerCase()}\\\\NODE_MODULES\\\\foo'`,\n ),\n ).toBe(`lowercase: [node_modules]\\\\???(${'foo'.length})`);\n});\n\ntest(\"sanitizeErrorMessage() 'node_modules\\\\' and something else\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `trailing: '${process.cwd()}\\\\node_modules\\\\' and something else`,\n ),\n ).toBe(`trailing: [node_modules]\\\\???(0) and something else`);\n});\n\ntest('sanitizeErrorMessage() node_modules and something else that could be part of the path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules and something else that could be part of the path`,\n ),\n ).toBe(\n `this is the cwd: [project_dir]\\\\???(${\n 'node_modules and something else that could be part of the path'.length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() \\\\node_modules\\\\ a file under nm', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is the cwd: ${process.cwd()}\\\\node_modules\\\\ a file under nm`,\n ),\n ).toBe(`this is the cwd: [node_modules]\\\\???(${' a file under nm'.length})`);\n});\n\ntest('sanitizeErrorMessage() other path', () => {\n expect(\n errorUtils.sanitizeErrorMessage(`this is another path: A:\\\\foo\\\\bar\\\\baz`),\n ).toBe(`this is another path: [path]`);\n});\n\ntest(\"sanitizeErrorMessage() 'other path'\", () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `this is another path: 'A:\\\\foo\\\\bar\\\\baz'`,\n ),\n ).toBe(`this is another path: [path]`);\n});\n\ntest('sanitizeErrorMessage() tracked packages in the npx cache', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `Cannot find module 'react-native/package.json'\n Require stack:\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js\n - ${process.env.AppData}\\\\npm-cache\\\\_npx\\\\1384\\\\node_modules\\\\react-native-windows-init\\\\bin.js`,\n ),\n ).toBe(`Cannot find module react-native/package.json\n Require stack:\n - [node_modules]\\\\react-native-windows-init\\\\lib-commonjs\\\\Cli.js\n - [node_modules]\\\\react-native-windows-init\\\\bin.js`);\n});\n\ntest('sanitizeErrorMessage() forward slashes', () => {\n expect(\n errorUtils.sanitizeErrorMessage(\n `EPERM: operation not permitted, scandir ${process.env.UserProfile!.replace(\n /\\\\/g,\n '/',\n )}/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include`,\n ),\n ).toBe(\n `EPERM: operation not permitted, scandir [UserProfile]\\\\???(${\n '/source/repos/rn2/wintest/windows/packages/boost.1.76.0.0/lib/native/include'\n .length\n })`,\n );\n});\n\ntest('sanitizeErrorMessage() file share path', () => {\n expect(errorUtils.sanitizeErrorMessage(`file here: \\\\\\\\server\\\\share`)).toBe(\n 'file here: [path]',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu id', () => {\n expect(errorUtils.sanitizeErrorMessage('5>This is an error')).toBe(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorMessage() with cpu/thread id', () => {\n expect(errorUtils.sanitizeErrorMessage('5:42>This is an error')).toEqual(\n 'This is an error',\n );\n});\n\ntest('sanitizeErrorStackFrame() with empty frame', () => {\n const emptyFrame: appInsights.Contracts.StackFrame = {\n level: 0,\n method: '',\n fileName: '',\n assembly: 'asdf',\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(emptyFrame);\n expect(emptyFrame).toEqual({\n level: 0,\n assembly: '',\n fileName: '[path]',\n method: '',\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with assembly name', () => {\n const frame1: appInsights.Contracts.StackFrame = {\n method: '',\n fileName: `${process.cwd()}\\\\foo.js`,\n assembly: 'asdf',\n level: 0,\n line: 0,\n };\n errorUtils.sanitizeErrorStackFrame(frame1);\n expect(frame1).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(6)',\n method: '',\n level: 0,\n line: 0,\n });\n});\n\ntest('sanitizeErrorStackFrame() with method name', () => {\n const frame2: appInsights.Contracts.StackFrame = {\n method: `myMethod (something ${process.cwd()}`,\n fileName: `${process.cwd()}\\\\telemetry\\\\foo.js`,\n assembly: 'asdf',\n level: 1,\n line: 42,\n };\n errorUtils.sanitizeErrorStackFrame(frame2);\n expect(frame2).toEqual({\n assembly: '',\n fileName: '[project_dir]\\\\???.js(16)',\n method: 'myMethod',\n level: 1,\n line: 42,\n });\n});\n"]}
@@ -79,6 +79,12 @@ test('getAnonymizedPath() with path under %%LocalAppData%% is anonymized', () =>
79
79
  expect(anonymizedPath).not.toBe(originalPath);
80
80
  expect(anonymizedPath.startsWith('[LocalAppData]\\???')).toBe(true);
81
81
  });
82
+ test('getAnonymizedPath() with a tracked npm package under %%LocalAppData%% is anonymized', () => {
83
+ const originalPath = path_1.default.normalize(path_1.default.join(process.env.LocalAppData, 'node_modules/@react-native-windows/cli/index.js'));
84
+ const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);
85
+ expect(anonymizedPath).not.toBe(originalPath);
86
+ expect(anonymizedPath).toBe('[node_modules]\\@react-native-windows\\cli\\index.js');
87
+ });
82
88
  test('getAnonymizedPath() with arbitrary path not under project dir is anonymized', () => {
83
89
  const originalPath = 'test.sln';
84
90
  const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeUtils.test.js","sourceRoot":"","sources":["../../src/test/sanitizeUtils.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 path from 'path';\n\nimport * as sanitizeUtils from '../utils/sanitizeUtils';\n\nconst projectDir = process.cwd();\n\ntest('getAnonymizedPath() with project dir is anonymized', () => {\n const originalPath = projectDir;\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[project_dir]')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/index.js is anonymized', () => {\n const originalPath = path.join(projectDir, 'index.js');\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[project_dir]\\\\???.js')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/windows/test.sln is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'windows/test.sln'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[windows]\\\\???.sln')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/node_modules for untracked package is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/untracked/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[node_modules]\\\\???.js')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/node_modules for react-secret-pii package is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/react-secret-pii/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[node_modules]\\\\???.js')).toBe(true);\n});\n\ntest('getAnonymizedPath() with path under react-native-windows is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/react-native-windows/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath).toBe('[node_modules]\\\\react-native-windows\\\\index.js');\n});\n\ntest('getAnonymizedPath() with path under @react-native-windows/cli is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/@react-native-windows/cli/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath).toBe(\n '[node_modules]\\\\@react-native-windows\\\\cli\\\\index.js',\n );\n});\n\ntest('getAnonymizedPath() with path under %%LocalAppData%% is anonymized', () => {\n const originalPath = path.normalize(\n path.join(process.env.LocalAppData!, 'test.sln'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[LocalAppData]\\\\???')).toBe(true);\n});\n\ntest('getAnonymizedPath() with arbitrary path not under project dir is anonymized', () => {\n const originalPath = 'test.sln';\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath).toBe('[path]');\n});\n"]}
1
+ {"version":3,"file":"sanitizeUtils.test.js","sourceRoot":"","sources":["../../src/test/sanitizeUtils.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 path from 'path';\n\nimport * as sanitizeUtils from '../utils/sanitizeUtils';\n\nconst projectDir = process.cwd();\n\ntest('getAnonymizedPath() with project dir is anonymized', () => {\n const originalPath = projectDir;\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[project_dir]')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/index.js is anonymized', () => {\n const originalPath = path.join(projectDir, 'index.js');\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[project_dir]\\\\???.js')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/windows/test.sln is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'windows/test.sln'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[windows]\\\\???.sln')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/node_modules for untracked package is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/untracked/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[node_modules]\\\\???.js')).toBe(true);\n});\n\ntest('getAnonymizedPath() with project/node_modules for react-secret-pii package is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/react-secret-pii/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[node_modules]\\\\???.js')).toBe(true);\n});\n\ntest('getAnonymizedPath() with path under react-native-windows is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/react-native-windows/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath).toBe('[node_modules]\\\\react-native-windows\\\\index.js');\n});\n\ntest('getAnonymizedPath() with path under @react-native-windows/cli is anonymized', () => {\n const originalPath = path.normalize(\n path.join(projectDir, 'node_modules/@react-native-windows/cli/index.js'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath).toBe(\n '[node_modules]\\\\@react-native-windows\\\\cli\\\\index.js',\n );\n});\n\ntest('getAnonymizedPath() with path under %%LocalAppData%% is anonymized', () => {\n const originalPath = path.normalize(\n path.join(process.env.LocalAppData!, 'test.sln'),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath.startsWith('[LocalAppData]\\\\???')).toBe(true);\n});\n\ntest('getAnonymizedPath() with a tracked npm package under %%LocalAppData%% is anonymized', () => {\n const originalPath = path.normalize(\n path.join(\n process.env.LocalAppData!,\n 'node_modules/@react-native-windows/cli/index.js',\n ),\n );\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath).toBe(\n '[node_modules]\\\\@react-native-windows\\\\cli\\\\index.js',\n );\n});\n\ntest('getAnonymizedPath() with arbitrary path not under project dir is anonymized', () => {\n const originalPath = 'test.sln';\n const anonymizedPath = sanitizeUtils.getAnonymizedPath(originalPath);\n expect(anonymizedPath).not.toBe(originalPath);\n expect(anonymizedPath).toBe('[path]');\n});\n"]}
@@ -56,7 +56,7 @@ class TelemetryTest extends telemetry_1.Telemetry {
56
56
  static endTest(finalCallback) {
57
57
  var _a;
58
58
  (_a = telemetry_1.Telemetry.client) === null || _a === void 0 ? void 0 : _a.flush({
59
- callback: _ => {
59
+ callback: (_) => {
60
60
  if (TelemetryTest.hasTestTelemetryProviders) {
61
61
  expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);
62
62
  }
@@ -237,7 +237,7 @@ function getExtraProps() {
237
237
  }
238
238
  /** Asynchronously waits the number in ms. */
239
239
  async function promiseDelay(ms) {
240
- return new Promise(resolve => setTimeout(resolve, ms));
240
+ return new Promise((resolve) => setTimeout(resolve, ms));
241
241
  }
242
242
  /** The body of the fake 'test-command' which will throw the provided error. */
243
243
  async function testCommandBody(errorToThrow) {
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../src/test/telemetry.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\nimport CorrelationIdManager from 'applicationinsights/out/Library/CorrelationIdManager';\nimport * as path from 'path';\n\nimport {\n Telemetry,\n CommandStartInfo,\n CommandEndInfo,\n CommandEventName,\n CodedErrorEventName,\n} from '../telemetry';\nimport * as basePropUtils from '../utils/basePropUtils';\nimport * as errorUtils from '../utils/errorUtils';\nimport * as projectUtils from '../utils/projectUtils';\nimport * as versionUtils from '../utils/versionUtils';\n\nexport class TelemetryTest extends Telemetry {\n protected static hasTestTelemetryProviders: boolean;\n protected static testTelemetryProvidersRan: boolean;\n\n /** Run at the beginning of each test. */\n static async startTest() {\n TelemetryTest.hasTestTelemetryProviders = false;\n TelemetryTest.testTelemetryProvidersRan = false;\n\n jest.setTimeout(10000); // These E2E tests can run longer than the default 5000ms\n\n if (TelemetryTest.isEnabled()) {\n Telemetry.reset();\n }\n\n // Ensure that we don't actually fire events when testing\n Telemetry.isTest = true;\n\n await Telemetry.setup({preserveErrorMessages: true});\n\n // Workaround for https://github.com/microsoft/ApplicationInsights-node.js/issues/833\n Telemetry.client!.config.correlationIdRetryIntervalMs = 500;\n CorrelationIdManager.cancelCorrelationIdQuery(\n Telemetry.client!.config,\n () => {},\n );\n }\n\n /** Run at the end of each test where telemetry was fired. */\n static endTest(finalCallback: () => void): void {\n Telemetry.client?.flush({\n callback: _ => {\n if (TelemetryTest.hasTestTelemetryProviders) {\n expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);\n }\n finalCallback();\n },\n });\n }\n\n /** Sets that the telemetry provider has run. */\n static setTestTelemetryProvidersRan() {\n TelemetryTest.testTelemetryProvidersRan = true;\n }\n\n /** Retrieves the value of a common property.*/\n static getCommonProperty(key: string): string | undefined {\n return TelemetryTest.client?.commonProperties[key];\n }\n\n /** Retrieves the version of the specified tool/package. */\n static getVersion(key: string): string | null {\n return key in TelemetryTest.versionsProp\n ? TelemetryTest.versionsProp[key]\n : null;\n }\n\n /** Adds a telemetry processor, usually for verifying the envelope. */\n static addTelemetryProcessor(\n telemetryProcessor: (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n ) => boolean,\n ): void {\n TelemetryTest.client?.addTelemetryProcessor(telemetryProcessor);\n TelemetryTest.hasTestTelemetryProviders = true;\n }\n}\n\nbeforeEach(async () => {\n await TelemetryTest.startTest();\n});\n\ntest('setup() verify session id is valid and a common property', async () => {\n const sessionId = TelemetryTest.getSessionId();\n expect(sessionId).toBeDefined();\n expect(sessionId!).toHaveLength(32);\n expect(sessionId!).toBe(basePropUtils.getSessionId());\n expect(sessionId!).toBe(TelemetryTest.getCommonProperty('sessionId'));\n});\n\ntest('setup() verify static common property values with async sources', async () => {\n const props: Record<string, () => Promise<string | undefined>> = {\n deviceId: basePropUtils.deviceId,\n deviceLocale: basePropUtils.deviceLocale,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = await props[key]();\n expect(value).toBeDefined();\n expect(value).toBe(TelemetryTest.getCommonProperty(key));\n }\n }\n});\n\ntest('setup() verify static common property values with sync sources', () => {\n const props: Record<string, () => string | undefined> = {\n deviceNumCPUs: () => basePropUtils.deviceNumCPUs().toString(),\n deviceTotalMemory: () => basePropUtils.deviceTotalMemory().toString(),\n ciCaptured: () => basePropUtils.captureCI().toString(),\n ciType: () => basePropUtils.ciType(),\n isMsftInternal: () => basePropUtils.isMsftInternal().toString(),\n isTest: () => 'true',\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = props[key]();\n expect(value).toBeDefined();\n expect(value).toBe(TelemetryTest.getCommonProperty(key));\n }\n }\n});\n\ntest('setup() verify other common property values are defined', () => {\n const props: string[] = ['deviceDiskFreeSpace'];\n\n for (const key of props) {\n const value = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n }\n});\n\ntest('setup() verify tool versions are populated', async () => {\n const props: Record<string, () => Promise<string | null>> = {\n node: versionUtils.getNodeVersion,\n npm: versionUtils.getNpmVersion,\n yarn: versionUtils.getYarnVersion,\n VisualStudio: versionUtils.getVisualStudioVersion,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = await props[key]();\n expect(value).toBe(TelemetryTest.getVersion(key));\n }\n }\n});\n\ntest('tryUpdateVersionsProp() returns true for adding a new version', async () => {\n const name = 'test';\n const version = '1.0';\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n expect(TelemetryTest.getVersion(name)).toBe(version);\n});\n\ntest('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async () => {\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => {\n getValueCalled = true;\n return version;\n }),\n ).toBe(false);\n\n expect(getValueCalled).toBe(false);\n});\n\ntest('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async () => {\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(\n name,\n async () => {\n getValueCalled = true;\n return version;\n },\n true,\n ),\n ).toBe(true);\n\n expect(getValueCalled).toBe(true);\n});\n\n/** Returns the CommandStartInfo for our fake 'test-command'. */\nfunction getTestCommandStartInfo(): CommandStartInfo {\n return {\n commandName: 'test-command',\n args: {\n testArg1: 'true',\n testArg2: '10',\n testArg3: 'testValue',\n },\n options: {\n testArg0: 'unsetArg',\n testArg1: true,\n testArg2: 10,\n testArg3: 'testValue',\n },\n defaultOptions: {\n testArg0: 'unsetArg',\n testArg1: false,\n testArg2: 0,\n testArg3: 'defaultValue',\n },\n };\n}\n\n/** Returns the CommandEndInfo for our fake 'test-command'. */\nfunction getTestCommandEndInfo(\n resultCode: errorUtils.CodedErrorType,\n): CommandEndInfo {\n return {\n resultCode,\n };\n}\n\nfunction getTestCommandProjectInfo(): projectUtils.AppProjectInfo {\n return {\n id: projectUtils.getProjectId('test-app-project'),\n platforms: ['windows'],\n rnwLang: 'cpp',\n usesTS: true,\n usesRNConfig: false,\n jsEngine: 'Chakra',\n rnwSource: 'Source',\n dependencies: [\n {\n id: projectUtils.getProjectId('test-module-project'),\n platforms: ['android', 'windows'],\n rnwLang: 'cpp',\n },\n ],\n };\n}\n\nfunction getExtraProps(): Record<string, any> {\n return {\n extraProp1: true,\n extraProp2: 1234,\n extraProp3: 'test',\n extraProp4: ['test'],\n extraProp5: {\n nestedProp1: true,\n nestedProp2: 1234,\n },\n };\n}\n\n/** Asynchronously waits the number in ms. */\nasync function promiseDelay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/** The body of the fake 'test-command' which will throw the provided error. */\nasync function testCommandBody(errorToThrow?: Error): Promise<void> {\n await promiseDelay(100);\n if (errorToThrow) {\n throw errorToThrow;\n }\n}\n\n/** Runs the complete 'test-command' with the right Telemetry setup and cleanup. */\nasync function runTestCommandE2E(commandBody: () => Promise<void>) {\n TelemetryTest.startCommand(getTestCommandStartInfo());\n TelemetryTest.setProjectInfo(getTestCommandProjectInfo());\n let errorCode: errorUtils.CodedErrorType = 'Success';\n let caughtError: Error | undefined;\n try {\n await commandBody();\n } catch (ex) {\n caughtError = ex instanceof Error ? (ex as Error) : new Error(String(ex));\n errorCode =\n caughtError instanceof errorUtils.CodedError\n ? (caughtError as errorUtils.CodedError).type\n : 'Unknown';\n TelemetryTest.trackException(caughtError);\n }\n TelemetryTest.endCommand(getTestCommandEndInfo(errorCode), getExtraProps());\n}\n\n/** Verifys the contents of events fired during the 'test-command'. */\nfunction verifyTestCommandTelemetryProcessor(\n caughtErrors: Error[],\n expectedResultCode?: errorUtils.CodedErrorType,\n expectedError?: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n // Verify roleInstance has been removed\n expect(envelope.tags['ai.cloud.roleInstance']).toBeUndefined();\n\n const properties = envelope.data.baseData?.properties;\n expect(properties).toBeDefined();\n\n // Verify basics\n expect(properties.commandName).toBe('test-command');\n\n // Verify versions info\n const versions = JSON.parse(properties.versions);\n expect(versions).toBeDefined();\n\n // Verify project info\n const project = JSON.parse(properties.project);\n expect(project).toStrictEqual(getTestCommandProjectInfo());\n\n expect(Object.keys(versions).length).toBeGreaterThan(0);\n for (const key of Object.keys(versions)) {\n expect(versions[key]).toBe(TelemetryTest.getVersion(key));\n }\n\n if (envelope.data.baseType === 'ExceptionData') {\n // Verify event name\n expect(properties.eventName).toBe(CodedErrorEventName);\n\n // Verify coded error info\n const codedError = JSON.parse(properties.codedError);\n expect(codedError).toBeDefined();\n\n expect(codedError.type).toBe(\n expectedError instanceof errorUtils.CodedError\n ? expectedError.type\n : 'Unknown',\n );\n expect(codedError.rawErrorCode).toBe(\n errorUtils.tryGetErrorCode(expectedError?.message ?? '') ?? '',\n );\n expect(codedError.data).toStrictEqual(\n (expectedError as errorUtils.CodedError).data ?? {},\n );\n } else {\n // Verify event name\n expect(envelope.data.baseData?.name).toBe(CommandEventName);\n expect(properties.eventName).toBe(CommandEventName);\n\n // Verify command info\n const expectedInfo = getTestCommandStartInfo();\n\n const command = JSON.parse(properties.command);\n expect(command).toBeDefined();\n expect(command.args).toStrictEqual(expectedInfo.args);\n expect(command.options).toStrictEqual(expectedInfo.options);\n expect(command.defaultOptions).toStrictEqual(\n expectedInfo.defaultOptions,\n );\n expect(command.durationInSecs).toBeGreaterThan(0);\n expect(command.resultCode).toBe(expectedResultCode ?? 'Success');\n\n // Verify extra props\n const extraProps = getExtraProps();\n for (const key of Object.keys(extraProps)) {\n switch (typeof extraProps[key]) {\n case 'object':\n expect(JSON.parse(properties[key])).toStrictEqual(\n extraProps[key],\n );\n break;\n default:\n expect(properties[key]).toBe(extraProps[key].toString());\n }\n }\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest('Telemetry run test command end to end, verify event fires', async done => {\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors),\n );\n\n await runTestCommandE2E(testCommandBody);\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError, verify events fire', async done => {\n const expectedError = new errorUtils.CodedError('MSBuildError', 'test error');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError (with error in message), verify events fire', async done => {\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'error FOO2020: test error',\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError (with data), verify events fire', async done => {\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'test error',\n {foo: 42},\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error, verify events fire', async done => {\n const expectedError = new Error('error FOO2020: test error');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors, 'Unknown', expectedError),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error (no message), verify events fire', async done => {\n const expectedError = new Error();\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors, 'Unknown', expectedError),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\nfunction b(s: string) {\n throw new Error('hello ' + s);\n}\n\nfunction a(s: string) {\n b(s);\n}\n\n/** Verifies the contents of an exception's message and stack frames */\nfunction getVerifyStackTelemetryProcessor(\n caughtErrors: Error[],\n expectedError: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n if (envelope.data.baseType === 'ExceptionData') {\n const data = (envelope.data as any).baseData;\n expect(data.exceptions).toBeDefined();\n expect(data.exceptions.length).toBe(1);\n expect(data.exceptions[0].message).toBe(\n errorUtils.sanitizeErrorMessage(expectedError.message),\n );\n\n const stack = data.exceptions[0].parsedStack;\n expect(stack).toBeDefined();\n expect(stack.length).toBeGreaterThan(2);\n\n const filename = path.relative(process.cwd(), __filename);\n expect(stack[0].method).toEqual('b');\n expect(stack[1].method).toEqual('a');\n expect(stack[0].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[1].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest('Telemetry run test command end to end with Error, verify sanitized message and stack', async done => {\n const expectedError = new Error('hello world');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a('world');\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error, verify sanitized message with path and stack', async done => {\n const expectedError = new Error(`hello ${process.cwd()}`);\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a(process.cwd());\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n"]}
1
+ {"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../src/test/telemetry.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\nimport CorrelationIdManager from 'applicationinsights/out/Library/CorrelationIdManager';\nimport * as path from 'path';\n\nimport {\n Telemetry,\n CommandStartInfo,\n CommandEndInfo,\n CommandEventName,\n CodedErrorEventName,\n} from '../telemetry';\nimport * as basePropUtils from '../utils/basePropUtils';\nimport * as errorUtils from '../utils/errorUtils';\nimport * as projectUtils from '../utils/projectUtils';\nimport * as versionUtils from '../utils/versionUtils';\n\nexport class TelemetryTest extends Telemetry {\n protected static hasTestTelemetryProviders: boolean;\n protected static testTelemetryProvidersRan: boolean;\n\n /** Run at the beginning of each test. */\n static async startTest() {\n TelemetryTest.hasTestTelemetryProviders = false;\n TelemetryTest.testTelemetryProvidersRan = false;\n\n jest.setTimeout(10000); // These E2E tests can run longer than the default 5000ms\n\n if (TelemetryTest.isEnabled()) {\n Telemetry.reset();\n }\n\n // Ensure that we don't actually fire events when testing\n Telemetry.isTest = true;\n\n await Telemetry.setup({preserveErrorMessages: true});\n\n // Workaround for https://github.com/microsoft/ApplicationInsights-node.js/issues/833\n Telemetry.client!.config.correlationIdRetryIntervalMs = 500;\n CorrelationIdManager.cancelCorrelationIdQuery(\n Telemetry.client!.config,\n () => {},\n );\n }\n\n /** Run at the end of each test where telemetry was fired. */\n static endTest(finalCallback: () => void): void {\n Telemetry.client?.flush({\n callback: (_) => {\n if (TelemetryTest.hasTestTelemetryProviders) {\n expect(TelemetryTest.testTelemetryProvidersRan).toBe(true);\n }\n finalCallback();\n },\n });\n }\n\n /** Sets that the telemetry provider has run. */\n static setTestTelemetryProvidersRan() {\n TelemetryTest.testTelemetryProvidersRan = true;\n }\n\n /** Retrieves the value of a common property.*/\n static getCommonProperty(key: string): string | undefined {\n return TelemetryTest.client?.commonProperties[key];\n }\n\n /** Retrieves the version of the specified tool/package. */\n static getVersion(key: string): string | null {\n return key in TelemetryTest.versionsProp\n ? TelemetryTest.versionsProp[key]\n : null;\n }\n\n /** Adds a telemetry processor, usually for verifying the envelope. */\n static addTelemetryProcessor(\n telemetryProcessor: (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n ) => boolean,\n ): void {\n TelemetryTest.client?.addTelemetryProcessor(telemetryProcessor);\n TelemetryTest.hasTestTelemetryProviders = true;\n }\n}\n\nbeforeEach(async () => {\n await TelemetryTest.startTest();\n});\n\ntest('setup() verify session id is valid and a common property', async () => {\n const sessionId = TelemetryTest.getSessionId();\n expect(sessionId).toBeDefined();\n expect(sessionId!).toHaveLength(32);\n expect(sessionId!).toBe(basePropUtils.getSessionId());\n expect(sessionId!).toBe(TelemetryTest.getCommonProperty('sessionId'));\n});\n\ntest('setup() verify static common property values with async sources', async () => {\n const props: Record<string, () => Promise<string | undefined>> = {\n deviceId: basePropUtils.deviceId,\n deviceLocale: basePropUtils.deviceLocale,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = await props[key]();\n expect(value).toBeDefined();\n expect(value).toBe(TelemetryTest.getCommonProperty(key));\n }\n }\n});\n\ntest('setup() verify static common property values with sync sources', () => {\n const props: Record<string, () => string | undefined> = {\n deviceNumCPUs: () => basePropUtils.deviceNumCPUs().toString(),\n deviceTotalMemory: () => basePropUtils.deviceTotalMemory().toString(),\n ciCaptured: () => basePropUtils.captureCI().toString(),\n ciType: () => basePropUtils.ciType(),\n isMsftInternal: () => basePropUtils.isMsftInternal().toString(),\n isTest: () => 'true',\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = props[key]();\n expect(value).toBeDefined();\n expect(value).toBe(TelemetryTest.getCommonProperty(key));\n }\n }\n});\n\ntest('setup() verify other common property values are defined', () => {\n const props: string[] = ['deviceDiskFreeSpace'];\n\n for (const key of props) {\n const value = TelemetryTest.getCommonProperty(key);\n expect(value).toBeDefined();\n }\n});\n\ntest('setup() verify tool versions are populated', async () => {\n const props: Record<string, () => Promise<string | null>> = {\n node: versionUtils.getNodeVersion,\n npm: versionUtils.getNpmVersion,\n yarn: versionUtils.getYarnVersion,\n VisualStudio: versionUtils.getVisualStudioVersion,\n };\n\n for (const key in props) {\n if (!(key in Object.prototype)) {\n const value = await props[key]();\n expect(value).toBe(TelemetryTest.getVersion(key));\n }\n }\n});\n\ntest('tryUpdateVersionsProp() returns true for adding a new version', async () => {\n const name = 'test';\n const version = '1.0';\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n expect(TelemetryTest.getVersion(name)).toBe(version);\n});\n\ntest('tryUpdateVersionsProp() returns false for adding an existing version with refresh is false', async () => {\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => {\n getValueCalled = true;\n return version;\n }),\n ).toBe(false);\n\n expect(getValueCalled).toBe(false);\n});\n\ntest('tryUpdateVersionsProp() returns true for adding an existing version with refresh is true', async () => {\n const name = 'test';\n const version = '1.0';\n\n expect(\n await TelemetryTest.tryUpdateVersionsProp(name, async () => version),\n ).toBe(true);\n\n let getValueCalled = false;\n expect(\n await TelemetryTest.tryUpdateVersionsProp(\n name,\n async () => {\n getValueCalled = true;\n return version;\n },\n true,\n ),\n ).toBe(true);\n\n expect(getValueCalled).toBe(true);\n});\n\n/** Returns the CommandStartInfo for our fake 'test-command'. */\nfunction getTestCommandStartInfo(): CommandStartInfo {\n return {\n commandName: 'test-command',\n args: {\n testArg1: 'true',\n testArg2: '10',\n testArg3: 'testValue',\n },\n options: {\n testArg0: 'unsetArg',\n testArg1: true,\n testArg2: 10,\n testArg3: 'testValue',\n },\n defaultOptions: {\n testArg0: 'unsetArg',\n testArg1: false,\n testArg2: 0,\n testArg3: 'defaultValue',\n },\n };\n}\n\n/** Returns the CommandEndInfo for our fake 'test-command'. */\nfunction getTestCommandEndInfo(\n resultCode: errorUtils.CodedErrorType,\n): CommandEndInfo {\n return {\n resultCode,\n };\n}\n\nfunction getTestCommandProjectInfo(): projectUtils.AppProjectInfo {\n return {\n id: projectUtils.getProjectId('test-app-project'),\n platforms: ['windows'],\n rnwLang: 'cpp',\n usesTS: true,\n usesRNConfig: false,\n jsEngine: 'Chakra',\n rnwSource: 'Source',\n dependencies: [\n {\n id: projectUtils.getProjectId('test-module-project'),\n platforms: ['android', 'windows'],\n rnwLang: 'cpp',\n },\n ],\n };\n}\n\nfunction getExtraProps(): Record<string, any> {\n return {\n extraProp1: true,\n extraProp2: 1234,\n extraProp3: 'test',\n extraProp4: ['test'],\n extraProp5: {\n nestedProp1: true,\n nestedProp2: 1234,\n },\n };\n}\n\n/** Asynchronously waits the number in ms. */\nasync function promiseDelay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** The body of the fake 'test-command' which will throw the provided error. */\nasync function testCommandBody(errorToThrow?: Error): Promise<void> {\n await promiseDelay(100);\n if (errorToThrow) {\n throw errorToThrow;\n }\n}\n\n/** Runs the complete 'test-command' with the right Telemetry setup and cleanup. */\nasync function runTestCommandE2E(commandBody: () => Promise<void>) {\n TelemetryTest.startCommand(getTestCommandStartInfo());\n TelemetryTest.setProjectInfo(getTestCommandProjectInfo());\n let errorCode: errorUtils.CodedErrorType = 'Success';\n let caughtError: Error | undefined;\n try {\n await commandBody();\n } catch (ex) {\n caughtError = ex instanceof Error ? (ex as Error) : new Error(String(ex));\n errorCode =\n caughtError instanceof errorUtils.CodedError\n ? (caughtError as errorUtils.CodedError).type\n : 'Unknown';\n TelemetryTest.trackException(caughtError);\n }\n TelemetryTest.endCommand(getTestCommandEndInfo(errorCode), getExtraProps());\n}\n\n/** Verifys the contents of events fired during the 'test-command'. */\nfunction verifyTestCommandTelemetryProcessor(\n caughtErrors: Error[],\n expectedResultCode?: errorUtils.CodedErrorType,\n expectedError?: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n // Verify roleInstance has been removed\n expect(envelope.tags['ai.cloud.roleInstance']).toBeUndefined();\n\n const properties = envelope.data.baseData?.properties;\n expect(properties).toBeDefined();\n\n // Verify basics\n expect(properties.commandName).toBe('test-command');\n\n // Verify versions info\n const versions = JSON.parse(properties.versions);\n expect(versions).toBeDefined();\n\n // Verify project info\n const project = JSON.parse(properties.project);\n expect(project).toStrictEqual(getTestCommandProjectInfo());\n\n expect(Object.keys(versions).length).toBeGreaterThan(0);\n for (const key of Object.keys(versions)) {\n expect(versions[key]).toBe(TelemetryTest.getVersion(key));\n }\n\n if (envelope.data.baseType === 'ExceptionData') {\n // Verify event name\n expect(properties.eventName).toBe(CodedErrorEventName);\n\n // Verify coded error info\n const codedError = JSON.parse(properties.codedError);\n expect(codedError).toBeDefined();\n\n expect(codedError.type).toBe(\n expectedError instanceof errorUtils.CodedError\n ? expectedError.type\n : 'Unknown',\n );\n expect(codedError.rawErrorCode).toBe(\n errorUtils.tryGetErrorCode(expectedError?.message ?? '') ?? '',\n );\n expect(codedError.data).toStrictEqual(\n (expectedError as errorUtils.CodedError).data ?? {},\n );\n } else {\n // Verify event name\n expect(envelope.data.baseData?.name).toBe(CommandEventName);\n expect(properties.eventName).toBe(CommandEventName);\n\n // Verify command info\n const expectedInfo = getTestCommandStartInfo();\n\n const command = JSON.parse(properties.command);\n expect(command).toBeDefined();\n expect(command.args).toStrictEqual(expectedInfo.args);\n expect(command.options).toStrictEqual(expectedInfo.options);\n expect(command.defaultOptions).toStrictEqual(\n expectedInfo.defaultOptions,\n );\n expect(command.durationInSecs).toBeGreaterThan(0);\n expect(command.resultCode).toBe(expectedResultCode ?? 'Success');\n\n // Verify extra props\n const extraProps = getExtraProps();\n for (const key of Object.keys(extraProps)) {\n switch (typeof extraProps[key]) {\n case 'object':\n expect(JSON.parse(properties[key])).toStrictEqual(\n extraProps[key],\n );\n break;\n default:\n expect(properties[key]).toBe(extraProps[key].toString());\n }\n }\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest('Telemetry run test command end to end, verify event fires', async (done) => {\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors),\n );\n\n await runTestCommandE2E(testCommandBody);\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError, verify events fire', async (done) => {\n const expectedError = new errorUtils.CodedError('MSBuildError', 'test error');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError (with error in message), verify events fire', async (done) => {\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'error FOO2020: test error',\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with CodedError (with data), verify events fire', async (done) => {\n const expectedError = new errorUtils.CodedError(\n 'MSBuildError',\n 'test error',\n {foo: 42},\n );\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(\n caughtErrors,\n expectedError.type,\n expectedError,\n ),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error, verify events fire', async (done) => {\n const expectedError = new Error('error FOO2020: test error');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors, 'Unknown', expectedError),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error (no message), verify events fire', async (done) => {\n const expectedError = new Error();\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n verifyTestCommandTelemetryProcessor(caughtErrors, 'Unknown', expectedError),\n );\n\n await runTestCommandE2E(() => testCommandBody(expectedError));\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\nfunction b(s: string) {\n throw new Error('hello ' + s);\n}\n\nfunction a(s: string) {\n b(s);\n}\n\n/** Verifies the contents of an exception's message and stack frames */\nfunction getVerifyStackTelemetryProcessor(\n caughtErrors: Error[],\n expectedError: Error,\n): (\n envelope: appInsights.Contracts.EnvelopeTelemetry,\n contextObjects?: {\n [name: string]: any;\n },\n) => boolean {\n return (envelope, _) => {\n try {\n // Processor has run, so the test can (potentially) pass\n TelemetryTest.setTestTelemetryProvidersRan();\n\n if (envelope.data.baseType === 'ExceptionData') {\n const data = (envelope.data as any).baseData;\n expect(data.exceptions).toBeDefined();\n expect(data.exceptions.length).toBe(1);\n expect(data.exceptions[0].message).toBe(\n errorUtils.sanitizeErrorMessage(expectedError.message),\n );\n\n const stack = data.exceptions[0].parsedStack;\n expect(stack).toBeDefined();\n expect(stack.length).toBeGreaterThan(2);\n\n const filename = path.relative(process.cwd(), __filename);\n expect(stack[0].method).toEqual('b');\n expect(stack[1].method).toEqual('a');\n expect(stack[0].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n expect(stack[1].fileName).toEqual(\n `[project_dir]\\\\???.ts(${filename.length})`,\n );\n }\n } catch (ex) {\n caughtErrors.push(\n ex instanceof Error ? (ex as Error) : new Error(String(ex)),\n );\n }\n\n return true;\n };\n}\n\ntest('Telemetry run test command end to end with Error, verify sanitized message and stack', async (done) => {\n const expectedError = new Error('hello world');\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a('world');\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n\ntest('Telemetry run test command end to end with Error, verify sanitized message with path and stack', async (done) => {\n const expectedError = new Error(`hello ${process.cwd()}`);\n\n // AI eats errors thrown in telemetry processors\n const caughtErrors: Error[] = [];\n TelemetryTest.addTelemetryProcessor(\n getVerifyStackTelemetryProcessor(caughtErrors, expectedError),\n );\n\n await runTestCommandE2E(async () => {\n await promiseDelay(100);\n a(process.cwd());\n });\n\n TelemetryTest.endTest(() => {\n // Check if any errors were thrown\n expect(caughtErrors).toHaveLength(0);\n done();\n });\n});\n"]}
@@ -38,7 +38,7 @@ function expectValidVersion(version, expectSemVer) {
38
38
  expect(semver_1.default.valid(version)).toBe(version);
39
39
  }
40
40
  else {
41
- version.split('.').forEach(s => {
41
+ version.split('.').forEach((s) => {
42
42
  const tryParseInt = () => {
43
43
  parseInt(s, 10);
44
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"versionUtils.test.js","sourceRoot":"","sources":["../../src/test/versionUtils.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 versionUtils from '../utils/versionUtils';\n\nimport path from 'path';\nimport semver from 'semver';\n\nfunction expectValidVersion(version: string | null, expectSemVer: boolean) {\n expect(version).not.toBeNull();\n expect(version).toBeDefined();\n if (expectSemVer) {\n expect(semver.valid(version)).toBe(version);\n } else {\n version!.split('.').forEach(s => {\n const tryParseInt = () => {\n parseInt(s, 10);\n };\n expect(tryParseInt).not.toThrow();\n });\n }\n}\n\ntest('getNodeVersion() is valid', async () => {\n const version = await versionUtils.getNodeVersion();\n expectValidVersion(version, true);\n});\n\ntest('getNpmVersion() is valid', async () => {\n const version = await versionUtils.getNpmVersion();\n if (version) {\n expectValidVersion(version, true);\n }\n});\n\ntest('getYarnVersion() is valid', async () => {\n const version = await versionUtils.getYarnVersion();\n if (version) {\n expectValidVersion(version, true);\n }\n});\n\ntest('getVisualStudioVersion() is valid', async () => {\n const version = await versionUtils.getVisualStudioVersion();\n expectValidVersion(version, false);\n});\n\ntest('getVersionOfNpmPackage() of empty string is null', async () => {\n const version = await versionUtils.getVersionOfNpmPackage('');\n expect(version).toBeNull();\n});\n\ntest('getVersionOfNpmPackage() of invalid package is null', async () => {\n const version = await versionUtils.getVersionOfNpmPackage('invalidpackage');\n expect(version).toBeNull();\n});\n\ntest('getVersionOfNpmPackage() of valid package is valid', async () => {\n const version = await versionUtils.getVersionOfNpmPackage('jest');\n expectValidVersion(version, true);\n});\n\ntest('getVersionsOfNuGetPackages() of valid package in packages.config is valid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackagesConfig/UsesPackagesConfig.vcxproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Microsoft.Windows.CppWinRT',\n ]);\n expect(versions).not.toBeNull();\n expectValidVersion(versions['Microsoft.Windows.CppWinRT'], false);\n});\n\ntest('getVersionsOfNuGetPackages() of invalid package in packages.config is invalid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackagesConfig/UsesPackagesConfig.vcxproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Invalid.Package',\n ]);\n expect(versions).toStrictEqual({});\n});\n\ntest('getVersionsOfNuGetPackages() of valid package in project is valid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackageReference/UsesPackageReference.csproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Microsoft.NETCore.UniversalWindowsPlatform',\n ]);\n expect(versions).not.toBeNull();\n expectValidVersion(\n versions['Microsoft.NETCore.UniversalWindowsPlatform'],\n false,\n );\n});\n\ntest('getVersionsOfNuGetPackages() of invalid package in project is invalid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackageReference/UsesPackageReference.csproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Invalid.Package',\n ]);\n expect(versions).toStrictEqual({});\n});\n"]}
1
+ {"version":3,"file":"versionUtils.test.js","sourceRoot":"","sources":["../../src/test/versionUtils.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 versionUtils from '../utils/versionUtils';\n\nimport path from 'path';\nimport semver from 'semver';\n\nfunction expectValidVersion(version: string | null, expectSemVer: boolean) {\n expect(version).not.toBeNull();\n expect(version).toBeDefined();\n if (expectSemVer) {\n expect(semver.valid(version)).toBe(version);\n } else {\n version!.split('.').forEach((s) => {\n const tryParseInt = () => {\n parseInt(s, 10);\n };\n expect(tryParseInt).not.toThrow();\n });\n }\n}\n\ntest('getNodeVersion() is valid', async () => {\n const version = await versionUtils.getNodeVersion();\n expectValidVersion(version, true);\n});\n\ntest('getNpmVersion() is valid', async () => {\n const version = await versionUtils.getNpmVersion();\n if (version) {\n expectValidVersion(version, true);\n }\n});\n\ntest('getYarnVersion() is valid', async () => {\n const version = await versionUtils.getYarnVersion();\n if (version) {\n expectValidVersion(version, true);\n }\n});\n\ntest('getVisualStudioVersion() is valid', async () => {\n const version = await versionUtils.getVisualStudioVersion();\n expectValidVersion(version, false);\n});\n\ntest('getVersionOfNpmPackage() of empty string is null', async () => {\n const version = await versionUtils.getVersionOfNpmPackage('');\n expect(version).toBeNull();\n});\n\ntest('getVersionOfNpmPackage() of invalid package is null', async () => {\n const version = await versionUtils.getVersionOfNpmPackage('invalidpackage');\n expect(version).toBeNull();\n});\n\ntest('getVersionOfNpmPackage() of valid package is valid', async () => {\n const version = await versionUtils.getVersionOfNpmPackage('jest');\n expectValidVersion(version, true);\n});\n\ntest('getVersionsOfNuGetPackages() of valid package in packages.config is valid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackagesConfig/UsesPackagesConfig.vcxproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Microsoft.Windows.CppWinRT',\n ]);\n expect(versions).not.toBeNull();\n expectValidVersion(versions['Microsoft.Windows.CppWinRT'], false);\n});\n\ntest('getVersionsOfNuGetPackages() of invalid package in packages.config is invalid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackagesConfig/UsesPackagesConfig.vcxproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Invalid.Package',\n ]);\n expect(versions).toStrictEqual({});\n});\n\ntest('getVersionsOfNuGetPackages() of valid package in project is valid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackageReference/UsesPackageReference.csproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Microsoft.NETCore.UniversalWindowsPlatform',\n ]);\n expect(versions).not.toBeNull();\n expectValidVersion(\n versions['Microsoft.NETCore.UniversalWindowsPlatform'],\n false,\n );\n});\n\ntest('getVersionsOfNuGetPackages() of invalid package in project is invalid', async () => {\n const projectFile = path.resolve(\n __dirname,\n 'projects/UsesPackageReference/UsesPackageReference.csproj',\n );\n const versions = await versionUtils.getVersionsOfNuGetPackages(projectFile, [\n 'Invalid.Package',\n ]);\n expect(versions).toStrictEqual({});\n});\n"]}
@@ -125,9 +125,7 @@ let sessionId;
125
125
  * @returns A stable session ID for correlating telemetry events.
126
126
  */
127
127
  function getSessionId() {
128
- return (sessionId !== null && sessionId !== void 0 ? sessionId : (sessionId = (0, crypto_1.randomBytes)(16)
129
- .toString('hex')
130
- .padStart(32, '0')));
128
+ return (sessionId !== null && sessionId !== void 0 ? sessionId : (sessionId = (0, crypto_1.randomBytes)(16).toString('hex').padStart(32, '0')));
131
129
  }
132
130
  exports.getSessionId = getSessionId;
133
131
  //# sourceMappingURL=basePropUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"basePropUtils.js","sourceRoot":"","sources":["../../src/utils/basePropUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,iDAAuC;AACvC,2BAAkC;AAElC,sDAAyB;AACzB,mCAAmC;AACnC,qDAA0C;AAC1C,0DAAiC;AAEjC;;;GAGG;AACI,KAAK,UAAU,QAAQ;IAC5B,OAAO,MAAM,IAAA,2BAAS,EAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAFD,4BAEC;AAED;;;GAGG;AACI,KAAK,UAAU,YAAY;IAChC,OAAO,MAAM,IAAA,mBAAQ,GAAE,CAAC;AAC1B,CAAC;AAFD,oCAEC;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAA,SAAI,GAAE,CAAC,MAAM,CAAC;AACvB,CAAC;AAFD,sCAEC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAA,aAAQ,GAAE,CAAC;AACpB,CAAC;AAFD,8CAEC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,SAAyB;IAC3D,IAAI;QACF,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,WAAW,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;aAC1D,QAAQ,EAAE;aACV,KAAK,CAAC,MAAM,CAAC,CAAC;QACjB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAChD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IAAC,WAAM,GAAE;IACV,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAZD,kDAYC;AAED;;;GAGG;AACH,SAAgB,UAAU;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAFD,gCAEC;AAED;;;GAGG;AACH,SAAgB,SAAS;IACvB,6CAA6C;IAC7C,OAAO,SAAS,EAAE,CAAC;AACrB,CAAC;AAHD,8BAGC;AAED;;;GAGG;AACH,SAAgB,IAAI;IAClB,OAAO,iBAAE,CAAC,IAAI,CAAC;AACjB,CAAC;AAFD,oBAEC;AAED;;;GAGG;AACH,SAAgB,MAAM;;IACpB,OAAO,iBAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAA,iBAAE,CAAC,IAAI,mCAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAFD,wBAEC;AAED;;;GAGG;AACH,SAAgB,cAAc;IAC5B,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS;QACvC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CACvE,CAAC;AACJ,CAAC;AALD,wCAKC;AAED;;;GAGG;AACH,SAAgB,SAAS;IACvB,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS;QACtC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,CACzD,CAAC;AACJ,CAAC;AALD,8BAKC;AAED,IAAI,SAA6B,CAAC;AAElC;;;GAGG;AACH,SAAgB,YAAY;IAC1B,OAAO,CACL,SAAS,aAAT,SAAS,cAAT,SAAS,GACT,CAAC,SAAS,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC;SACzB,QAAQ,CAAC,KAAK,CAAC;SACf,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CACtB,CAAC;AACJ,CAAC;AAPD,oCAOC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {execSync} from 'child_process';\nimport {totalmem, cpus} from 'os';\n\nimport ci from 'ci-info';\nimport {randomBytes} from 'crypto';\nimport {machineId} from 'node-machine-id';\nimport osLocale from 'os-locale';\n\n/**\n * Gets a telemetry-safe stable device ID.\n * @returns A telemetry-safe stable device ID.\n */\nexport async function deviceId(): Promise<string> {\n return await machineId(false);\n}\n\n/**\n * Gets the device locale.\n * @returns The device locale.\n */\nexport async function deviceLocale(): Promise<string> {\n return await osLocale();\n}\n\n/**\n * Gets the device's number of CPUs.\n * @returns The device's number of CPUs.\n */\nexport function deviceNumCPUs(): number {\n return cpus().length;\n}\n\n/**\n * Gets the device's total memory in bytes.\n * @returns The device's total memory in bytes.\n */\nexport function deviceTotalMemory(): number {\n return totalmem();\n}\n\n/**\n * Gets the free space of the give drive in bytes.\n * @param drivePath A path on the drive to check.\n * @returns The free space of the give drive in bytes.\n */\nexport function deviceDiskFreeSpace(drivePath?: string | null): number {\n try {\n const out = execSync(`dir /-C ${drivePath ?? process.cwd()}`)\n .toString()\n .split('\\r\\n');\n const line = out[out.length - 2];\n const result = line.match(/(\\d+) [^\\d]+(\\d+) /);\n if (result && result.length > 2) {\n return Number(result[2]);\n }\n } catch {}\n return -1;\n}\n\n/**\n * Gets the telemetry sample rate.\n * @returns The telemetry sample rate.\n */\nexport function sampleRate(): number {\n return 100;\n}\n\n/**\n * Gets whether or not telemetry events are captured when running in CI.\n * @returns Whether or not telemetry events are captured when running in CI.\n */\nexport function captureCI(): boolean {\n // Only capture events in CI if running tests\n return isCliTest();\n}\n\n/**\n * Gets the whether the process is currently running in CI.\n * @returns Whether the process is currently running in CI.\n */\nexport function isCI(): boolean {\n return ci.isCI;\n}\n\n/**\n * Gets the type of CI the process is running under.\n * @returns The type of CI the process is running under.\n */\nexport function ciType(): string {\n return ci.isCI ? ci.name ?? 'Unknown' : 'None';\n}\n\n/**\n * Gets whether the process is running on a Microsoft owned machine.\n * @returns Whether the process is running on a Microsoft owned machine.\n */\nexport function isMsftInternal(): boolean {\n return (\n process.env.UserDNSDomain !== undefined &&\n process.env.UserDNSDomain.toLowerCase().endsWith('corp.microsoft.com')\n );\n}\n\n/**\n * Gets whether the process is running as part of our CLI tests.\n * @returns Whether the process is running as part of our CLI tests.\n */\nexport function isCliTest(): boolean {\n return (\n process.env.RNW_CLI_TEST !== undefined &&\n process.env.RNW_CLI_TEST.toLowerCase().trim() === 'true'\n );\n}\n\nlet sessionId: string | undefined;\n\n/**\n * Gets a stable session ID for correlating telemetry events.\n * @returns A stable session ID for correlating telemetry events.\n */\nexport function getSessionId(): string {\n return (\n sessionId ??\n (sessionId = randomBytes(16)\n .toString('hex')\n .padStart(32, '0'))\n );\n}\n"]}
1
+ {"version":3,"file":"basePropUtils.js","sourceRoot":"","sources":["../../src/utils/basePropUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,iDAAuC;AACvC,2BAAkC;AAElC,sDAAyB;AACzB,mCAAmC;AACnC,qDAA0C;AAC1C,0DAAiC;AAEjC;;;GAGG;AACI,KAAK,UAAU,QAAQ;IAC5B,OAAO,MAAM,IAAA,2BAAS,EAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAFD,4BAEC;AAED;;;GAGG;AACI,KAAK,UAAU,YAAY;IAChC,OAAO,MAAM,IAAA,mBAAQ,GAAE,CAAC;AAC1B,CAAC;AAFD,oCAEC;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAA,SAAI,GAAE,CAAC,MAAM,CAAC;AACvB,CAAC;AAFD,sCAEC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAA,aAAQ,GAAE,CAAC;AACpB,CAAC;AAFD,8CAEC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,SAAyB;IAC3D,IAAI;QACF,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,WAAW,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;aAC1D,QAAQ,EAAE;aACV,KAAK,CAAC,MAAM,CAAC,CAAC;QACjB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAChD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IAAC,WAAM,GAAE;IACV,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAZD,kDAYC;AAED;;;GAGG;AACH,SAAgB,UAAU;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAFD,gCAEC;AAED;;;GAGG;AACH,SAAgB,SAAS;IACvB,6CAA6C;IAC7C,OAAO,SAAS,EAAE,CAAC;AACrB,CAAC;AAHD,8BAGC;AAED;;;GAGG;AACH,SAAgB,IAAI;IAClB,OAAO,iBAAE,CAAC,IAAI,CAAC;AACjB,CAAC;AAFD,oBAEC;AAED;;;GAGG;AACH,SAAgB,MAAM;;IACpB,OAAO,iBAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAA,iBAAE,CAAC,IAAI,mCAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAFD,wBAEC;AAED;;;GAGG;AACH,SAAgB,cAAc;IAC5B,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS;QACvC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CACvE,CAAC;AACJ,CAAC;AALD,wCAKC;AAED;;;GAGG;AACH,SAAgB,SAAS;IACvB,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS;QACtC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,CACzD,CAAC;AACJ,CAAC;AALD,8BAKC;AAED,IAAI,SAA6B,CAAC;AAElC;;;GAGG;AACH,SAAgB,YAAY;IAC1B,OAAO,CACL,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,CAAC,SAAS,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAC7E,CAAC;AACJ,CAAC;AAJD,oCAIC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {execSync} from 'child_process';\nimport {totalmem, cpus} from 'os';\n\nimport ci from 'ci-info';\nimport {randomBytes} from 'crypto';\nimport {machineId} from 'node-machine-id';\nimport osLocale from 'os-locale';\n\n/**\n * Gets a telemetry-safe stable device ID.\n * @returns A telemetry-safe stable device ID.\n */\nexport async function deviceId(): Promise<string> {\n return await machineId(false);\n}\n\n/**\n * Gets the device locale.\n * @returns The device locale.\n */\nexport async function deviceLocale(): Promise<string> {\n return await osLocale();\n}\n\n/**\n * Gets the device's number of CPUs.\n * @returns The device's number of CPUs.\n */\nexport function deviceNumCPUs(): number {\n return cpus().length;\n}\n\n/**\n * Gets the device's total memory in bytes.\n * @returns The device's total memory in bytes.\n */\nexport function deviceTotalMemory(): number {\n return totalmem();\n}\n\n/**\n * Gets the free space of the give drive in bytes.\n * @param drivePath A path on the drive to check.\n * @returns The free space of the give drive in bytes.\n */\nexport function deviceDiskFreeSpace(drivePath?: string | null): number {\n try {\n const out = execSync(`dir /-C ${drivePath ?? process.cwd()}`)\n .toString()\n .split('\\r\\n');\n const line = out[out.length - 2];\n const result = line.match(/(\\d+) [^\\d]+(\\d+) /);\n if (result && result.length > 2) {\n return Number(result[2]);\n }\n } catch {}\n return -1;\n}\n\n/**\n * Gets the telemetry sample rate.\n * @returns The telemetry sample rate.\n */\nexport function sampleRate(): number {\n return 100;\n}\n\n/**\n * Gets whether or not telemetry events are captured when running in CI.\n * @returns Whether or not telemetry events are captured when running in CI.\n */\nexport function captureCI(): boolean {\n // Only capture events in CI if running tests\n return isCliTest();\n}\n\n/**\n * Gets the whether the process is currently running in CI.\n * @returns Whether the process is currently running in CI.\n */\nexport function isCI(): boolean {\n return ci.isCI;\n}\n\n/**\n * Gets the type of CI the process is running under.\n * @returns The type of CI the process is running under.\n */\nexport function ciType(): string {\n return ci.isCI ? ci.name ?? 'Unknown' : 'None';\n}\n\n/**\n * Gets whether the process is running on a Microsoft owned machine.\n * @returns Whether the process is running on a Microsoft owned machine.\n */\nexport function isMsftInternal(): boolean {\n return (\n process.env.UserDNSDomain !== undefined &&\n process.env.UserDNSDomain.toLowerCase().endsWith('corp.microsoft.com')\n );\n}\n\n/**\n * Gets whether the process is running as part of our CLI tests.\n * @returns Whether the process is running as part of our CLI tests.\n */\nexport function isCliTest(): boolean {\n return (\n process.env.RNW_CLI_TEST !== undefined &&\n process.env.RNW_CLI_TEST.toLowerCase().trim() === 'true'\n );\n}\n\nlet sessionId: string | undefined;\n\n/**\n * Gets a stable session ID for correlating telemetry events.\n * @returns A stable session ID for correlating telemetry events.\n */\nexport function getSessionId(): string {\n return (\n sessionId ?? (sessionId = randomBytes(16).toString('hex').padStart(32, '0'))\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as sanitizeUtils from './sanitizeUtils';\n\n// Note: All CLI commands will set process.exitCode to the numerical value of\n// a thrown CodedError. However node reserves codes 1-192 as per:\n// https://nodejs.org/api/process.html#process_exit_codes so we shouldn't\n// override those as other tools may be monitoring the error code\n\nexport const CodedErrors = {\n Success: 0,\n Unknown: -1,\n\n // init\n UnsupportedReactNativeVersion: 1000,\n UserCancel: 1001,\n NoReactNativeFound: 1002,\n NoPackageJson: 1003,\n NoLatestReactNativeWindows: 1004,\n NoAutoMatchingReactNativeWindows: 1005,\n IncompatibleOptions: 1006,\n NoReactNativeDependencies: 1007,\n NoMatchingPackageVersion: 1008,\n\n // run-windows\n NoSolution: 2000,\n // Project generation\n NoPropertyInProject: 2100,\n CopyProjectTemplateNoSourcePath: 2101,\n CopyProjectTemplateNoDestPath: 2102,\n CopyProjectTemplateNoProjectName: 2103,\n // SDK requirements\n MinSDKVersionNotMet: 2200,\n BadSDKVersionFormat: 2201,\n NoSDK: 2202,\n // Build\n NoMSBuild: 2300,\n NoVSWhere: 2301,\n MSBuildError: 2302,\n // Deploy\n NoAppPackage: 2400,\n NoAppxManifest: 2401,\n NoDevice: 2402,\n AppDidNotDeploy: 2403,\n InvalidDevicesOutput: 2404,\n RemoveOldAppVersionFailure: 2405,\n EnableDevModeFailure: 2406,\n InstallAppFailure: 2407,\n InstallAppDependenciesFailure: 2408,\n CheckNetIsolationFailure: 2409,\n InstallAppToDeviceFailure: 2410,\n UninstallAppOnDeviceFailure: 2411,\n DeployRecipeFailure: 2412,\n // Launch\n AppStartupFailure: 2500,\n\n // autolink-windows\n NoWindowsConfig: 3000,\n IncompleteConfig: 3001,\n InvalidConfig: 3002,\n NeedAutolinking: 3003,\n AddProjectToSolution: 3004,\n Autolinking: 3005,\n};\n\nexport type CodedErrorType = keyof typeof CodedErrors;\n\n/**\n * Represents an error whose message might contain user-originating content,\n * therefore when transmitting telemetry, only the type should be sent.\n * @param type a stable ID identifying the type of error.\n * @param message the error text. This should only be used for display to the user.\n * @param data any additional metadata that is safe to collect for telemetry purposes.\n */\nexport class CodedError extends Error {\n constructor(\n public readonly type: CodedErrorType,\n message: string,\n public readonly data?: Record<string, any>,\n ) {\n super(message);\n this.name = type;\n }\n}\n\n/**\n * Tries to parse an error code out of an error message.\n * @param msg An error message to process.\n * @returns The parsed error code.\n */\nexport function tryGetErrorCode(msg: string): string | undefined {\n const errorRegEx = /error (\\w+\\d+):/gi;\n const m = errorRegEx.exec(msg);\n return m ? m[1] : undefined;\n}\n\n/**\n * Sanitize an error message by anonymizing any paths that appear between quotes (''), brackets ([]), or double quotes (\"\").\n * @param msg The error message to sanitize.\n * @return The message with any paths anonymized.\n */\nexport function sanitizeErrorMessage(msg: string): string {\n const cpuThreadId = /^\\d+(:\\d+)?>/g;\n msg = msg.replace(cpuThreadId, '');\n const parts = msg.split(/['[\\]\"]/g);\n const clean = [];\n const pathRegEx = /(['[\"]?)([A-Za-z]:|\\\\)[\\\\/]([^<>:;,?\"*\\t\\r\\n|/\\\\]+[\\\\/])+([^<>:;,?\"*\\t\\r\\n|]+\\/?(['[\"]?))/gi;\n for (const part of parts) {\n if (pathRegEx.test(part)) {\n pathRegEx.lastIndex = -1;\n let matches: RegExpExecArray | null;\n let noPath = '';\n let last = 0;\n while ((matches = pathRegEx.exec(part))) {\n noPath +=\n part.substr(last, matches!.index - last) +\n sanitizeUtils.getAnonymizedPath(matches[0]);\n last = matches!.index + matches![0].length;\n }\n if (noPath !== '') {\n clean.push(noPath);\n }\n } else if (part !== '') {\n clean.push(part);\n }\n }\n return clean.join('').trim();\n}\n\n/**\n * Sanitizes an error stack frame.\n * @param frame\n */\nexport function sanitizeErrorStackFrame(\n frame: appInsights.Contracts.StackFrame,\n): void {\n const parens = frame.method.indexOf('(');\n if (parens !== -1) {\n // case 1: method === 'methodName (rootOfThePath'\n frame.method = frame.method.substr(0, parens).trim();\n } else {\n // case 2: method === <no_method> or something without '(', fileName is full path\n }\n // anonymize the filename\n frame.fileName = sanitizeUtils.getAnonymizedPath(frame.fileName);\n frame.assembly = '';\n}\n"]}
1
+ {"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport * as appInsights from 'applicationinsights';\n\nimport * as sanitizeUtils from './sanitizeUtils';\n\n// Note: All CLI commands will set process.exitCode to the numerical value of\n// a thrown CodedError. However node reserves codes 1-192 as per:\n// https://nodejs.org/api/process.html#process_exit_codes so we shouldn't\n// override those as other tools may be monitoring the error code\n\nexport const CodedErrors = {\n Success: 0,\n Unknown: -1,\n\n // init\n UnsupportedReactNativeVersion: 1000,\n UserCancel: 1001,\n NoReactNativeFound: 1002,\n NoPackageJson: 1003,\n NoLatestReactNativeWindows: 1004,\n NoAutoMatchingReactNativeWindows: 1005,\n IncompatibleOptions: 1006,\n NoReactNativeDependencies: 1007,\n NoMatchingPackageVersion: 1008,\n\n // run-windows\n NoSolution: 2000,\n // Project generation\n NoPropertyInProject: 2100,\n CopyProjectTemplateNoSourcePath: 2101,\n CopyProjectTemplateNoDestPath: 2102,\n CopyProjectTemplateNoProjectName: 2103,\n // SDK requirements\n MinSDKVersionNotMet: 2200,\n BadSDKVersionFormat: 2201,\n NoSDK: 2202,\n // Build\n NoMSBuild: 2300,\n NoVSWhere: 2301,\n MSBuildError: 2302,\n // Deploy\n NoAppPackage: 2400,\n NoAppxManifest: 2401,\n NoDevice: 2402,\n AppDidNotDeploy: 2403,\n InvalidDevicesOutput: 2404,\n RemoveOldAppVersionFailure: 2405,\n EnableDevModeFailure: 2406,\n InstallAppFailure: 2407,\n InstallAppDependenciesFailure: 2408,\n CheckNetIsolationFailure: 2409,\n InstallAppToDeviceFailure: 2410,\n UninstallAppOnDeviceFailure: 2411,\n DeployRecipeFailure: 2412,\n // Launch\n AppStartupFailure: 2500,\n\n // autolink-windows\n NoWindowsConfig: 3000,\n IncompleteConfig: 3001,\n InvalidConfig: 3002,\n NeedAutolinking: 3003,\n AddProjectToSolution: 3004,\n Autolinking: 3005,\n};\n\nexport type CodedErrorType = keyof typeof CodedErrors;\n\n/**\n * Represents an error whose message might contain user-originating content,\n * therefore when transmitting telemetry, only the type should be sent.\n * @param type a stable ID identifying the type of error.\n * @param message the error text. This should only be used for display to the user.\n * @param data any additional metadata that is safe to collect for telemetry purposes.\n */\nexport class CodedError extends Error {\n constructor(\n public readonly type: CodedErrorType,\n message: string,\n public readonly data?: Record<string, any>,\n ) {\n super(message);\n this.name = type;\n }\n}\n\n/**\n * Tries to parse an error code out of an error message.\n * @param msg An error message to process.\n * @returns The parsed error code.\n */\nexport function tryGetErrorCode(msg: string): string | undefined {\n const errorRegEx = /error (\\w+\\d+):/gi;\n const m = errorRegEx.exec(msg);\n return m ? m[1] : undefined;\n}\n\n/**\n * Sanitize an error message by anonymizing any paths that appear between quotes (''), brackets ([]), or double quotes (\"\").\n * @param msg The error message to sanitize.\n * @return The message with any paths anonymized.\n */\nexport function sanitizeErrorMessage(msg: string): string {\n const cpuThreadId = /^\\d+(:\\d+)?>/g;\n msg = msg.replace(cpuThreadId, '');\n const parts = msg.split(/['[\\]\"]/g);\n const clean = [];\n const pathRegEx =\n /(['[\"]?)([A-Za-z]:|\\\\)[\\\\/]([^<>:;,?\"*\\t\\r\\n|/\\\\]+[\\\\/])+([^<>:;,?\"*\\t\\r\\n|]+\\/?(['[\"]?))/gi;\n for (const part of parts) {\n if (pathRegEx.test(part)) {\n pathRegEx.lastIndex = -1;\n let matches: RegExpExecArray | null;\n let noPath = '';\n let last = 0;\n while ((matches = pathRegEx.exec(part))) {\n noPath +=\n part.substr(last, matches!.index - last) +\n sanitizeUtils.getAnonymizedPath(matches[0]);\n last = matches!.index + matches![0].length;\n }\n if (noPath !== '') {\n clean.push(noPath);\n }\n } else if (part !== '') {\n clean.push(part);\n }\n }\n return clean.join('').trim();\n}\n\n/**\n * Sanitizes an error stack frame.\n * @param frame\n */\nexport function sanitizeErrorStackFrame(\n frame: appInsights.Contracts.StackFrame,\n): void {\n const parens = frame.method.indexOf('(');\n if (parens !== -1) {\n // case 1: method === 'methodName (rootOfThePath'\n frame.method = frame.method.substr(0, parens).trim();\n } else {\n // case 2: method === <no_method> or something without '(', fileName is full path\n }\n // anonymize the filename\n frame.fileName = sanitizeUtils.getAnonymizedPath(frame.fileName);\n frame.assembly = '';\n}\n"]}
@@ -62,7 +62,7 @@ exports.usesTypeScript = usesTypeScript;
62
62
  * @returns The list of keys.
63
63
  */
64
64
  function getDefinedKeys(obj) {
65
- return Object.keys(obj).filter(value => obj[value] !== undefined && obj[value] !== null && value);
65
+ return Object.keys(obj).filter((value) => obj[value] !== undefined && obj[value] !== null && value);
66
66
  }
67
67
  /**
68
68
  * Given a react-native CLI config, determine the language of the RNW dependency if possible.
@@ -1 +1 @@
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 = 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 = 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"]}
@@ -32,45 +32,47 @@ function getAnonymizedPath(filepath, projectRoot) {
32
32
  ? projectRoot.slice(0, -1)
33
33
  : projectRoot;
34
34
  filepath = filepath.replace(/\//g, '\\');
35
+ const ext = path_1.default.extname(filepath);
36
+ // Check if we're under node_modules
37
+ const nodeModulesIndex = filepath.toLowerCase().lastIndexOf(nodeModules);
38
+ if (nodeModulesIndex >= 0) {
39
+ // We are under node_modules
40
+ // Check if it's an npm package we're tracking
41
+ for (const trackedNpmPackage of telemetry_1.NpmPackagesWeTrack) {
42
+ const startIndex = filepath
43
+ .toLowerCase()
44
+ .lastIndexOf(nodeModules + trackedNpmPackage.replace(/\//g, '\\') + '\\');
45
+ if (startIndex >= 0) {
46
+ // We are under node_modules within an npm package we're tracking, anonymize by removing root
47
+ return ('[node_modules]\\' + filepath.slice(startIndex + nodeModules.length));
48
+ }
49
+ }
50
+ // It's an npm package we're not tracking, anonymize with [node_modules]
51
+ return `[node_modules]\\???${ext}(${filepath.slice(nodeModulesIndex).length - nodeModules.length})`;
52
+ }
53
+ // Check if we're under the projectRoot
35
54
  if (filepath.toLowerCase().startsWith(projectRoot)) {
36
55
  // We are under the projectRoot
37
- const ext = path_1.default.extname(filepath);
38
56
  const rest = filepath.slice(projectRoot.length);
39
57
  if (rest.toLowerCase().startsWith(windows)) {
40
58
  // We are under the windows path, anonymize with [windows]
41
59
  return `[windows]\\???${ext}(${rest.length - windows.length - 1})`;
42
60
  }
43
- else if (rest.toLowerCase().startsWith(nodeModules)) {
44
- // We are under the node_modules path
45
- for (const trackedNpmPackage of telemetry_1.NpmPackagesWeTrack) {
46
- if (rest
47
- .toLowerCase()
48
- .startsWith(nodeModules + trackedNpmPackage.replace(/\//g, '\\') + '\\')) {
49
- // We are under node_modules within an npm package we're tracking, anonymize by removing root
50
- return '[node_modules]' + rest.slice(nodeModules.length - 1);
51
- }
52
- }
53
- // We are under node_modules within an npm package we're not tracking, anonymize with [node_modules]
54
- return `[node_modules]\\???${ext}(${rest.length - nodeModules.length})`;
55
- }
56
61
  else {
57
62
  // We are just within the projectRoot, anonymize with [project_dir]
58
63
  if (rest === '' || rest === '\\') {
59
64
  return '[project_dir]';
60
65
  }
61
66
  else {
62
- return `[project_dir]\\???${ext}(${rest.length -
63
- (rest.startsWith('\\') ? 1 : 0)})`;
67
+ return `[project_dir]\\???${ext}(${rest.length - (rest.startsWith('\\') ? 1 : 0)})`;
64
68
  }
65
69
  }
66
70
  }
67
- else {
68
- for (const knownPath of knownEnvironmentVariablePaths) {
69
- if (process.env[knownPath] &&
70
- filepath.toLowerCase().startsWith(process.env[knownPath].toLowerCase())) {
71
- return `[${knownPath}]\\???(${filepath.length -
72
- process.env[knownPath].length})`;
73
- }
71
+ // Check if we're under a known environmental variable path
72
+ for (const knownPath of knownEnvironmentVariablePaths) {
73
+ if (process.env[knownPath] &&
74
+ filepath.toLowerCase().startsWith(process.env[knownPath].toLowerCase())) {
75
+ return `[${knownPath}]\\???(${filepath.length - process.env[knownPath].length})`;
74
76
  }
75
77
  }
76
78
  // We are somewhere else, anonymize with [path]
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeUtils.js","sourceRoot":"","sources":["../../src/utils/sanitizeUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,gDAAwB;AAExB,4CAAgD;AAEhD,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC;AAE9B,MAAM,6BAA6B,GAAG;IACpC,SAAS;IACT,cAAc;IACd,aAAa;CACd,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,WAAoB;IAEpB,WAAW,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;SACzC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,WAAW,EAAE,CAAC;IACjB,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,WAAW,CAAC;IAChB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEzC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QAClD,+BAA+B;QAC/B,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC1C,0DAA0D;YAC1D,OAAO,iBAAiB,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;SACpE;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YACrD,qCAAqC;YACrC,KAAK,MAAM,iBAAiB,IAAI,8BAAkB,EAAE;gBAClD,IACE,IAAI;qBACD,WAAW,EAAE;qBACb,UAAU,CACT,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAC5D,EACH;oBACA,6FAA6F;oBAC7F,OAAO,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC9D;aACF;YACD,oGAAoG;YACpG,OAAO,sBAAsB,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;SACzE;aAAM;YACL,mEAAmE;YACnE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE;gBAChC,OAAO,eAAe,CAAC;aACxB;iBAAM;gBACL,OAAO,qBAAqB,GAAG,IAAI,IAAI,CAAC,MAAM;oBAC5C,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aACtC;SACF;KACF;SAAM;QACL,KAAK,MAAM,SAAS,IAAI,6BAA6B,EAAE;YACrD,IACE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;gBACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,WAAW,EAAE,CAAC,EACxE;gBACA,OAAO,IAAI,SAAS,UAAU,QAAQ,CAAC,MAAM;oBAC3C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,MAAM,GAAG,CAAC;aACrC;SACF;KACF;IACD,+CAA+C;IAC/C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAzDD,8CAyDC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport path from 'path';\n\nimport {NpmPackagesWeTrack} from '../telemetry';\n\nconst nodeModules = '\\\\node_modules\\\\';\nconst windows = '\\\\windows\\\\';\n\nconst knownEnvironmentVariablePaths = [\n 'AppData',\n 'LocalAppData',\n 'UserProfile',\n];\n\n/**\n * Gets an anonymized version of the given path, suitable for Telemetry.\n * @param filepath The path to anonymize.\n * @param projectRoot Optional root path for the project. Defaults to process.cwd().\n * @returns The anonymized path.\n */\nexport function getAnonymizedPath(\n filepath: string,\n projectRoot?: string,\n): string {\n projectRoot = (projectRoot ?? process.cwd())\n .replace(/\\//g, '\\\\')\n .toLowerCase();\n projectRoot = projectRoot.endsWith('\\\\')\n ? projectRoot.slice(0, -1)\n : projectRoot;\n filepath = filepath.replace(/\\//g, '\\\\');\n\n if (filepath.toLowerCase().startsWith(projectRoot)) {\n // We are under the projectRoot\n const ext = path.extname(filepath);\n const rest = filepath.slice(projectRoot.length);\n if (rest.toLowerCase().startsWith(windows)) {\n // We are under the windows path, anonymize with [windows]\n return `[windows]\\\\???${ext}(${rest.length - windows.length - 1})`;\n } else if (rest.toLowerCase().startsWith(nodeModules)) {\n // We are under the node_modules path\n for (const trackedNpmPackage of NpmPackagesWeTrack) {\n if (\n rest\n .toLowerCase()\n .startsWith(\n nodeModules + trackedNpmPackage.replace(/\\//g, '\\\\') + '\\\\',\n )\n ) {\n // We are under node_modules within an npm package we're tracking, anonymize by removing root\n return '[node_modules]' + rest.slice(nodeModules.length - 1);\n }\n }\n // We are under node_modules within an npm package we're not tracking, anonymize with [node_modules]\n return `[node_modules]\\\\???${ext}(${rest.length - nodeModules.length})`;\n } else {\n // We are just within the projectRoot, anonymize with [project_dir]\n if (rest === '' || rest === '\\\\') {\n return '[project_dir]';\n } else {\n return `[project_dir]\\\\???${ext}(${rest.length -\n (rest.startsWith('\\\\') ? 1 : 0)})`;\n }\n }\n } else {\n for (const knownPath of knownEnvironmentVariablePaths) {\n if (\n process.env[knownPath] &&\n filepath.toLowerCase().startsWith(process.env[knownPath]!.toLowerCase())\n ) {\n return `[${knownPath}]\\\\???(${filepath.length -\n process.env[knownPath]!.length})`;\n }\n }\n }\n // We are somewhere else, anonymize with [path]\n return '[path]';\n}\n"]}
1
+ {"version":3,"file":"sanitizeUtils.js","sourceRoot":"","sources":["../../src/utils/sanitizeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport path from 'path';\n\nimport {NpmPackagesWeTrack} from '../telemetry';\n\nconst nodeModules = '\\\\node_modules\\\\';\nconst windows = '\\\\windows\\\\';\n\nconst knownEnvironmentVariablePaths = [\n 'AppData',\n 'LocalAppData',\n 'UserProfile',\n];\n\n/**\n * Gets an anonymized version of the given path, suitable for Telemetry.\n * @param filepath The path to anonymize.\n * @param projectRoot Optional root path for the project. Defaults to process.cwd().\n * @returns The anonymized path.\n */\nexport function getAnonymizedPath(\n filepath: string,\n projectRoot?: string,\n): string {\n projectRoot = (projectRoot ?? process.cwd())\n .replace(/\\//g, '\\\\')\n .toLowerCase();\n projectRoot = projectRoot.endsWith('\\\\')\n ? projectRoot.slice(0, -1)\n : projectRoot;\n filepath = filepath.replace(/\\//g, '\\\\');\n\n const ext = path.extname(filepath);\n\n // Check if we're under node_modules\n const nodeModulesIndex = filepath.toLowerCase().lastIndexOf(nodeModules);\n if (nodeModulesIndex >= 0) {\n // We are under node_modules\n\n // Check if it's an npm package we're tracking\n for (const trackedNpmPackage of NpmPackagesWeTrack) {\n const startIndex = filepath\n .toLowerCase()\n .lastIndexOf(\n nodeModules + trackedNpmPackage.replace(/\\//g, '\\\\') + '\\\\',\n );\n if (startIndex >= 0) {\n // We are under node_modules within an npm package we're tracking, anonymize by removing root\n return (\n '[node_modules]\\\\' + filepath.slice(startIndex + nodeModules.length)\n );\n }\n }\n\n // It's an npm package we're not tracking, anonymize with [node_modules]\n return `[node_modules]\\\\???${ext}(${\n filepath.slice(nodeModulesIndex).length - nodeModules.length\n })`;\n }\n\n // Check if we're under the projectRoot\n if (filepath.toLowerCase().startsWith(projectRoot)) {\n // We are under the projectRoot\n const rest = filepath.slice(projectRoot.length);\n if (rest.toLowerCase().startsWith(windows)) {\n // We are under the windows path, anonymize with [windows]\n return `[windows]\\\\???${ext}(${rest.length - windows.length - 1})`;\n } else {\n // We are just within the projectRoot, anonymize with [project_dir]\n if (rest === '' || rest === '\\\\') {\n return '[project_dir]';\n } else {\n return `[project_dir]\\\\???${ext}(${\n rest.length - (rest.startsWith('\\\\') ? 1 : 0)\n })`;\n }\n }\n }\n\n // Check if we're under a known environmental variable path\n for (const knownPath of knownEnvironmentVariablePaths) {\n if (\n process.env[knownPath] &&\n filepath.toLowerCase().startsWith(process.env[knownPath]!.toLowerCase())\n ) {\n return `[${knownPath}]\\\\???(${\n filepath.length - process.env[knownPath]!.length\n })`;\n }\n }\n\n // We are somewhere else, anonymize with [path]\n return '[path]';\n}\n"]}
@@ -59,10 +59,7 @@ async function getVisualStudioVersion() {
59
59
  try {
60
60
  const info = await envinfo_1.default.helpers.getVisualStudioInfo();
61
61
  const versions = info[1];
62
- return versions
63
- .sort()
64
- .slice(-1)[0]
65
- .split(' ')[0];
62
+ return versions.sort().slice(-1)[0].split(' ')[0];
66
63
  }
67
64
  catch (_a) { }
68
65
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"versionUtils.js","sourceRoot":"","sources":["../../src/utils/versionUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,sDAA8B;AAC9B,kEAA0C;AAC1C,gDAAwB;AACxB,2CAAyC;AACzC,kDAA0B;AAE1B,MAAM,aAAa,GAAG,eAAK,CAAC,aAAa,CAAC;IACxC,OAAO,EAAE,qDAAqD;CAC/D,CAAC,CAAC;AAEH;;;GAGG;AACI,KAAK,UAAU,cAAc;IAClC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAFD,wCAEC;AAED;;;GAGG;AACI,KAAK,UAAU,aAAa;IACjC,IAAI;QACF,MAAM,IAAI,GAAQ,MAAM,iBAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,CAAC,CAAW,CAAC;KAC1B;IAAC,WAAM,GAAE;IACV,OAAO,IAAI,CAAC;AACd,CAAC;AAND,sCAMC;AAED;;;GAGG;AACI,KAAK,UAAU,cAAc;IAClC,IAAI;QACF,MAAM,IAAI,GAAQ,MAAM,iBAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,CAAC,CAAW,CAAC;KAC1B;IAAC,WAAM,GAAE;IACV,OAAO,IAAI,CAAC;AACd,CAAC;AAND,wCAMC;AAED;;;GAGG;AACI,KAAK,UAAU,sBAAsB;IAC1C,IAAI;QACF,MAAM,IAAI,GAAQ,MAAM,iBAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAa,CAAC;QACrC,OAAO,QAAQ;aACZ,IAAI,EAAE;aACN,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACZ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAClB;IAAC,WAAM,GAAE;IACV,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,wDAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAe;IAEf,IAAI;QACF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE;YACpE,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;SAClC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAE,CAAC,YAAY,CACnC,WAAW,CACZ,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAC5B,OAAO,OAAO,CAAC,OAAO,CAAC;SACxB;KACF;IAAC,WAAM,GAAE;IACV,OAAO,IAAI,CAAC;AACd,CAAC;AAfD,wDAeC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,MAAM,QAAQ,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,IAAI,kBAAS,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,SAAS,6BAA6B,CACpC,iBAA2B,EAC3B,aAAuB;IAEvB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE;QACnC,MAAM,OAAO,GAAG,eAAK,CAAC,OAAO,CAC3B,2BAA2B,OAAO,aAAa,EAC/C,iBAAiB,CAClB,CAAC;QAEF,IAAI,OAAO,EAAE;YACX,MAAM,YAAY,GAAI,OAAgB,CAAC,SAAS,CAAC;YACjD,IAAI,YAAY,KAAK,IAAI,EAAE;gBACzB,QAAQ,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;aAClC;SACF;KACF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CACjC,UAAoB,EACpB,aAAuB;IAEvB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE;QACnC,MAAM,OAAO,GAAG,aAAa,CAC3B,0DAA0D,OAAO,oBAAoB,EACrF,UAAU,EACV,IAAI,CACL,CAAC;QAEF,IAAI,OAAO,EAAE;YACX,MAAM,YAAY,GAAI,OAAgB,CAAC,WAAW,CAAC;YACnD,IAAI,YAAY,KAAK,IAAI,EAAE;gBACzB,QAAQ,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;aAClC;SACF;KACF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,0BAA0B,CAC9C,WAAmB,EACnB,aAAuB;IAEvB,IAAI;QACF,yDAAyD;QACzD,MAAM,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAClC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EACzB,iBAAiB,CAClB,CAAC;QACF,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAChE,OAAO,6BAA6B,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;KACxE;IAAC,WAAM,GAAE;IAEV,IAAI;QACF,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,0BAA0B,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;KAC9D;IAAC,WAAM,GAAE;IAEV,OAAO,EAAE,CAAC;AACZ,CAAC;AApBD,gEAoBC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport envinfo from 'envinfo';\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport {DOMParser} from '@xmldom/xmldom';\nimport xpath from 'xpath';\n\nconst msbuildSelect = xpath.useNamespaces({\n msbuild: 'http://schemas.microsoft.com/developer/msbuild/2003',\n});\n\n/**\n * Gets the version of node being used.\n * @returns The version of node being used.\n */\nexport async function getNodeVersion(): Promise<string | null> {\n return process.version.slice(1);\n}\n\n/**\n * Gets the version of npm installed, if available.\n * @returns The version of npm installed, if available.\n */\nexport async function getNpmVersion(): Promise<string | null> {\n try {\n const info: any = await envinfo.helpers.getnpmInfo();\n return info[1] as string;\n } catch {}\n return null;\n}\n\n/**\n * Gets the version of yarn installed, if available.\n * @returns The version of yarn installed, if available.\n */\nexport async function getYarnVersion(): Promise<string | null> {\n try {\n const info: any = await envinfo.helpers.getYarnInfo();\n return info[1] as string;\n } catch {}\n return null;\n}\n\n/**\n * Gets the latest version of Visual Studio installed, if available.\n * @returns The latest version of Visual Studio installed, if available.\n */\nexport async function getVisualStudioVersion(): Promise<string | null> {\n try {\n const info: any = await envinfo.helpers.getVisualStudioInfo();\n const versions = info[1] as string[];\n return versions\n .sort()\n .slice(-1)[0]\n .split(' ')[0];\n } catch {}\n return null;\n}\n\n/**\n * Gets the version installed of the specified npm package.\n * @param pkgName The npm package name.\n * @returns The version installed, if available.\n */\nexport async function getVersionOfNpmPackage(\n pkgName: string,\n): Promise<string | null> {\n try {\n const pkgJsonPath = require.resolve(`${pkgName.trim()}/package.json`, {\n paths: [process.cwd(), __dirname],\n });\n const pkgJson = await fs.readJsonFile<{name: string; version: string}>(\n pkgJsonPath,\n );\n if (pkgJson.name === pkgName) {\n return pkgJson.version;\n }\n } catch {}\n return null;\n}\n\n/**\n * Reads and parses an XML file into a Document.\n * @param filePath The path to the XML file.\n * @returns The parsed Document.\n */\nasync function readXmlFile(filePath: string): Promise<Document> {\n const contents = await fs.readFile(filePath, 'utf-8');\n return new DOMParser().parseFromString(contents);\n}\n\n/**\n * Gets the versions of the specified NuGet packages referenced in a packages.config file.\n * @param projectDoc The XML document of the packages.connfig file.\n * @param nugetPackages The NuGet package names to look for.\n * @returns The mapping of NuGet package names and their versions.\n */\nfunction getVersionsFromPackagesConfig(\n packagesConfigDoc: Document,\n nugetPackages: string[],\n): Record<string, string> {\n const versions: Record<string, string> = {};\n for (const pkgName of nugetPackages) {\n const version = xpath.select1(\n `//packages/package[@id='${pkgName}']/@version`,\n packagesConfigDoc,\n );\n\n if (version) {\n const versionValue = (version as Attr).nodeValue;\n if (versionValue !== null) {\n versions[pkgName] = versionValue;\n }\n }\n }\n return versions;\n}\n\n/**\n * Gets the versions of the specified NuGet packages referenced in a project file.\n * @param projectDoc The XML document of the project file.\n * @param nugetPackages The NuGet package names to look for.\n * @returns The mapping of NuGet package names and their versions.\n */\nfunction getVersionsFromProjectFile(\n projectDoc: Document,\n nugetPackages: string[],\n): Record<string, string> {\n const versions: Record<string, string> = {};\n for (const pkgName of nugetPackages) {\n const version = msbuildSelect(\n `//msbuild:ItemGroup/msbuild:PackageReference[@Include='${pkgName}']/msbuild:Version`,\n projectDoc,\n true,\n );\n\n if (version) {\n const versionValue = (version as Node).textContent;\n if (versionValue !== null) {\n versions[pkgName] = versionValue;\n }\n }\n }\n return versions;\n}\n\n/**\n * Gets the versions of the specified NuGet packages referenced in a project file.\n * @param projectFile Path to the native project file.\n * @param nugetPackages The NuGet package names to look for.\n * @returns The mapping of NuGet package names and their versions.\n */\nexport async function getVersionsOfNuGetPackages(\n projectFile: string,\n nugetPackages: string[],\n): Promise<Record<string, string>> {\n try {\n // First check for the presence of a packages.config file\n const packagesConfigFile = path.join(\n path.dirname(projectFile),\n 'packages.config',\n );\n const packagesConfigDoc = await readXmlFile(packagesConfigFile);\n return getVersionsFromPackagesConfig(packagesConfigDoc, nugetPackages);\n } catch {}\n\n try {\n const projectDoc = await readXmlFile(projectFile);\n return getVersionsFromProjectFile(projectDoc, nugetPackages);\n } catch {}\n\n return {};\n}\n"]}
1
+ {"version":3,"file":"versionUtils.js","sourceRoot":"","sources":["../../src/utils/versionUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport envinfo from 'envinfo';\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport {DOMParser} from '@xmldom/xmldom';\nimport xpath from 'xpath';\n\nconst msbuildSelect = xpath.useNamespaces({\n msbuild: 'http://schemas.microsoft.com/developer/msbuild/2003',\n});\n\n/**\n * Gets the version of node being used.\n * @returns The version of node being used.\n */\nexport async function getNodeVersion(): Promise<string | null> {\n return process.version.slice(1);\n}\n\n/**\n * Gets the version of npm installed, if available.\n * @returns The version of npm installed, if available.\n */\nexport async function getNpmVersion(): Promise<string | null> {\n try {\n const info: any = await envinfo.helpers.getnpmInfo();\n return info[1] as string;\n } catch {}\n return null;\n}\n\n/**\n * Gets the version of yarn installed, if available.\n * @returns The version of yarn installed, if available.\n */\nexport async function getYarnVersion(): Promise<string | null> {\n try {\n const info: any = await envinfo.helpers.getYarnInfo();\n return info[1] as string;\n } catch {}\n return null;\n}\n\n/**\n * Gets the latest version of Visual Studio installed, if available.\n * @returns The latest version of Visual Studio installed, if available.\n */\nexport async function getVisualStudioVersion(): Promise<string | null> {\n try {\n const info: any = await envinfo.helpers.getVisualStudioInfo();\n const versions = info[1] as string[];\n return versions.sort().slice(-1)[0].split(' ')[0];\n } catch {}\n return null;\n}\n\n/**\n * Gets the version installed of the specified npm package.\n * @param pkgName The npm package name.\n * @returns The version installed, if available.\n */\nexport async function getVersionOfNpmPackage(\n pkgName: string,\n): Promise<string | null> {\n try {\n const pkgJsonPath = require.resolve(`${pkgName.trim()}/package.json`, {\n paths: [process.cwd(), __dirname],\n });\n const pkgJson = await fs.readJsonFile<{name: string; version: string}>(\n pkgJsonPath,\n );\n if (pkgJson.name === pkgName) {\n return pkgJson.version;\n }\n } catch {}\n return null;\n}\n\n/**\n * Reads and parses an XML file into a Document.\n * @param filePath The path to the XML file.\n * @returns The parsed Document.\n */\nasync function readXmlFile(filePath: string): Promise<Document> {\n const contents = await fs.readFile(filePath, 'utf-8');\n return new DOMParser().parseFromString(contents);\n}\n\n/**\n * Gets the versions of the specified NuGet packages referenced in a packages.config file.\n * @param projectDoc The XML document of the packages.connfig file.\n * @param nugetPackages The NuGet package names to look for.\n * @returns The mapping of NuGet package names and their versions.\n */\nfunction getVersionsFromPackagesConfig(\n packagesConfigDoc: Document,\n nugetPackages: string[],\n): Record<string, string> {\n const versions: Record<string, string> = {};\n for (const pkgName of nugetPackages) {\n const version = xpath.select1(\n `//packages/package[@id='${pkgName}']/@version`,\n packagesConfigDoc,\n );\n\n if (version) {\n const versionValue = (version as Attr).nodeValue;\n if (versionValue !== null) {\n versions[pkgName] = versionValue;\n }\n }\n }\n return versions;\n}\n\n/**\n * Gets the versions of the specified NuGet packages referenced in a project file.\n * @param projectDoc The XML document of the project file.\n * @param nugetPackages The NuGet package names to look for.\n * @returns The mapping of NuGet package names and their versions.\n */\nfunction getVersionsFromProjectFile(\n projectDoc: Document,\n nugetPackages: string[],\n): Record<string, string> {\n const versions: Record<string, string> = {};\n for (const pkgName of nugetPackages) {\n const version = msbuildSelect(\n `//msbuild:ItemGroup/msbuild:PackageReference[@Include='${pkgName}']/msbuild:Version`,\n projectDoc,\n true,\n );\n\n if (version) {\n const versionValue = (version as Node).textContent;\n if (versionValue !== null) {\n versions[pkgName] = versionValue;\n }\n }\n }\n return versions;\n}\n\n/**\n * Gets the versions of the specified NuGet packages referenced in a project file.\n * @param projectFile Path to the native project file.\n * @param nugetPackages The NuGet package names to look for.\n * @returns The mapping of NuGet package names and their versions.\n */\nexport async function getVersionsOfNuGetPackages(\n projectFile: string,\n nugetPackages: string[],\n): Promise<Record<string, string>> {\n try {\n // First check for the presence of a packages.config file\n const packagesConfigFile = path.join(\n path.dirname(projectFile),\n 'packages.config',\n );\n const packagesConfigDoc = await readXmlFile(packagesConfigFile);\n return getVersionsFromPackagesConfig(packagesConfigDoc, nugetPackages);\n } catch {}\n\n try {\n const projectDoc = await readXmlFile(projectFile);\n return getVersionsFromProjectFile(projectDoc, nugetPackages);\n } catch {}\n\n return {};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-windows/telemetry",
3
- "version": "0.0.0-canary.28",
3
+ "version": "0.0.0-canary.31",
4
4
  "license": "MIT",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "typings": "lib-commonjs/index.d.ts",
@@ -18,30 +18,31 @@
18
18
  "watch": "rnw-scripts watch"
19
19
  },
20
20
  "dependencies": {
21
- "@react-native-windows/fs": "^1.0.0",
21
+ "@react-native-windows/fs": "^1.0.1",
22
+ "@xmldom/xmldom": "^0.7.5",
22
23
  "applicationinsights": "^2.1.5",
23
24
  "ci-info": "^3.2.0",
24
25
  "envinfo": "^7.8.1",
25
26
  "lodash": "^4.17.21",
26
27
  "node-machine-id": "^1.1.12",
27
28
  "os-locale": "^5.0.0",
28
- "@xmldom/xmldom": "^0.7.5",
29
29
  "xpath": "^0.0.27"
30
30
  },
31
31
  "devDependencies": {
32
- "@rnw-scripts/eslint-config": "1.1.9",
33
- "@rnw-scripts/jest-unittest-config": "1.2.4",
34
- "@rnw-scripts/just-task": "2.2.1",
32
+ "@rnw-scripts/eslint-config": "1.1.10",
33
+ "@rnw-scripts/jest-unittest-config": "1.2.5",
34
+ "@rnw-scripts/just-task": "2.2.2",
35
35
  "@rnw-scripts/ts-config": "2.0.1",
36
36
  "@types/envinfo": "^7.8.1",
37
37
  "@types/jest": "^26.0.20",
38
38
  "@types/node": "^14.14.22",
39
39
  "@types/semver": "^7.3.3",
40
40
  "babel-jest": "^26.3.0",
41
- "eslint": "7.12.0",
41
+ "eslint": "^7.32.0",
42
42
  "jest": "^26.6.3",
43
43
  "just-scripts": "^1.3.3",
44
- "prettier": "1.19.1",
44
+ "lookpath": "^1.2.1",
45
+ "prettier": "^2.4.1",
45
46
  "semver": "^7.3.5",
46
47
  "typescript": "^4.4.4"
47
48
  },