@react-native-windows/cli 0.68.1 → 0.68.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib-commonjs/runWindows/utils/autolink.js +11 -12
- package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
- package/lib-commonjs/runWindows/utils/commandWithProgress.js +3 -2
- package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +1 -1
- package/lib-commonjs/runWindows/utils/msbuildtools.js +17 -6
- package/lib-commonjs/runWindows/utils/msbuildtools.js.map +1 -1
- package/package.json +5 -5
|
@@ -263,18 +263,17 @@ class AutolinkWindows {
|
|
|
263
263
|
if (windowsDependency) {
|
|
264
264
|
verboseMessage(`${chalk_1.default.bold(dependencyName)} has Windows implementation, config:`, this.options.logging);
|
|
265
265
|
verboseMessage(windowsDependency, this.options.logging);
|
|
266
|
-
let dependencyIsValid =
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
windowsDependency.sourceDir
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
266
|
+
let dependencyIsValid = false;
|
|
267
|
+
const hasValidSourceDir = 'sourceDir' in windowsDependency &&
|
|
268
|
+
windowsDependency.sourceDir !== undefined &&
|
|
269
|
+
!windowsDependency.sourceDir.startsWith('Error: ');
|
|
270
|
+
const hasProjectsInProjectsArray = 'projects' in windowsDependency &&
|
|
271
|
+
Array.isArray(windowsDependency.projects) &&
|
|
272
|
+
windowsDependency.projects.length > 0;
|
|
273
|
+
if (hasValidSourceDir && hasProjectsInProjectsArray) {
|
|
274
|
+
// Module is source-based and has projects
|
|
275
|
+
dependencyIsValid = true;
|
|
276
|
+
// Validate each source project
|
|
278
277
|
windowsDependency.projects.forEach((project) => {
|
|
279
278
|
const itemsToCheck = [
|
|
280
279
|
'projectFile',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autolink.js","sourceRoot":"","sources":["../../../src/runWindows/utils/autolink.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n// Types in this file are inaccurate compared to usage in terms of falsiness.\n// We should try to rewrite some of this to do automated schema validation to\n// guarantee correct types\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {performance} from 'perf_hooks';\n\nimport {newSpinner, setExitProcessWithError} from './commandWithProgress';\nimport * as vstools from './vstools';\nimport * as generatorCommon from '../../generator-common';\nimport * as configUtils from '../../config/configUtils';\n\nimport {\n Command,\n CommandOption,\n Config,\n Dependency,\n ProjectConfig,\n} from '@react-native-community/cli-types';\nimport {\n WindowsDependencyConfig,\n ProjectDependency,\n} from '../../config/dependencyConfig';\nimport {Project, WindowsProjectConfig} from '../../config/projectConfig';\nimport {Telemetry, CodedError} from '@react-native-windows/telemetry';\nimport {\n getDefaultOptions,\n startTelemetrySession,\n endTelemetrySession,\n} from './telemetryHelpers';\nimport {XMLSerializer} from '@xmldom/xmldom';\nimport {Ora} from 'ora';\nconst formatter = require('xml-formatter');\n\nexport class AutolinkWindows {\n private changesNecessary: boolean;\n protected windowsAppConfig: WindowsProjectConfig;\n\n public areChangesNeeded() {\n return this.changesNecessary;\n }\n\n private getWindowsConfig() {\n return this.windowsAppConfig;\n }\n\n private getSolutionFile() {\n return path.join(\n this.getWindowsConfig().folder,\n this.getWindowsConfig().sourceDir,\n this.getWindowsConfig().solutionFile,\n );\n }\n\n constructor(\n readonly projectConfig: ProjectConfig,\n readonly dependenciesConfig: {[key: string]: Dependency},\n readonly options: AutoLinkOptions,\n ) {\n this.changesNecessary = false;\n if (\n !('windows' in this.projectConfig) ||\n this.projectConfig.windows === null\n ) {\n throw new CodedError(\n 'NoWindowsConfig',\n 'Windows auto-link only supported on Windows app projects',\n );\n }\n this.windowsAppConfig = projectConfig.windows;\n }\n\n public async run(spinner: Ora) {\n const verbose = this.options.logging;\n\n verboseMessage('', verbose);\n verboseMessage('Parsing project...', verbose);\n\n const rnwRoot = resolveRnwRoot(this.windowsAppConfig);\n const templateRoot = resolveTemplateRoot(this.windowsAppConfig);\n\n this.fixUpForSlnOption();\n this.fixUpForProjOption();\n\n verboseMessage('Found Windows app project, config:', verbose);\n verboseMessage(this.windowsAppConfig, verbose);\n\n this.validateRequiredAppProperties();\n\n const solutionFile = this.getSolutionFile();\n\n const windowsAppProjectConfig = this.windowsAppConfig.project;\n\n this.validateRequiredProjectProperties();\n\n const projectFile = this.getProjectFile();\n\n const projectDir = path.dirname(projectFile);\n const projectLang = windowsAppProjectConfig.projectLang!;\n\n verboseMessage('Parsing dependencies...', verbose);\n\n this.changesNecessary =\n (await this.ensureXAMLDialect()) || this.changesNecessary;\n\n // Generating cs/cpp files for app code consumption\n if (projectLang === 'cs') {\n this.changesNecessary =\n (await this.generateCSAutolinking(\n templateRoot,\n projectLang,\n projectDir,\n )) || this.changesNecessary;\n } else if (projectLang === 'cpp') {\n this.changesNecessary =\n (await this.generateCppAutolinking(\n templateRoot,\n projectLang,\n projectDir,\n )) || this.changesNecessary;\n }\n\n // Generating props for app project consumption\n let propertiesForProps = '';\n let csModuleNames: string[] = [];\n\n if (projectLang === 'cpp') {\n csModuleNames = this.getCSModules();\n\n if (csModuleNames.length > 0) {\n propertiesForProps += `\n <!-- Set due to dependency on C# module(s): ${csModuleNames.join()} -->\n <ConsumeCSharpModules Condition=\"'$(ConsumeCSharpModules)'==''\">true</ConsumeCSharpModules>`;\n }\n }\n\n this.changesNecessary =\n (await this.generateAutolinkProps(\n templateRoot,\n projectDir,\n propertiesForProps,\n )) || this.changesNecessary;\n\n // Generating targets for app project consumption\n this.changesNecessary =\n (await this.generateAutolinkTargets(projectDir, templateRoot)) ||\n this.changesNecessary;\n\n // Generating project entries for solution\n this.changesNecessary =\n this.updateSolution(rnwRoot, solutionFile) || this.changesNecessary;\n\n spinner.succeed();\n }\n\n /**\n * Handles the --proj command-line option by consuming its value into the windowsAppConfig\n */\n public fixUpForProjOption() {\n if (this.options.proj) {\n const projFile = path.join(\n this.windowsAppConfig.folder,\n this.options.proj,\n );\n\n const projectContents = configUtils.readProjectFile(projFile);\n\n this.windowsAppConfig.project = {\n projectFile: path.relative(\n path.join(\n this.windowsAppConfig.folder,\n this.windowsAppConfig.sourceDir,\n ),\n projFile,\n ),\n projectName: configUtils.getProjectName(projFile, projectContents),\n projectLang: configUtils.getProjectLanguage(projFile),\n projectGuid: configUtils.getProjectGuid(projectContents),\n };\n }\n }\n\n /**\n * Handles the --sln command-line option by consuming its value into the windowsAppConfig\n */\n public fixUpForSlnOption() {\n if (this.options.sln) {\n const slnFile = path.join(this.windowsAppConfig.folder, this.options.sln);\n this.windowsAppConfig.solutionFile = path.relative(\n path.join(\n this.windowsAppConfig.folder,\n this.windowsAppConfig.sourceDir,\n ),\n slnFile,\n );\n }\n }\n\n /** Validates the all of the required app (solution) properties are present and valid */\n public validateRequiredAppProperties() {\n const alwaysRequired: Array<keyof WindowsProjectConfig> = [\n 'folder',\n 'sourceDir',\n 'solutionFile',\n 'project',\n ];\n\n alwaysRequired.forEach((item) => {\n if (\n !(item in this.windowsAppConfig) ||\n this.windowsAppConfig[item] === null\n ) {\n throw new CodedError(\n 'IncompleteConfig',\n `${item} is required but not specified by react-native config`,\n {item: item},\n );\n } else if (\n typeof this.windowsAppConfig[item] === 'string' &&\n (this.windowsAppConfig[item] as string).startsWith('Error: ')\n ) {\n throw new CodedError(\n 'InvalidConfig',\n `${item} invalid. ${this.windowsAppConfig[item]}`,\n {item: item},\n );\n }\n });\n }\n\n /** @return the full path to the project file (.vcxproj or .csproj) */\n private getProjectFile() {\n const windowsAppConfig = this.getWindowsConfig();\n return path.join(\n windowsAppConfig.folder,\n windowsAppConfig.sourceDir,\n windowsAppConfig.project.projectFile,\n );\n }\n\n /** Validates that all of the required app _project_ properties are present and valid */\n public validateRequiredProjectProperties() {\n const windowsAppProjectConfig = this.windowsAppConfig.project;\n const projectRequired: Array<keyof Project> = [\n 'projectFile',\n 'projectName',\n 'projectLang',\n 'projectGuid',\n ];\n\n projectRequired.forEach((item) => {\n if (\n !(item in windowsAppProjectConfig) ||\n windowsAppProjectConfig[item] === null\n ) {\n throw new CodedError(\n 'IncompleteConfig',\n `project.${item} is required but not specified by react-native config`,\n {item: item},\n );\n } else if (\n typeof windowsAppProjectConfig[item] === 'string' &&\n windowsAppProjectConfig[item]!.startsWith('Error: ')\n ) {\n throw new CodedError(\n 'InvalidConfig',\n `project.${item} invalid. ${windowsAppProjectConfig[item]}`,\n {item: item},\n );\n }\n });\n }\n\n private async generateCppAutolinking(\n templateRoot: string,\n projectLang: string,\n projectDir: string,\n ) {\n const {cppPackageProviders, cppIncludes} = this.getCppReplacements();\n\n const cppFileName = 'AutolinkedNativeModules.g.cpp';\n\n const srcCppFile = path.join(\n templateRoot,\n `${projectLang}-app`,\n 'src',\n cppFileName,\n );\n\n const destCppFile = path.join(projectDir, cppFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destCppFile))}...`,\n this.options.logging,\n );\n\n const cppContents = generatorCommon.resolveContents(srcCppFile, {\n useMustache: true,\n autolinkCppIncludes: cppIncludes,\n autolinkCppPackageProviders: cppPackageProviders,\n });\n\n return await this.updateFile(destCppFile, cppContents);\n }\n\n public getCppReplacements() {\n let cppIncludes = '';\n let cppPackageProviders = '';\n const windowsDependencies = this.getWindowsDependencies();\n\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency) {\n cppIncludes += `\\n\\n// Includes from ${dependencyName}`;\n project.cppHeaders.forEach((header) => {\n cppIncludes += `\\n#include <${header}>`;\n });\n\n cppPackageProviders += `\\n // IReactPackageProviders from ${dependencyName}`;\n project.cppPackageProviders.forEach((packageProvider) => {\n cppPackageProviders += `\\n packageProviders.Append(winrt::${packageProvider}());`;\n });\n }\n });\n }\n\n if (cppPackageProviders === '') {\n // There are no windows dependencies, this would result in warning. C4100: 'packageProviders': unreferenced formal parameter.\n // therefore add a usage.\n cppPackageProviders = '\\n UNREFERENCED_PARAMETER(packageProviders);'; // CODESYNC: vnext\\local-cli\\generator-windows\\index.js\n }\n return {cppPackageProviders, cppIncludes};\n }\n\n private generateCSAutolinking(\n templateRoot: string,\n projectLang: string,\n projectDir: string,\n ) {\n const {csUsingNamespaces, csReactPackageProviders} =\n this.getCsReplacements();\n\n const csFileName = 'AutolinkedNativeModules.g.cs';\n\n const srcCsFile = path.join(\n templateRoot,\n `${projectLang}-app`,\n 'src',\n csFileName,\n );\n\n const destCsFile = path.join(projectDir, csFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destCsFile))}...`,\n this.options.logging,\n );\n\n const csContents = generatorCommon.resolveContents(srcCsFile, {\n useMustache: true,\n autolinkCsUsingNamespaces: csUsingNamespaces,\n autolinkCsReactPackageProviders: csReactPackageProviders,\n });\n\n return this.updateFile(destCsFile, csContents);\n }\n\n public getCsReplacements() {\n let csUsingNamespaces = '';\n let csReactPackageProviders = '';\n\n const windowsDependencies = this.getWindowsDependencies();\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency) {\n csUsingNamespaces += `\\n\\n// Namespaces from ${dependencyName}`;\n project.csNamespaces.forEach((namespace) => {\n csUsingNamespaces += `\\nusing ${namespace};`;\n });\n\n csReactPackageProviders += `\\n // IReactPackageProviders from ${dependencyName}`;\n project.csPackageProviders.forEach((packageProvider) => {\n csReactPackageProviders += `\\n packageProviders.Add(new ${packageProvider}());`;\n });\n }\n });\n }\n return {csUsingNamespaces, csReactPackageProviders};\n }\n\n /** Cache of dependencies */\n private windowsDependencies:\n | Record<string, WindowsDependencyConfig>\n | undefined;\n\n private getWindowsDependencies() {\n if (!this.windowsDependencies) {\n this.windowsDependencies = {};\n for (const dependencyName of Object.keys(this.dependenciesConfig)) {\n const windowsDependency: WindowsDependencyConfig | undefined =\n this.dependenciesConfig[dependencyName].platforms.windows;\n\n if (windowsDependency) {\n verboseMessage(\n `${chalk.bold(dependencyName)} has Windows implementation, config:`,\n this.options.logging,\n );\n verboseMessage(windowsDependency, this.options.logging);\n\n let dependencyIsValid = true;\n\n dependencyIsValid = !!(\n dependencyIsValid &&\n 'sourceDir' in windowsDependency &&\n windowsDependency.sourceDir &&\n !windowsDependency.sourceDir.startsWith('Error: ')\n );\n\n if (\n 'projects' in windowsDependency &&\n Array.isArray(windowsDependency.projects)\n ) {\n if (\n windowsDependency.projects.length === 0 &&\n dependencyName.includes('react-native')\n ) {\n // the dependency is probably a react native module, but we didn't find a module project\n throw new CodedError(\n 'Autolinking',\n `Found a Windows solution for ${dependencyName} but no React Native for Windows native module projects`,\n );\n }\n windowsDependency.projects.forEach((project) => {\n const itemsToCheck: Array<keyof ProjectDependency> = [\n 'projectFile',\n 'directDependency',\n ];\n itemsToCheck.forEach((item) => {\n dependencyIsValid = !!(\n dependencyIsValid &&\n item in project &&\n project[item] !== '' &&\n !project[item]!.toString().startsWith('Error: ')\n );\n });\n });\n }\n\n if (dependencyIsValid) {\n verboseMessage(\n `Adding ${chalk.bold(dependencyName)}.`,\n this.options.logging,\n );\n this.windowsDependencies[dependencyName] = windowsDependency;\n } else {\n verboseMessage(\n `Invalid dependency configuration for dependency ${dependencyName}`,\n this.options.logging,\n );\n }\n }\n }\n }\n return this.windowsDependencies;\n }\n\n /**\n * Updates the target file with the expected contents if it's different.\n * @param filePath Path to the target file to update.\n * @param expectedContents The expected contents of the file.\n * @return Whether any changes were necessary.\n */\n protected async updateFile(filePath: string, expectedContents: string) {\n const fileName = chalk.bold(path.basename(filePath));\n verboseMessage(`Reading ${fileName}...`, this.options.logging);\n const actualContents = fs.existsSync(filePath)\n ? (await fs.readFile(filePath)).toString()\n : '';\n\n const contentsChanged = expectedContents !== actualContents;\n\n if (contentsChanged) {\n verboseMessage(\n chalk.yellow(`${fileName} needs to be updated.`),\n this.options.logging,\n );\n if (!this.options.check) {\n verboseMessage(`Writing ${fileName}...`, this.options.logging);\n await fs.writeFile(filePath, expectedContents, {\n encoding: 'utf8',\n flag: 'w',\n });\n }\n } else {\n verboseMessage(`No changes to ${fileName}.`, this.options.logging);\n }\n\n return contentsChanged;\n }\n\n private generateAutolinkTargets(projectDir: string, templateRoot: string) {\n let projectReferencesForTargets = '';\n\n const windowsDependencies = this.getWindowsDependencies();\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency) {\n const dependencyProjectFile = path.join(\n windowsDependencies[dependencyName].folder,\n windowsDependencies[dependencyName].sourceDir!,\n project.projectFile,\n );\n\n const relDependencyProjectFile = path.relative(\n projectDir,\n dependencyProjectFile,\n );\n\n projectReferencesForTargets += `\n <!-- Projects from ${dependencyName} -->\n <ProjectReference Include=\"$(ProjectDir)${relDependencyProjectFile}\">\n <Project>${project.projectGuid}</Project>\n </ProjectReference>`;\n }\n });\n }\n\n const targetFileName = 'AutolinkedNativeModules.g.targets';\n\n const srcTargetFile = path.join(\n templateRoot,\n `shared-app`,\n 'src',\n targetFileName,\n );\n\n const destTargetFile = path.join(projectDir, targetFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destTargetFile))}...`,\n this.options.logging,\n );\n\n const targetContents = generatorCommon.resolveContents(srcTargetFile, {\n useMustache: true,\n autolinkProjectReferencesForTargets: projectReferencesForTargets,\n });\n\n return this.updateFile(destTargetFile, targetContents);\n }\n\n private generateAutolinkProps(\n templateRoot: string,\n projectDir: string,\n propertiesForProps: string,\n ) {\n const propsFileName = 'AutolinkedNativeModules.g.props';\n\n const srcPropsFile = path.join(\n templateRoot,\n `shared-app`,\n 'src',\n propsFileName,\n );\n\n const destPropsFile = path.join(projectDir, propsFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destPropsFile))}...`,\n this.options.logging,\n );\n\n const propsContents = generatorCommon.resolveContents(srcPropsFile, {\n useMustache: true,\n autolinkPropertiesForProps: propertiesForProps,\n });\n\n return this.updateFile(destPropsFile, propsContents);\n }\n\n private getCSModules() {\n const csModuleNames: string[] = [];\n const windowsDependencies = this.getWindowsDependencies();\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency && project.projectLang === 'cs') {\n csModuleNames.push(project.projectName);\n }\n });\n }\n return csModuleNames;\n }\n\n private updateSolution(rnwRoot: string, solutionFile: string) {\n const projectsForSolution: Project[] = [];\n const windowsDependencies = this.getWindowsDependencies();\n\n for (const dependencyName of Object.keys(windowsDependencies)) {\n // Process dependency projects\n windowsDependencies[dependencyName].projects.forEach((project) => {\n const dependencyProjectFile = path.join(\n windowsDependencies[dependencyName].folder,\n windowsDependencies[dependencyName].sourceDir!,\n project.projectFile,\n );\n\n projectsForSolution.push({\n projectFile: dependencyProjectFile,\n projectName: project.projectName,\n projectLang: project.projectLang,\n projectGuid: project.projectGuid,\n });\n });\n }\n\n const csModuleNames = this.getCSModules();\n if (csModuleNames.length > 0) {\n // Add managed projects\n projectsForSolution.push({\n projectFile: path.join(\n rnwRoot,\n 'Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj',\n ),\n projectName: 'Microsoft.ReactNative.Managed',\n projectLang: 'cs',\n projectGuid: '{F2824844-CE15-4242-9420-308923CD76C3}',\n });\n projectsForSolution.push({\n projectFile: path.join(\n rnwRoot,\n 'Microsoft.ReactNative.Managed.CodeGen//Microsoft.ReactNative.Managed.CodeGen.csproj',\n ),\n projectName: 'Microsoft.ReactNative.Managed.CodeGen',\n projectLang: 'cs',\n projectGuid: '{ADED4FBE-887D-4271-AF24-F0823BCE7961}',\n projectTypeGuid: vstools.dotNetCoreProjectTypeGuid,\n });\n }\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(solutionFile))} changes...`,\n this.options.logging,\n );\n\n let changesNecessary = false;\n projectsForSolution.forEach((project) => {\n const contentsChanged = vstools.addProjectToSolution(\n solutionFile,\n project,\n this.options.logging,\n this.options.check,\n );\n changesNecessary = changesNecessary || contentsChanged;\n });\n return changesNecessary;\n }\n\n protected getExperimentalFeaturesPropsXml() {\n const experimentalFeaturesProps = path.join(\n path.dirname(this.getSolutionFile()),\n 'ExperimentalFeatures.props',\n );\n if (fs.existsSync(experimentalFeaturesProps)) {\n const experimentalFeaturesContents = configUtils.readProjectFile(\n experimentalFeaturesProps,\n );\n return {\n path: experimentalFeaturesProps,\n content: experimentalFeaturesContents,\n };\n }\n return undefined;\n }\n\n public async ensureXAMLDialect() {\n let changesNeeded = false;\n const useWinUI3FromConfig = this.getWindowsConfig().useWinUI3;\n const experimentalFeatures = this.getExperimentalFeaturesPropsXml();\n if (experimentalFeatures) {\n const useWinUI3FromExperimentalFeatures =\n configUtils\n .tryFindPropertyValue(experimentalFeatures.content, 'UseWinUI3')\n ?.toLowerCase() === 'true';\n // Check if WinUI2xVersion is specified in experimental features\n const targetWinUI2xVersion = configUtils.tryFindPropertyValue(\n experimentalFeatures.content,\n 'WinUI2xVersion',\n );\n // Check if WinUI3Version is specified in experimental features\n const targetWinUI3xVersion = configUtils.tryFindPropertyValue(\n experimentalFeatures.content,\n 'WinUI3Version',\n );\n // Use the UseWinUI3 value in react-native.config.js, or if not present, the value from ExperimentalFeatures.props\n changesNeeded = await this.updatePackagesConfigXAMLDialect(\n useWinUI3FromConfig !== undefined\n ? useWinUI3FromConfig\n : useWinUI3FromExperimentalFeatures,\n targetWinUI2xVersion,\n targetWinUI3xVersion,\n );\n if (useWinUI3FromConfig !== undefined) {\n // Make sure ExperimentalFeatures.props matches the value that comes from react-native.config.js\n const node =\n experimentalFeatures.content.getElementsByTagName('UseWinUI3');\n const newValue = useWinUI3FromConfig ? 'true' : 'false';\n changesNeeded = node.item(0)?.textContent !== newValue || changesNeeded;\n if (!this.options.check && changesNeeded) {\n node.item(0)!.textContent = newValue;\n const experimentalFeaturesOutput =\n new XMLSerializer().serializeToString(experimentalFeatures.content);\n await this.updateFile(\n experimentalFeatures.path,\n experimentalFeaturesOutput,\n );\n }\n }\n }\n return changesNeeded;\n }\n\n protected getPackagesConfigXml() {\n const projectFile = this.getProjectFile();\n const packagesConfig = path.join(\n path.dirname(projectFile),\n 'packages.config',\n );\n\n if (fs.existsSync(packagesConfig)) {\n return {\n path: packagesConfig,\n content: configUtils.readProjectFile(packagesConfig),\n };\n }\n return undefined;\n }\n\n private async updatePackagesConfigXAMLDialect(\n useWinUI3: boolean,\n targetWinUI2xVersion: string | null,\n targetWinUI3xVersion: string | null,\n ) {\n let changed = false;\n const packagesConfig = this.getPackagesConfigXml();\n if (packagesConfig) {\n // if we don't have a packages.config, then this is a C# project, in which case we use <PackageReference> and dynamically pick the right XAML package.\n const project = this.getWindowsConfig();\n\n const winUIPropsPath = path.join(\n resolveRnwRoot(project),\n 'PropertySheets/WinUI.props',\n );\n const winuiPropsContents = configUtils.readProjectFile(winUIPropsPath);\n\n // Use the given WinUI2xVersion, otherwise fallback to WinUI.props\n const winui2xVersion =\n targetWinUI2xVersion ??\n configUtils.tryFindPropertyValue(winuiPropsContents, 'WinUI2xVersion');\n\n // Use the given WinUI3Version, otherwise fallback to WinUI.props\n const winui3Version =\n targetWinUI3xVersion ??\n configUtils.tryFindPropertyValue(winuiPropsContents, 'WinUI3Version');\n\n const dialects = [\n {id: 'Microsoft.WinUI', version: winui3Version!},\n {id: 'Microsoft.UI.Xaml', version: winui2xVersion!},\n ];\n const keepPkg = useWinUI3 ? dialects[0] : dialects[1];\n const removePkg = useWinUI3 ? dialects[1] : dialects[0];\n\n changed = this.updatePackagesConfig(\n packagesConfig,\n [removePkg],\n [keepPkg],\n );\n\n if (!this.options.check && changed) {\n const serializer = new XMLSerializer();\n const output = serializer.serializeToString(packagesConfig.content);\n const formattedXml = formatter(output, {indentation: ' '});\n await this.updateFile(packagesConfig.path, formattedXml);\n }\n }\n return changed;\n }\n\n private updatePackagesConfig(\n packagesConfig: {path: string; content: Document},\n removePkgs: {id: string; version: string}[],\n keepPkgs: {id: string; version: string}[],\n ) {\n let changed = false;\n const packageElements =\n packagesConfig.content.documentElement.getElementsByTagName('package');\n\n const nodesToRemove: Element[] = [];\n\n for (let i = 0; i < packageElements.length; i++) {\n const packageElement = packageElements.item(i)!;\n const idAttr = packageElement!.getAttributeNode('id');\n const id = idAttr!.value;\n const keepPkg = keepPkgs.find((pkg) => pkg.id === id);\n if (removePkgs.find((pkg) => pkg.id === id)) {\n nodesToRemove.push(packageElement);\n changed = true;\n } else if (keepPkg) {\n changed =\n changed || keepPkg.version !== packageElement.getAttribute('version');\n packageElement.setAttribute('version', keepPkg.version!);\n keepPkgs = keepPkgs.filter((pkg) => pkg.id !== keepPkg.id);\n }\n }\n\n nodesToRemove.forEach((pkg) =>\n packagesConfig.content.documentElement.removeChild(pkg),\n );\n\n keepPkgs.forEach((keepPkg) => {\n const newPkg = packagesConfig.content.createElement('package');\n\n Object.entries(keepPkg).forEach(([attr, value]) => {\n newPkg.setAttribute(attr, value as string);\n });\n newPkg.setAttribute('targetFramework', 'native');\n packagesConfig.content.documentElement.appendChild(newPkg);\n changed = true;\n });\n return changed;\n }\n\n /** @return The CLI command to invoke autolink-windows independently */\n public getAutolinkWindowsCommand() {\n const folder = this.windowsAppConfig.folder;\n\n const autolinkCommand = 'npx react-native autolink-windows';\n const autolinkArgs = `--sln \"${path.relative(\n folder,\n this.getSolutionFile(),\n )}\" --proj \"${path.relative(folder, this.getProjectFile())}\"`;\n return `${autolinkCommand} ${autolinkArgs}`;\n }\n}\n\n/**\n * Locates the react-native-windows directory\n * @param config project configuration\n */\nfunction resolveRnwRoot(projectConfig: WindowsProjectConfig) {\n const rnwPackage = path.dirname(\n require.resolve('react-native-windows/package.json', {\n paths: [projectConfig.folder],\n }),\n );\n return rnwPackage;\n}\n\n/**\n * Locates the react-native-windows directory containing template files\n * @param config project configuration\n */\nfunction resolveTemplateRoot(projectConfig: WindowsProjectConfig) {\n const rnwPackage = resolveRnwRoot(projectConfig);\n return path.join(rnwPackage, 'template');\n}\n\n/**\n * Logs the given message if verbose is True.\n * @param message The message to log.\n * @param verbose Whether or not verbose logging is enabled.\n */\nfunction verboseMessage(message: any, verbose?: boolean) {\n if (verbose) {\n console.log(message);\n }\n}\n\n/**\n * Sanitizes the given option for telemetery.\n * @param key The key of the option.\n * @param value The unsanitized value of the option.\n * @returns The sanitized value of the option.\n */\nfunction optionSanitizer(key: keyof AutoLinkOptions, value: any): any {\n // Do not add a default case here.\n // Strings risking PII should just return true if present, false otherwise.\n // All others should return the value (or false if undefined).\n switch (key) {\n case 'sln':\n case 'proj':\n return value === undefined ? false : true; // Strip PII\n case 'logging':\n case 'check':\n case 'telemetry':\n return value === undefined ? false : value; // Return value\n }\n}\n\n/**\n * Get the extra props to add to the `autolink-windows` telemetry event.\n * @returns The extra props.\n */\nasync function getExtraProps(): Promise<Record<string, any>> {\n const extraProps: Record<string, any> = {};\n return extraProps;\n}\n\n/**\n * The function run when calling `react-native autolink-windows`.\n * @param args Unprocessed args passed from react-native CLI.\n * @param config Config passed from react-native CLI.\n * @param options Options passed from react-native CLI.\n */\nasync function autolinkWindows(\n args: string[],\n config: Config,\n options: AutoLinkOptions,\n) {\n await startTelemetrySession(\n 'autolink-windows',\n config,\n options,\n getDefaultOptions(config, autolinkOptions),\n optionSanitizer,\n );\n\n let autolinkWindowsError: Error | undefined;\n try {\n await autolinkWindowsInternal(args, config, options);\n } catch (ex) {\n autolinkWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(autolinkWindowsError);\n }\n\n await endTelemetrySession(autolinkWindowsError, getExtraProps);\n setExitProcessWithError(options.logging, autolinkWindowsError);\n}\n\n/**\n * Performs auto-linking for RNW native modules and apps.\n * @param args Unprocessed args passed from react-native CLI.\n * @param config Config passed from react-native CLI.\n * @param options Options passed from react-native CLI.\n */\nexport async function autolinkWindowsInternal(\n args: string[],\n config: Config,\n options: AutoLinkOptions,\n) {\n const startTime = performance.now();\n const spinner = newSpinner(\n options.check ? 'Checking auto-linked files...' : 'Auto-linking...',\n );\n try {\n const autolink = new AutolinkWindows(\n config.project,\n config.dependencies,\n options,\n );\n await autolink.run(spinner);\n const endTime = performance.now();\n\n if (!autolink.areChangesNeeded()) {\n console.log(\n `${chalk.green(\n 'Success:',\n )} No auto-linking changes necessary. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n } else if (options.check) {\n const autolinkCommand = autolink.getAutolinkWindowsCommand();\n console.log(\n `${chalk.yellow(\n 'Warning:',\n )} Auto-linking changes were necessary but ${chalk.bold(\n '--check',\n )} specified. Run '${chalk.bold(\n `${autolinkCommand}`,\n )}' to apply the changes. (${Math.round(endTime - startTime)}ms)`,\n );\n throw new CodedError(\n 'NeedAutolinking',\n `Auto-linking changes were necessary but --check was specified. Run '${autolinkCommand}' to apply the changes`,\n );\n } else {\n console.log(\n `${chalk.green(\n 'Success:',\n )} Auto-linking changes completed. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n }\n } catch (e) {\n spinner.fail();\n const endTime = performance.now();\n console.log(\n `${chalk.red('Error:')} ${(e as any).toString()}. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n throw e;\n }\n}\n\nexport interface AutoLinkOptions {\n logging?: boolean;\n check?: boolean;\n sln?: string;\n proj?: string;\n telemetry?: boolean;\n}\n\nexport const autolinkOptions: CommandOption[] = [\n {\n name: '--logging',\n description: 'Verbose output logging',\n },\n {\n name: '--check',\n description: 'Only check whether any autolinked files need to change',\n },\n {\n name: '--sln [string]',\n description:\n \"Override the app solution file determined by 'react-native config', e.g. windows\\\\myApp.sln\",\n default: undefined,\n },\n {\n name: '--proj [string]',\n description:\n \"Override the app project file determined by 'react-native config', e.g. windows\\\\myApp\\\\myApp.vcxproj\",\n default: undefined,\n },\n {\n name: '--no-telemetry',\n description:\n 'Disables sending telemetry that allows analysis of usage and failures of the react-native-windows CLI',\n },\n];\n\n/**\n * Performs auto-linking for RNW native modules and apps.\n */\nexport const autoLinkCommand: Command = {\n name: 'autolink-windows',\n description: 'performs autolinking',\n func: autolinkWindows,\n options: autolinkOptions,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"autolink.js","sourceRoot":"","sources":["../../../src/runWindows/utils/autolink.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n// Types in this file are inaccurate compared to usage in terms of falsiness.\n// We should try to rewrite some of this to do automated schema validation to\n// guarantee correct types\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {performance} from 'perf_hooks';\n\nimport {newSpinner, setExitProcessWithError} from './commandWithProgress';\nimport * as vstools from './vstools';\nimport * as generatorCommon from '../../generator-common';\nimport * as configUtils from '../../config/configUtils';\n\nimport {\n Command,\n CommandOption,\n Config,\n Dependency,\n ProjectConfig,\n} from '@react-native-community/cli-types';\nimport {\n WindowsDependencyConfig,\n ProjectDependency,\n} from '../../config/dependencyConfig';\nimport {Project, WindowsProjectConfig} from '../../config/projectConfig';\nimport {Telemetry, CodedError} from '@react-native-windows/telemetry';\nimport {\n getDefaultOptions,\n startTelemetrySession,\n endTelemetrySession,\n} from './telemetryHelpers';\nimport {XMLSerializer} from '@xmldom/xmldom';\nimport {Ora} from 'ora';\nconst formatter = require('xml-formatter');\n\nexport class AutolinkWindows {\n private changesNecessary: boolean;\n protected windowsAppConfig: WindowsProjectConfig;\n\n public areChangesNeeded() {\n return this.changesNecessary;\n }\n\n private getWindowsConfig() {\n return this.windowsAppConfig;\n }\n\n private getSolutionFile() {\n return path.join(\n this.getWindowsConfig().folder,\n this.getWindowsConfig().sourceDir,\n this.getWindowsConfig().solutionFile,\n );\n }\n\n constructor(\n readonly projectConfig: ProjectConfig,\n readonly dependenciesConfig: {[key: string]: Dependency},\n readonly options: AutoLinkOptions,\n ) {\n this.changesNecessary = false;\n if (\n !('windows' in this.projectConfig) ||\n this.projectConfig.windows === null\n ) {\n throw new CodedError(\n 'NoWindowsConfig',\n 'Windows auto-link only supported on Windows app projects',\n );\n }\n this.windowsAppConfig = projectConfig.windows;\n }\n\n public async run(spinner: Ora) {\n const verbose = this.options.logging;\n\n verboseMessage('', verbose);\n verboseMessage('Parsing project...', verbose);\n\n const rnwRoot = resolveRnwRoot(this.windowsAppConfig);\n const templateRoot = resolveTemplateRoot(this.windowsAppConfig);\n\n this.fixUpForSlnOption();\n this.fixUpForProjOption();\n\n verboseMessage('Found Windows app project, config:', verbose);\n verboseMessage(this.windowsAppConfig, verbose);\n\n this.validateRequiredAppProperties();\n\n const solutionFile = this.getSolutionFile();\n\n const windowsAppProjectConfig = this.windowsAppConfig.project;\n\n this.validateRequiredProjectProperties();\n\n const projectFile = this.getProjectFile();\n\n const projectDir = path.dirname(projectFile);\n const projectLang = windowsAppProjectConfig.projectLang!;\n\n verboseMessage('Parsing dependencies...', verbose);\n\n this.changesNecessary =\n (await this.ensureXAMLDialect()) || this.changesNecessary;\n\n // Generating cs/cpp files for app code consumption\n if (projectLang === 'cs') {\n this.changesNecessary =\n (await this.generateCSAutolinking(\n templateRoot,\n projectLang,\n projectDir,\n )) || this.changesNecessary;\n } else if (projectLang === 'cpp') {\n this.changesNecessary =\n (await this.generateCppAutolinking(\n templateRoot,\n projectLang,\n projectDir,\n )) || this.changesNecessary;\n }\n\n // Generating props for app project consumption\n let propertiesForProps = '';\n let csModuleNames: string[] = [];\n\n if (projectLang === 'cpp') {\n csModuleNames = this.getCSModules();\n\n if (csModuleNames.length > 0) {\n propertiesForProps += `\n <!-- Set due to dependency on C# module(s): ${csModuleNames.join()} -->\n <ConsumeCSharpModules Condition=\"'$(ConsumeCSharpModules)'==''\">true</ConsumeCSharpModules>`;\n }\n }\n\n this.changesNecessary =\n (await this.generateAutolinkProps(\n templateRoot,\n projectDir,\n propertiesForProps,\n )) || this.changesNecessary;\n\n // Generating targets for app project consumption\n this.changesNecessary =\n (await this.generateAutolinkTargets(projectDir, templateRoot)) ||\n this.changesNecessary;\n\n // Generating project entries for solution\n this.changesNecessary =\n this.updateSolution(rnwRoot, solutionFile) || this.changesNecessary;\n\n spinner.succeed();\n }\n\n /**\n * Handles the --proj command-line option by consuming its value into the windowsAppConfig\n */\n public fixUpForProjOption() {\n if (this.options.proj) {\n const projFile = path.join(\n this.windowsAppConfig.folder,\n this.options.proj,\n );\n\n const projectContents = configUtils.readProjectFile(projFile);\n\n this.windowsAppConfig.project = {\n projectFile: path.relative(\n path.join(\n this.windowsAppConfig.folder,\n this.windowsAppConfig.sourceDir,\n ),\n projFile,\n ),\n projectName: configUtils.getProjectName(projFile, projectContents),\n projectLang: configUtils.getProjectLanguage(projFile),\n projectGuid: configUtils.getProjectGuid(projectContents),\n };\n }\n }\n\n /**\n * Handles the --sln command-line option by consuming its value into the windowsAppConfig\n */\n public fixUpForSlnOption() {\n if (this.options.sln) {\n const slnFile = path.join(this.windowsAppConfig.folder, this.options.sln);\n this.windowsAppConfig.solutionFile = path.relative(\n path.join(\n this.windowsAppConfig.folder,\n this.windowsAppConfig.sourceDir,\n ),\n slnFile,\n );\n }\n }\n\n /** Validates the all of the required app (solution) properties are present and valid */\n public validateRequiredAppProperties() {\n const alwaysRequired: Array<keyof WindowsProjectConfig> = [\n 'folder',\n 'sourceDir',\n 'solutionFile',\n 'project',\n ];\n\n alwaysRequired.forEach((item) => {\n if (\n !(item in this.windowsAppConfig) ||\n this.windowsAppConfig[item] === null\n ) {\n throw new CodedError(\n 'IncompleteConfig',\n `${item} is required but not specified by react-native config`,\n {item: item},\n );\n } else if (\n typeof this.windowsAppConfig[item] === 'string' &&\n (this.windowsAppConfig[item] as string).startsWith('Error: ')\n ) {\n throw new CodedError(\n 'InvalidConfig',\n `${item} invalid. ${this.windowsAppConfig[item]}`,\n {item: item},\n );\n }\n });\n }\n\n /** @return the full path to the project file (.vcxproj or .csproj) */\n private getProjectFile() {\n const windowsAppConfig = this.getWindowsConfig();\n return path.join(\n windowsAppConfig.folder,\n windowsAppConfig.sourceDir,\n windowsAppConfig.project.projectFile,\n );\n }\n\n /** Validates that all of the required app _project_ properties are present and valid */\n public validateRequiredProjectProperties() {\n const windowsAppProjectConfig = this.windowsAppConfig.project;\n const projectRequired: Array<keyof Project> = [\n 'projectFile',\n 'projectName',\n 'projectLang',\n 'projectGuid',\n ];\n\n projectRequired.forEach((item) => {\n if (\n !(item in windowsAppProjectConfig) ||\n windowsAppProjectConfig[item] === null\n ) {\n throw new CodedError(\n 'IncompleteConfig',\n `project.${item} is required but not specified by react-native config`,\n {item: item},\n );\n } else if (\n typeof windowsAppProjectConfig[item] === 'string' &&\n windowsAppProjectConfig[item]!.startsWith('Error: ')\n ) {\n throw new CodedError(\n 'InvalidConfig',\n `project.${item} invalid. ${windowsAppProjectConfig[item]}`,\n {item: item},\n );\n }\n });\n }\n\n private async generateCppAutolinking(\n templateRoot: string,\n projectLang: string,\n projectDir: string,\n ) {\n const {cppPackageProviders, cppIncludes} = this.getCppReplacements();\n\n const cppFileName = 'AutolinkedNativeModules.g.cpp';\n\n const srcCppFile = path.join(\n templateRoot,\n `${projectLang}-app`,\n 'src',\n cppFileName,\n );\n\n const destCppFile = path.join(projectDir, cppFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destCppFile))}...`,\n this.options.logging,\n );\n\n const cppContents = generatorCommon.resolveContents(srcCppFile, {\n useMustache: true,\n autolinkCppIncludes: cppIncludes,\n autolinkCppPackageProviders: cppPackageProviders,\n });\n\n return await this.updateFile(destCppFile, cppContents);\n }\n\n public getCppReplacements() {\n let cppIncludes = '';\n let cppPackageProviders = '';\n const windowsDependencies = this.getWindowsDependencies();\n\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency) {\n cppIncludes += `\\n\\n// Includes from ${dependencyName}`;\n project.cppHeaders.forEach((header) => {\n cppIncludes += `\\n#include <${header}>`;\n });\n\n cppPackageProviders += `\\n // IReactPackageProviders from ${dependencyName}`;\n project.cppPackageProviders.forEach((packageProvider) => {\n cppPackageProviders += `\\n packageProviders.Append(winrt::${packageProvider}());`;\n });\n }\n });\n }\n\n if (cppPackageProviders === '') {\n // There are no windows dependencies, this would result in warning. C4100: 'packageProviders': unreferenced formal parameter.\n // therefore add a usage.\n cppPackageProviders = '\\n UNREFERENCED_PARAMETER(packageProviders);'; // CODESYNC: vnext\\local-cli\\generator-windows\\index.js\n }\n return {cppPackageProviders, cppIncludes};\n }\n\n private generateCSAutolinking(\n templateRoot: string,\n projectLang: string,\n projectDir: string,\n ) {\n const {csUsingNamespaces, csReactPackageProviders} =\n this.getCsReplacements();\n\n const csFileName = 'AutolinkedNativeModules.g.cs';\n\n const srcCsFile = path.join(\n templateRoot,\n `${projectLang}-app`,\n 'src',\n csFileName,\n );\n\n const destCsFile = path.join(projectDir, csFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destCsFile))}...`,\n this.options.logging,\n );\n\n const csContents = generatorCommon.resolveContents(srcCsFile, {\n useMustache: true,\n autolinkCsUsingNamespaces: csUsingNamespaces,\n autolinkCsReactPackageProviders: csReactPackageProviders,\n });\n\n return this.updateFile(destCsFile, csContents);\n }\n\n public getCsReplacements() {\n let csUsingNamespaces = '';\n let csReactPackageProviders = '';\n\n const windowsDependencies = this.getWindowsDependencies();\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency) {\n csUsingNamespaces += `\\n\\n// Namespaces from ${dependencyName}`;\n project.csNamespaces.forEach((namespace) => {\n csUsingNamespaces += `\\nusing ${namespace};`;\n });\n\n csReactPackageProviders += `\\n // IReactPackageProviders from ${dependencyName}`;\n project.csPackageProviders.forEach((packageProvider) => {\n csReactPackageProviders += `\\n packageProviders.Add(new ${packageProvider}());`;\n });\n }\n });\n }\n return {csUsingNamespaces, csReactPackageProviders};\n }\n\n /** Cache of dependencies */\n private windowsDependencies:\n | Record<string, WindowsDependencyConfig>\n | undefined;\n\n private getWindowsDependencies() {\n if (!this.windowsDependencies) {\n this.windowsDependencies = {};\n for (const dependencyName of Object.keys(this.dependenciesConfig)) {\n const windowsDependency: WindowsDependencyConfig | undefined =\n this.dependenciesConfig[dependencyName].platforms.windows;\n\n if (windowsDependency) {\n verboseMessage(\n `${chalk.bold(dependencyName)} has Windows implementation, config:`,\n this.options.logging,\n );\n verboseMessage(windowsDependency, this.options.logging);\n\n let dependencyIsValid = false;\n\n const hasValidSourceDir =\n 'sourceDir' in windowsDependency &&\n windowsDependency.sourceDir !== undefined &&\n !windowsDependency.sourceDir.startsWith('Error: ');\n\n const hasProjectsInProjectsArray =\n 'projects' in windowsDependency &&\n Array.isArray(windowsDependency.projects) &&\n windowsDependency.projects.length > 0;\n\n if (hasValidSourceDir && hasProjectsInProjectsArray) {\n // Module is source-based and has projects\n dependencyIsValid = true;\n\n // Validate each source project\n windowsDependency.projects.forEach((project) => {\n const itemsToCheck: Array<keyof ProjectDependency> = [\n 'projectFile',\n 'directDependency',\n ];\n itemsToCheck.forEach((item) => {\n dependencyIsValid = !!(\n dependencyIsValid &&\n item in project &&\n project[item] !== '' &&\n !project[item]!.toString().startsWith('Error: ')\n );\n });\n });\n }\n\n if (dependencyIsValid) {\n verboseMessage(\n `Adding ${chalk.bold(dependencyName)}.`,\n this.options.logging,\n );\n this.windowsDependencies[dependencyName] = windowsDependency;\n } else {\n verboseMessage(\n `Invalid dependency configuration for dependency ${dependencyName}`,\n this.options.logging,\n );\n }\n }\n }\n }\n return this.windowsDependencies;\n }\n\n /**\n * Updates the target file with the expected contents if it's different.\n * @param filePath Path to the target file to update.\n * @param expectedContents The expected contents of the file.\n * @return Whether any changes were necessary.\n */\n protected async updateFile(filePath: string, expectedContents: string) {\n const fileName = chalk.bold(path.basename(filePath));\n verboseMessage(`Reading ${fileName}...`, this.options.logging);\n const actualContents = fs.existsSync(filePath)\n ? (await fs.readFile(filePath)).toString()\n : '';\n\n const contentsChanged = expectedContents !== actualContents;\n\n if (contentsChanged) {\n verboseMessage(\n chalk.yellow(`${fileName} needs to be updated.`),\n this.options.logging,\n );\n if (!this.options.check) {\n verboseMessage(`Writing ${fileName}...`, this.options.logging);\n await fs.writeFile(filePath, expectedContents, {\n encoding: 'utf8',\n flag: 'w',\n });\n }\n } else {\n verboseMessage(`No changes to ${fileName}.`, this.options.logging);\n }\n\n return contentsChanged;\n }\n\n private generateAutolinkTargets(projectDir: string, templateRoot: string) {\n let projectReferencesForTargets = '';\n\n const windowsDependencies = this.getWindowsDependencies();\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency) {\n const dependencyProjectFile = path.join(\n windowsDependencies[dependencyName].folder,\n windowsDependencies[dependencyName].sourceDir!,\n project.projectFile,\n );\n\n const relDependencyProjectFile = path.relative(\n projectDir,\n dependencyProjectFile,\n );\n\n projectReferencesForTargets += `\n <!-- Projects from ${dependencyName} -->\n <ProjectReference Include=\"$(ProjectDir)${relDependencyProjectFile}\">\n <Project>${project.projectGuid}</Project>\n </ProjectReference>`;\n }\n });\n }\n\n const targetFileName = 'AutolinkedNativeModules.g.targets';\n\n const srcTargetFile = path.join(\n templateRoot,\n `shared-app`,\n 'src',\n targetFileName,\n );\n\n const destTargetFile = path.join(projectDir, targetFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destTargetFile))}...`,\n this.options.logging,\n );\n\n const targetContents = generatorCommon.resolveContents(srcTargetFile, {\n useMustache: true,\n autolinkProjectReferencesForTargets: projectReferencesForTargets,\n });\n\n return this.updateFile(destTargetFile, targetContents);\n }\n\n private generateAutolinkProps(\n templateRoot: string,\n projectDir: string,\n propertiesForProps: string,\n ) {\n const propsFileName = 'AutolinkedNativeModules.g.props';\n\n const srcPropsFile = path.join(\n templateRoot,\n `shared-app`,\n 'src',\n propsFileName,\n );\n\n const destPropsFile = path.join(projectDir, propsFileName);\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(destPropsFile))}...`,\n this.options.logging,\n );\n\n const propsContents = generatorCommon.resolveContents(srcPropsFile, {\n useMustache: true,\n autolinkPropertiesForProps: propertiesForProps,\n });\n\n return this.updateFile(destPropsFile, propsContents);\n }\n\n private getCSModules() {\n const csModuleNames: string[] = [];\n const windowsDependencies = this.getWindowsDependencies();\n for (const dependencyName of Object.keys(windowsDependencies)) {\n windowsDependencies[dependencyName].projects.forEach((project) => {\n if (project.directDependency && project.projectLang === 'cs') {\n csModuleNames.push(project.projectName);\n }\n });\n }\n return csModuleNames;\n }\n\n private updateSolution(rnwRoot: string, solutionFile: string) {\n const projectsForSolution: Project[] = [];\n const windowsDependencies = this.getWindowsDependencies();\n\n for (const dependencyName of Object.keys(windowsDependencies)) {\n // Process dependency projects\n windowsDependencies[dependencyName].projects.forEach((project) => {\n const dependencyProjectFile = path.join(\n windowsDependencies[dependencyName].folder,\n windowsDependencies[dependencyName].sourceDir!,\n project.projectFile,\n );\n\n projectsForSolution.push({\n projectFile: dependencyProjectFile,\n projectName: project.projectName,\n projectLang: project.projectLang,\n projectGuid: project.projectGuid,\n });\n });\n }\n\n const csModuleNames = this.getCSModules();\n if (csModuleNames.length > 0) {\n // Add managed projects\n projectsForSolution.push({\n projectFile: path.join(\n rnwRoot,\n 'Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj',\n ),\n projectName: 'Microsoft.ReactNative.Managed',\n projectLang: 'cs',\n projectGuid: '{F2824844-CE15-4242-9420-308923CD76C3}',\n });\n projectsForSolution.push({\n projectFile: path.join(\n rnwRoot,\n 'Microsoft.ReactNative.Managed.CodeGen//Microsoft.ReactNative.Managed.CodeGen.csproj',\n ),\n projectName: 'Microsoft.ReactNative.Managed.CodeGen',\n projectLang: 'cs',\n projectGuid: '{ADED4FBE-887D-4271-AF24-F0823BCE7961}',\n projectTypeGuid: vstools.dotNetCoreProjectTypeGuid,\n });\n }\n\n verboseMessage(\n `Calculating ${chalk.bold(path.basename(solutionFile))} changes...`,\n this.options.logging,\n );\n\n let changesNecessary = false;\n projectsForSolution.forEach((project) => {\n const contentsChanged = vstools.addProjectToSolution(\n solutionFile,\n project,\n this.options.logging,\n this.options.check,\n );\n changesNecessary = changesNecessary || contentsChanged;\n });\n return changesNecessary;\n }\n\n protected getExperimentalFeaturesPropsXml() {\n const experimentalFeaturesProps = path.join(\n path.dirname(this.getSolutionFile()),\n 'ExperimentalFeatures.props',\n );\n if (fs.existsSync(experimentalFeaturesProps)) {\n const experimentalFeaturesContents = configUtils.readProjectFile(\n experimentalFeaturesProps,\n );\n return {\n path: experimentalFeaturesProps,\n content: experimentalFeaturesContents,\n };\n }\n return undefined;\n }\n\n public async ensureXAMLDialect() {\n let changesNeeded = false;\n const useWinUI3FromConfig = this.getWindowsConfig().useWinUI3;\n const experimentalFeatures = this.getExperimentalFeaturesPropsXml();\n if (experimentalFeatures) {\n const useWinUI3FromExperimentalFeatures =\n configUtils\n .tryFindPropertyValue(experimentalFeatures.content, 'UseWinUI3')\n ?.toLowerCase() === 'true';\n // Check if WinUI2xVersion is specified in experimental features\n const targetWinUI2xVersion = configUtils.tryFindPropertyValue(\n experimentalFeatures.content,\n 'WinUI2xVersion',\n );\n // Check if WinUI3Version is specified in experimental features\n const targetWinUI3xVersion = configUtils.tryFindPropertyValue(\n experimentalFeatures.content,\n 'WinUI3Version',\n );\n // Use the UseWinUI3 value in react-native.config.js, or if not present, the value from ExperimentalFeatures.props\n changesNeeded = await this.updatePackagesConfigXAMLDialect(\n useWinUI3FromConfig !== undefined\n ? useWinUI3FromConfig\n : useWinUI3FromExperimentalFeatures,\n targetWinUI2xVersion,\n targetWinUI3xVersion,\n );\n if (useWinUI3FromConfig !== undefined) {\n // Make sure ExperimentalFeatures.props matches the value that comes from react-native.config.js\n const node =\n experimentalFeatures.content.getElementsByTagName('UseWinUI3');\n const newValue = useWinUI3FromConfig ? 'true' : 'false';\n changesNeeded = node.item(0)?.textContent !== newValue || changesNeeded;\n if (!this.options.check && changesNeeded) {\n node.item(0)!.textContent = newValue;\n const experimentalFeaturesOutput =\n new XMLSerializer().serializeToString(experimentalFeatures.content);\n await this.updateFile(\n experimentalFeatures.path,\n experimentalFeaturesOutput,\n );\n }\n }\n }\n return changesNeeded;\n }\n\n protected getPackagesConfigXml() {\n const projectFile = this.getProjectFile();\n const packagesConfig = path.join(\n path.dirname(projectFile),\n 'packages.config',\n );\n\n if (fs.existsSync(packagesConfig)) {\n return {\n path: packagesConfig,\n content: configUtils.readProjectFile(packagesConfig),\n };\n }\n return undefined;\n }\n\n private async updatePackagesConfigXAMLDialect(\n useWinUI3: boolean,\n targetWinUI2xVersion: string | null,\n targetWinUI3xVersion: string | null,\n ) {\n let changed = false;\n const packagesConfig = this.getPackagesConfigXml();\n if (packagesConfig) {\n // if we don't have a packages.config, then this is a C# project, in which case we use <PackageReference> and dynamically pick the right XAML package.\n const project = this.getWindowsConfig();\n\n const winUIPropsPath = path.join(\n resolveRnwRoot(project),\n 'PropertySheets/WinUI.props',\n );\n const winuiPropsContents = configUtils.readProjectFile(winUIPropsPath);\n\n // Use the given WinUI2xVersion, otherwise fallback to WinUI.props\n const winui2xVersion =\n targetWinUI2xVersion ??\n configUtils.tryFindPropertyValue(winuiPropsContents, 'WinUI2xVersion');\n\n // Use the given WinUI3Version, otherwise fallback to WinUI.props\n const winui3Version =\n targetWinUI3xVersion ??\n configUtils.tryFindPropertyValue(winuiPropsContents, 'WinUI3Version');\n\n const dialects = [\n {id: 'Microsoft.WinUI', version: winui3Version!},\n {id: 'Microsoft.UI.Xaml', version: winui2xVersion!},\n ];\n const keepPkg = useWinUI3 ? dialects[0] : dialects[1];\n const removePkg = useWinUI3 ? dialects[1] : dialects[0];\n\n changed = this.updatePackagesConfig(\n packagesConfig,\n [removePkg],\n [keepPkg],\n );\n\n if (!this.options.check && changed) {\n const serializer = new XMLSerializer();\n const output = serializer.serializeToString(packagesConfig.content);\n const formattedXml = formatter(output, {indentation: ' '});\n await this.updateFile(packagesConfig.path, formattedXml);\n }\n }\n return changed;\n }\n\n private updatePackagesConfig(\n packagesConfig: {path: string; content: Document},\n removePkgs: {id: string; version: string}[],\n keepPkgs: {id: string; version: string}[],\n ) {\n let changed = false;\n const packageElements =\n packagesConfig.content.documentElement.getElementsByTagName('package');\n\n const nodesToRemove: Element[] = [];\n\n for (let i = 0; i < packageElements.length; i++) {\n const packageElement = packageElements.item(i)!;\n const idAttr = packageElement!.getAttributeNode('id');\n const id = idAttr!.value;\n const keepPkg = keepPkgs.find((pkg) => pkg.id === id);\n if (removePkgs.find((pkg) => pkg.id === id)) {\n nodesToRemove.push(packageElement);\n changed = true;\n } else if (keepPkg) {\n changed =\n changed || keepPkg.version !== packageElement.getAttribute('version');\n packageElement.setAttribute('version', keepPkg.version!);\n keepPkgs = keepPkgs.filter((pkg) => pkg.id !== keepPkg.id);\n }\n }\n\n nodesToRemove.forEach((pkg) =>\n packagesConfig.content.documentElement.removeChild(pkg),\n );\n\n keepPkgs.forEach((keepPkg) => {\n const newPkg = packagesConfig.content.createElement('package');\n\n Object.entries(keepPkg).forEach(([attr, value]) => {\n newPkg.setAttribute(attr, value as string);\n });\n newPkg.setAttribute('targetFramework', 'native');\n packagesConfig.content.documentElement.appendChild(newPkg);\n changed = true;\n });\n return changed;\n }\n\n /** @return The CLI command to invoke autolink-windows independently */\n public getAutolinkWindowsCommand() {\n const folder = this.windowsAppConfig.folder;\n\n const autolinkCommand = 'npx react-native autolink-windows';\n const autolinkArgs = `--sln \"${path.relative(\n folder,\n this.getSolutionFile(),\n )}\" --proj \"${path.relative(folder, this.getProjectFile())}\"`;\n return `${autolinkCommand} ${autolinkArgs}`;\n }\n}\n\n/**\n * Locates the react-native-windows directory\n * @param config project configuration\n */\nfunction resolveRnwRoot(projectConfig: WindowsProjectConfig) {\n const rnwPackage = path.dirname(\n require.resolve('react-native-windows/package.json', {\n paths: [projectConfig.folder],\n }),\n );\n return rnwPackage;\n}\n\n/**\n * Locates the react-native-windows directory containing template files\n * @param config project configuration\n */\nfunction resolveTemplateRoot(projectConfig: WindowsProjectConfig) {\n const rnwPackage = resolveRnwRoot(projectConfig);\n return path.join(rnwPackage, 'template');\n}\n\n/**\n * Logs the given message if verbose is True.\n * @param message The message to log.\n * @param verbose Whether or not verbose logging is enabled.\n */\nfunction verboseMessage(message: any, verbose?: boolean) {\n if (verbose) {\n console.log(message);\n }\n}\n\n/**\n * Sanitizes the given option for telemetery.\n * @param key The key of the option.\n * @param value The unsanitized value of the option.\n * @returns The sanitized value of the option.\n */\nfunction optionSanitizer(key: keyof AutoLinkOptions, value: any): any {\n // Do not add a default case here.\n // Strings risking PII should just return true if present, false otherwise.\n // All others should return the value (or false if undefined).\n switch (key) {\n case 'sln':\n case 'proj':\n return value === undefined ? false : true; // Strip PII\n case 'logging':\n case 'check':\n case 'telemetry':\n return value === undefined ? false : value; // Return value\n }\n}\n\n/**\n * Get the extra props to add to the `autolink-windows` telemetry event.\n * @returns The extra props.\n */\nasync function getExtraProps(): Promise<Record<string, any>> {\n const extraProps: Record<string, any> = {};\n return extraProps;\n}\n\n/**\n * The function run when calling `react-native autolink-windows`.\n * @param args Unprocessed args passed from react-native CLI.\n * @param config Config passed from react-native CLI.\n * @param options Options passed from react-native CLI.\n */\nasync function autolinkWindows(\n args: string[],\n config: Config,\n options: AutoLinkOptions,\n) {\n await startTelemetrySession(\n 'autolink-windows',\n config,\n options,\n getDefaultOptions(config, autolinkOptions),\n optionSanitizer,\n );\n\n let autolinkWindowsError: Error | undefined;\n try {\n await autolinkWindowsInternal(args, config, options);\n } catch (ex) {\n autolinkWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(autolinkWindowsError);\n }\n\n await endTelemetrySession(autolinkWindowsError, getExtraProps);\n setExitProcessWithError(options.logging, autolinkWindowsError);\n}\n\n/**\n * Performs auto-linking for RNW native modules and apps.\n * @param args Unprocessed args passed from react-native CLI.\n * @param config Config passed from react-native CLI.\n * @param options Options passed from react-native CLI.\n */\nexport async function autolinkWindowsInternal(\n args: string[],\n config: Config,\n options: AutoLinkOptions,\n) {\n const startTime = performance.now();\n const spinner = newSpinner(\n options.check ? 'Checking auto-linked files...' : 'Auto-linking...',\n );\n try {\n const autolink = new AutolinkWindows(\n config.project,\n config.dependencies,\n options,\n );\n await autolink.run(spinner);\n const endTime = performance.now();\n\n if (!autolink.areChangesNeeded()) {\n console.log(\n `${chalk.green(\n 'Success:',\n )} No auto-linking changes necessary. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n } else if (options.check) {\n const autolinkCommand = autolink.getAutolinkWindowsCommand();\n console.log(\n `${chalk.yellow(\n 'Warning:',\n )} Auto-linking changes were necessary but ${chalk.bold(\n '--check',\n )} specified. Run '${chalk.bold(\n `${autolinkCommand}`,\n )}' to apply the changes. (${Math.round(endTime - startTime)}ms)`,\n );\n throw new CodedError(\n 'NeedAutolinking',\n `Auto-linking changes were necessary but --check was specified. Run '${autolinkCommand}' to apply the changes`,\n );\n } else {\n console.log(\n `${chalk.green(\n 'Success:',\n )} Auto-linking changes completed. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n }\n } catch (e) {\n spinner.fail();\n const endTime = performance.now();\n console.log(\n `${chalk.red('Error:')} ${(e as any).toString()}. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n throw e;\n }\n}\n\nexport interface AutoLinkOptions {\n logging?: boolean;\n check?: boolean;\n sln?: string;\n proj?: string;\n telemetry?: boolean;\n}\n\nexport const autolinkOptions: CommandOption[] = [\n {\n name: '--logging',\n description: 'Verbose output logging',\n },\n {\n name: '--check',\n description: 'Only check whether any autolinked files need to change',\n },\n {\n name: '--sln [string]',\n description:\n \"Override the app solution file determined by 'react-native config', e.g. windows\\\\myApp.sln\",\n default: undefined,\n },\n {\n name: '--proj [string]',\n description:\n \"Override the app project file determined by 'react-native config', e.g. windows\\\\myApp\\\\myApp.vcxproj\",\n default: undefined,\n },\n {\n name: '--no-telemetry',\n description:\n 'Disables sending telemetry that allows analysis of usage and failures of the react-native-windows CLI',\n },\n];\n\n/**\n * Performs auto-linking for RNW native modules and apps.\n */\nexport const autoLinkCommand: Command = {\n name: 'autolink-windows',\n description: 'performs autolinking',\n func: autolinkWindows,\n options: autolinkOptions,\n};\n"]}
|
|
@@ -101,8 +101,9 @@ function commandWithProgress(spinner, taskDoingName, command, args, verbose, err
|
|
|
101
101
|
}
|
|
102
102
|
else {
|
|
103
103
|
spinner.fail();
|
|
104
|
-
reject(new telemetry_1.CodedError(errorCategory, `${taskDoingName} - error code ${code}`, {
|
|
105
|
-
|
|
104
|
+
reject(new telemetry_1.CodedError(errorCategory, `${taskDoingName} - exit error code ${code}`, {
|
|
105
|
+
taskName: taskDoingName,
|
|
106
|
+
taskExitCode: code,
|
|
106
107
|
}));
|
|
107
108
|
}
|
|
108
109
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandWithProgress.js","sourceRoot":"","sources":["../../../src/runWindows/utils/commandWithProgress.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {spawn, SpawnOptions} from 'child_process';\nimport ora from 'ora';\nimport spinners from 'cli-spinners';\nimport chalk from 'chalk';\nimport {\n Telemetry,\n CodedError,\n CodedErrors,\n CodedErrorType,\n} from '@react-native-windows/telemetry';\n\nfunction setSpinnerText(spinner: ora.Ora, prefix: string, text: string) {\n text = prefix + spinnerString(text);\n spinner.text = text.length > 45 ? text.slice(0, 110) + '...' : text;\n}\n\nfunction spinnerString(msg: string) {\n msg = msg.trim();\n const lastLineIndex = msg.lastIndexOf('\\n');\n if (lastLineIndex > 0) {\n msg = msg.slice(lastLineIndex + 1);\n }\n msg = msg.trim();\n return msg;\n}\n\nexport function newSpinner(text: string) {\n const options: ora.Options = {\n text: text,\n indent: 1,\n\n // ora turns off emoji rendering by default on windows, since the default terminal\n // doesn't render them. Turn them back on when running in the new windows terminal\n ...(process.env.WT_SESSION && {spinner: spinners.dots}),\n\n // By default, ora process.stderr as the output stream, however,the VS Code debugger\n // Uses stdout to match success patterns\n stream: process.stdout,\n };\n\n return ora(options).start();\n}\n\nexport const powershell = `${process.env.SystemRoot}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\nexport async function runPowerShellScriptFunction(\n taskDescription: string,\n script: string | null,\n funcName: string,\n verbose: boolean,\n errorCategory: CodedErrorType,\n) {\n try {\n const printException = verbose ? '$_;' : '';\n const importScript = script ? `Import-Module \"${script}\"; ` : '';\n await commandWithProgress(\n newSpinner(taskDescription),\n taskDescription,\n powershell,\n [\n '-NoProfile',\n '-ExecutionPolicy',\n 'RemoteSigned',\n `${importScript}try { ${funcName} -ErrorAction Stop; $lec = $LASTEXITCODE; } catch { $lec = 1; ${printException} }; exit $lec`,\n ],\n verbose,\n errorCategory,\n );\n } catch {\n // The error output from the process will be shown if verbose is set.\n // We don't capture the process output if verbose is set, but at least we have the task name in text, so throw that.\n throw new CodedError(errorCategory, taskDescription);\n }\n}\n\nexport function commandWithProgress(\n spinner: ora.Ora,\n taskDoingName: string,\n command: string,\n args: string[],\n verbose: boolean,\n errorCategory: CodedErrorType,\n) {\n return new Promise<void>((resolve, reject) => {\n const spawnOptions: SpawnOptions = verbose ? {stdio: 'inherit'} : {};\n\n if (verbose) {\n spinner.stop();\n }\n\n const cp = spawn(command, args, spawnOptions);\n let firstErrorLine: string | null = null;\n if (!verbose) {\n cp.stdout!.on('data', (chunk) => {\n const text = chunk.toString();\n setSpinnerText(spinner, taskDoingName + ': ', text);\n });\n cp.stderr!.on('data', (chunk) => {\n const text: string = chunk.toString();\n if (!firstErrorLine) {\n firstErrorLine = text;\n }\n if (text) {\n setSpinnerText(spinner, taskDoingName + ': ERROR: ', firstErrorLine);\n }\n reject(\n new CodedError(errorCategory, firstErrorLine, {\n taskName: taskDoingName,\n }),\n );\n });\n }\n cp.on('error', (e) => {\n if (verbose) {\n console.error(chalk.red(e.toString()));\n }\n spinner.fail(e.toString());\n const ce = new CodedError(errorCategory, e.message);\n ce.stack = e.stack;\n reject(ce);\n }).on('close', (code) => {\n if (code === 0) {\n spinner.succeed(taskDoingName);\n resolve();\n } else {\n spinner.fail();\n reject(\n new CodedError(\n errorCategory,\n `${taskDoingName} - error code ${code}`,\n {\n errorCode: code,\n },\n ),\n );\n }\n });\n });\n}\n\nexport function newError(text: string) {\n newSpinner(text).fail(text);\n}\n\nexport function newWarn(text: string) {\n newSpinner(text).warn(text);\n}\n\nexport function newSuccess(text: string) {\n newSpinner(text).succeed(text);\n}\n\nexport function newInfo(text: string) {\n newSpinner(text).info(text);\n}\n\n/**\n * Sets the process exit code and offers some information at the end of a CLI command.\n * @param loggingIsEnabled Is verbose logging enabled.\n * @param error The error caught during the process, if any.\n */\nexport function setExitProcessWithError(\n loggingIsEnabled?: boolean,\n error?: Error,\n): void {\n if (error) {\n const errorType =\n error instanceof CodedError ? (error as CodedError).type : 'Unknown';\n\n process.exitCode = CodedErrors[errorType];\n\n if (loggingIsEnabled) {\n console.log(\n `Command failed with error ${chalk.bold(errorType)}: ${error.message}`,\n );\n if (Telemetry.isEnabled()) {\n console.log(\n `Your telemetry sessionId was ${chalk.bold(\n Telemetry.getSessionId(),\n )}`,\n );\n }\n } else {\n console.log(\n `Command failed. Re-run the command with ${chalk.bold(\n '--logging',\n )} for more information.`,\n );\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"commandWithProgress.js","sourceRoot":"","sources":["../../../src/runWindows/utils/commandWithProgress.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {spawn, SpawnOptions} from 'child_process';\nimport ora from 'ora';\nimport spinners from 'cli-spinners';\nimport chalk from 'chalk';\nimport {\n Telemetry,\n CodedError,\n CodedErrors,\n CodedErrorType,\n} from '@react-native-windows/telemetry';\n\nfunction setSpinnerText(spinner: ora.Ora, prefix: string, text: string) {\n text = prefix + spinnerString(text);\n spinner.text = text.length > 45 ? text.slice(0, 110) + '...' : text;\n}\n\nfunction spinnerString(msg: string) {\n msg = msg.trim();\n const lastLineIndex = msg.lastIndexOf('\\n');\n if (lastLineIndex > 0) {\n msg = msg.slice(lastLineIndex + 1);\n }\n msg = msg.trim();\n return msg;\n}\n\nexport function newSpinner(text: string) {\n const options: ora.Options = {\n text: text,\n indent: 1,\n\n // ora turns off emoji rendering by default on windows, since the default terminal\n // doesn't render them. Turn them back on when running in the new windows terminal\n ...(process.env.WT_SESSION && {spinner: spinners.dots}),\n\n // By default, ora process.stderr as the output stream, however,the VS Code debugger\n // Uses stdout to match success patterns\n stream: process.stdout,\n };\n\n return ora(options).start();\n}\n\nexport const powershell = `${process.env.SystemRoot}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\nexport async function runPowerShellScriptFunction(\n taskDescription: string,\n script: string | null,\n funcName: string,\n verbose: boolean,\n errorCategory: CodedErrorType,\n) {\n try {\n const printException = verbose ? '$_;' : '';\n const importScript = script ? `Import-Module \"${script}\"; ` : '';\n await commandWithProgress(\n newSpinner(taskDescription),\n taskDescription,\n powershell,\n [\n '-NoProfile',\n '-ExecutionPolicy',\n 'RemoteSigned',\n `${importScript}try { ${funcName} -ErrorAction Stop; $lec = $LASTEXITCODE; } catch { $lec = 1; ${printException} }; exit $lec`,\n ],\n verbose,\n errorCategory,\n );\n } catch {\n // The error output from the process will be shown if verbose is set.\n // We don't capture the process output if verbose is set, but at least we have the task name in text, so throw that.\n throw new CodedError(errorCategory, taskDescription);\n }\n}\n\nexport function commandWithProgress(\n spinner: ora.Ora,\n taskDoingName: string,\n command: string,\n args: string[],\n verbose: boolean,\n errorCategory: CodedErrorType,\n) {\n return new Promise<void>((resolve, reject) => {\n const spawnOptions: SpawnOptions = verbose ? {stdio: 'inherit'} : {};\n\n if (verbose) {\n spinner.stop();\n }\n\n const cp = spawn(command, args, spawnOptions);\n let firstErrorLine: string | null = null;\n if (!verbose) {\n cp.stdout!.on('data', (chunk) => {\n const text = chunk.toString();\n setSpinnerText(spinner, taskDoingName + ': ', text);\n });\n cp.stderr!.on('data', (chunk) => {\n const text: string = chunk.toString();\n if (!firstErrorLine) {\n firstErrorLine = text;\n }\n if (text) {\n setSpinnerText(spinner, taskDoingName + ': ERROR: ', firstErrorLine);\n }\n reject(\n new CodedError(errorCategory, firstErrorLine, {\n taskName: taskDoingName,\n }),\n );\n });\n }\n cp.on('error', (e) => {\n if (verbose) {\n console.error(chalk.red(e.toString()));\n }\n spinner.fail(e.toString());\n const ce = new CodedError(errorCategory, e.message);\n ce.stack = e.stack;\n reject(ce);\n }).on('close', (code) => {\n if (code === 0) {\n spinner.succeed(taskDoingName);\n resolve();\n } else {\n spinner.fail();\n reject(\n new CodedError(\n errorCategory,\n `${taskDoingName} - exit error code ${code}`,\n {\n taskName: taskDoingName,\n taskExitCode: code,\n },\n ),\n );\n }\n });\n });\n}\n\nexport function newError(text: string) {\n newSpinner(text).fail(text);\n}\n\nexport function newWarn(text: string) {\n newSpinner(text).warn(text);\n}\n\nexport function newSuccess(text: string) {\n newSpinner(text).succeed(text);\n}\n\nexport function newInfo(text: string) {\n newSpinner(text).info(text);\n}\n\n/**\n * Sets the process exit code and offers some information at the end of a CLI command.\n * @param loggingIsEnabled Is verbose logging enabled.\n * @param error The error caught during the process, if any.\n */\nexport function setExitProcessWithError(\n loggingIsEnabled?: boolean,\n error?: Error,\n): void {\n if (error) {\n const errorType =\n error instanceof CodedError ? (error as CodedError).type : 'Unknown';\n\n process.exitCode = CodedErrors[errorType];\n\n if (loggingIsEnabled) {\n console.log(\n `Command failed with error ${chalk.bold(errorType)}: ${error.message}`,\n );\n if (Telemetry.isEnabled()) {\n console.log(\n `Your telemetry sessionId was ${chalk.bold(\n Telemetry.getSessionId(),\n )}`,\n );\n }\n } else {\n console.log(\n `Command failed. Re-run the command with ${chalk.bold(\n '--logging',\n )} for more information.`,\n );\n }\n }\n}\n"]}
|
|
@@ -128,12 +128,23 @@ class MSBuildTools {
|
|
|
128
128
|
}
|
|
129
129
|
catch (e) {
|
|
130
130
|
let error = e;
|
|
131
|
-
if (
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
131
|
+
if (e instanceof telemetry_1.CodedError) {
|
|
132
|
+
const origCodedError = e;
|
|
133
|
+
if (origCodedError.type === 'MSBuildError') {
|
|
134
|
+
// Try to parse msbuild errors from errorLog
|
|
135
|
+
const errorLogContents = (await fs_1.default.readFile(errorLog))
|
|
136
|
+
.toString()
|
|
137
|
+
.split(os_1.EOL)
|
|
138
|
+
.filter((s) => s)
|
|
139
|
+
.map((s) => s.trim());
|
|
140
|
+
if (errorLogContents.length > 0) {
|
|
141
|
+
const firstMessage = errorLogContents[0];
|
|
142
|
+
error = new telemetry_1.CodedError('MSBuildError', firstMessage, origCodedError.data);
|
|
143
|
+
// Hide error messages in a field that won't automatically get reported
|
|
144
|
+
// with telemetry but is still available to be parsed and sanitized
|
|
145
|
+
error.msBuildErrorMessages = errorLogContents;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
137
148
|
}
|
|
138
149
|
throw error;
|
|
139
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msbuildtools.js","sourceRoot":"","sources":["../../../src/runWindows/utils/msbuildtools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {totalmem, EOL} from 'os';\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport child_process from 'child_process';\nimport chalk from 'chalk';\nimport os from 'os';\nimport shell from 'shelljs';\nimport Version from './version';\nimport * as checkRequirements from './checkRequirements';\nimport {\n commandWithProgress,\n newInfo,\n newSpinner,\n newSuccess,\n newError,\n powershell,\n} from './commandWithProgress';\nimport {execSync} from 'child_process';\nimport {BuildArch, BuildConfig} from '../runWindowsOptions';\nimport {findLatestVsInstall} from './vsInstalls';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nexport default class MSBuildTools {\n /**\n * @param version is something like 16.0 for 2019\n * @param installationPath Path to installation root\n * @param installationVersion is the full version e.g. 16.3.29411.108\n */\n constructor(\n public readonly version: string,\n public readonly installationPath: string,\n public readonly installationVersion: string,\n ) {}\n\n /**\n * @returns directory where x86 msbuild can be found\n */\n msbuildPath() {\n return path.join(this.installationPath, 'MSBuild/Current/Bin');\n }\n\n cleanProject(slnFile: string) {\n const cmd = `\"${path.join(\n this.msbuildPath(),\n 'msbuild.exe',\n )}\" \"${slnFile}\" /t:Clean`;\n const results = child_process.execSync(cmd).toString().split(EOL);\n results.forEach((result) => console.log(chalk.white(result)));\n }\n\n async restorePackageConfigs(\n slnFile: any,\n buildArch: BuildArch,\n buildType: BuildConfig,\n ) {\n const text = 'Restoring NuGet packages ';\n const spinner = newSpinner(text);\n await commandWithProgress(\n spinner,\n text,\n path.join(this.msbuildPath(), 'msbuild.exe'),\n [\n slnFile,\n '/t:Restore',\n '/p:RestoreProjectStyle=PackagesConfig',\n '/p:RestorePackagesConfig=true',\n `/p:Platform=${buildArch}`,\n `/p:Configuration=${buildType}`,\n ],\n true,\n 'MSBuildError',\n );\n }\n\n async buildProject(\n slnFile: string,\n buildType: BuildConfig,\n buildArch: BuildArch,\n msBuildProps: Record<string, string>,\n verbose: boolean,\n target: 'build' | 'deploy',\n buildLogDirectory: string | undefined,\n singleproc?: boolean,\n ) {\n newSuccess(`Found Solution: ${slnFile}`);\n newInfo(`Build configuration: ${buildType}`);\n newInfo(`Build platform: ${buildArch}`);\n\n const verbosityOption = verbose ? 'normal' : 'minimal';\n const logPrefix = path.join(\n buildLogDirectory || os.tmpdir(),\n `msbuild_${process.pid}_${target}`,\n );\n\n const errorLog = logPrefix + '.err';\n const warnLog = logPrefix + '.wrn';\n\n const localBinLog = target === 'build' ? '' : ':deploy.binlog';\n const binlog = buildLogDirectory ? `:${logPrefix}.binlog` : localBinLog;\n\n const args = [\n `/clp:NoSummary;NoItemAndPropertyList;Verbosity=${verbosityOption}`,\n '/nologo',\n `/p:Configuration=${buildType}`,\n `/p:Platform=${buildArch}`,\n '/p:AppxBundle=Never',\n `/bl${binlog}`,\n `/flp1:errorsonly;logfile=${errorLog}`,\n `/flp2:warningsonly;logfile=${warnLog}`,\n ];\n\n // Building projects in parallel increases compiler memory usage and\n // doesn't lead to dramatic performance gains (See #4739). Only enable\n // parallel builds on machines with >16GB of memory to avoid OOM errors\n const highMemory = totalmem() > 16 * 1024 * 1024 * 1024;\n const enableParallelBuilds = singleproc === false || highMemory;\n\n if (enableParallelBuilds) {\n args.push('/maxCpuCount');\n }\n\n if (target === 'build') {\n args.push('/restore', '/p:RestorePackagesConfig=true');\n } else {\n args.push(`/t:Deploy`);\n }\n\n Object.keys(msBuildProps).forEach((key) => {\n args.push(`/p:${key}=${msBuildProps[key]}`);\n });\n\n try {\n checkRequirements.isWinSdkPresent('10.0');\n } catch (e) {\n newError((e as Error).message);\n throw e;\n }\n\n if (verbose) {\n console.log(`Running MSBuild with args ${args.join(' ')}`);\n }\n\n const progressName =\n target === 'deploy' ? 'Deploying Solution' : 'Building Solution';\n const spinner = newSpinner(progressName);\n try {\n await commandWithProgress(\n spinner,\n progressName,\n path.join(this.msbuildPath(), 'msbuild.exe'),\n [slnFile].concat(args),\n verbose,\n 'MSBuildError',\n );\n } catch (e) {\n let error = e;\n if (!e) {\n const firstMessage = (await fs.readFile(errorLog))\n .toString()\n .split(EOL)[0];\n error = new CodedError('MSBuildError', firstMessage);\n (error as any).logfile = errorLog;\n }\n throw error;\n }\n // If we have no errors, delete the error log when we're done\n if ((await fs.stat(errorLog)).size === 0) {\n await fs.unlink(errorLog);\n }\n }\n\n static findAvailableVersion(\n buildArch: BuildArch,\n verbose: boolean,\n prerelease?: boolean,\n ): MSBuildTools {\n // https://aka.ms/vs/workloads\n const requires = [\n 'Microsoft.Component.MSBuild',\n getVCToolsByArch(buildArch),\n ];\n const minVersion = process.env.VisualStudioVersion || '16.7';\n const vsInstallation = findLatestVsInstall({\n requires,\n minVersion,\n verbose,\n prerelease,\n });\n\n if (!vsInstallation) {\n if (process.env.VisualStudioVersion != null) {\n throw new CodedError(\n 'NoMSBuild',\n `MSBuild tools not found for version ${process.env.VisualStudioVersion} (from environment). Make sure all required components have been installed`,\n {VisualStudioVersionFromEnv: process.env.VisualStudioVersion},\n );\n } else {\n throw new CodedError(\n 'NoMSBuild',\n `Could not find MSBuild with VCTools for Visual Studio ${minVersion} or later. Make sure all required components have been installed`,\n {minVersion: minVersion},\n );\n }\n }\n\n const toolsPath = path.join(\n vsInstallation.installationPath,\n 'MSBuild/Current/Bin',\n );\n\n if (fs.existsSync(toolsPath)) {\n if (verbose) {\n newSuccess(\n `Found compatible MSBuild at ${toolsPath} (${vsInstallation.installationVersion})`,\n );\n }\n return new MSBuildTools(\n minVersion,\n vsInstallation.installationPath,\n vsInstallation.installationVersion,\n );\n } else {\n throw new CodedError(\n 'NoMSBuild',\n `MSBuild path '${toolsPath} does not exist'`,\n );\n }\n }\n\n static getAllAvailableUAPVersions(): Version[] {\n const results: Version[] = [];\n\n const programFilesFolder =\n process.env['ProgramFiles(x86)'] || process.env.ProgramFiles;\n // No Program Files folder found, so we won't be able to find UAP SDK\n if (!programFilesFolder) {\n return results;\n }\n\n let uapFolderPath = path.join(\n programFilesFolder,\n 'Windows Kits',\n '10',\n 'Platforms',\n 'UAP',\n );\n\n if (!shell.test('-e', uapFolderPath)) {\n // Check other installation folder from reg\n const sdkFolder = getSDK10InstallationFolder();\n if (sdkFolder) {\n uapFolderPath = path.join(sdkFolder, 'Platforms', 'UAP');\n }\n }\n\n // No UAP SDK exists on this machine\n if (!shell.test('-e', uapFolderPath)) {\n return results;\n }\n\n shell\n .ls(uapFolderPath)\n .filter((uapDir) => shell.test('-d', path.join(uapFolderPath, uapDir)))\n .map(Version.tryParse)\n .forEach((version) => version && results.push(version));\n\n return results;\n }\n\n evaluateMSBuildProperties(\n solutionFile: string,\n projectFile: string,\n propertyNames?: string[],\n extraMsBuildProps?: Record<string, string>,\n ): Record<string, string> {\n const spinner = newSpinner('Running Eval-MsBuildProperties.ps1');\n\n try {\n const msbuildEvalScriptPath = path.resolve(\n __dirname,\n '..',\n '..',\n '..',\n 'powershell',\n 'Eval-MsBuildProperties.ps1',\n );\n\n let command = `${powershell} -ExecutionPolicy Unrestricted -NoProfile \"${msbuildEvalScriptPath}\" -SolutionFile '${solutionFile}' -ProjectFile '${projectFile}' -MSBuildPath '${this.msbuildPath()}'`;\n\n if (propertyNames && propertyNames.length > 0) {\n command += ` -PropertyNames '${propertyNames.join(',')}'`;\n }\n\n if (extraMsBuildProps) {\n command += \" -ExtraMSBuildProps '\";\n for (const extraProp in extraMsBuildProps) {\n if (!(extraProp in Object.prototype)) {\n command += `,${extraProp}=${extraMsBuildProps[extraProp]}`;\n }\n }\n command += \"'\";\n }\n\n const commandOutput = execSync(command).toString();\n spinner.succeed();\n\n const properties = JSON.parse(commandOutput) as Record<string, string>;\n spinner.succeed();\n return properties;\n } catch (e) {\n spinner.fail(\n 'Running Eval-MsBuildProperties.ps1 failed: ' + (e as Error).message,\n );\n throw e;\n }\n }\n}\n\nfunction getVCToolsByArch(buildArch: BuildArch): string {\n switch (buildArch) {\n case 'x86':\n case 'x64':\n return 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64';\n case 'ARM64':\n return 'Microsoft.VisualStudio.Component.VC.Tools.ARM64';\n }\n}\n\nfunction getSDK10InstallationFolder(): string {\n const folder = '';\n\n const execString =\n 'reg query \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v10.0\" /s /v InstallationFolder /reg:32';\n let output;\n try {\n output = execSync(execString).toString();\n } catch (e) {\n return folder;\n }\n\n const re =\n /\\\\Microsoft SDKs\\\\Windows\\\\v10.0\\s*InstallationFolder\\s+REG_SZ\\s+(.*)/gim;\n const match = re.exec(output);\n if (match) {\n return match[1];\n }\n\n return folder;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"msbuildtools.js","sourceRoot":"","sources":["../../../src/runWindows/utils/msbuildtools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {totalmem, EOL} from 'os';\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport child_process from 'child_process';\nimport chalk from 'chalk';\nimport os from 'os';\nimport shell from 'shelljs';\nimport Version from './version';\nimport * as checkRequirements from './checkRequirements';\nimport {\n commandWithProgress,\n newInfo,\n newSpinner,\n newSuccess,\n newError,\n powershell,\n} from './commandWithProgress';\nimport {execSync} from 'child_process';\nimport {BuildArch, BuildConfig} from '../runWindowsOptions';\nimport {findLatestVsInstall} from './vsInstalls';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nexport default class MSBuildTools {\n /**\n * @param version is something like 16.0 for 2019\n * @param installationPath Path to installation root\n * @param installationVersion is the full version e.g. 16.3.29411.108\n */\n constructor(\n public readonly version: string,\n public readonly installationPath: string,\n public readonly installationVersion: string,\n ) {}\n\n /**\n * @returns directory where x86 msbuild can be found\n */\n msbuildPath() {\n return path.join(this.installationPath, 'MSBuild/Current/Bin');\n }\n\n cleanProject(slnFile: string) {\n const cmd = `\"${path.join(\n this.msbuildPath(),\n 'msbuild.exe',\n )}\" \"${slnFile}\" /t:Clean`;\n const results = child_process.execSync(cmd).toString().split(EOL);\n results.forEach((result) => console.log(chalk.white(result)));\n }\n\n async restorePackageConfigs(\n slnFile: any,\n buildArch: BuildArch,\n buildType: BuildConfig,\n ) {\n const text = 'Restoring NuGet packages ';\n const spinner = newSpinner(text);\n await commandWithProgress(\n spinner,\n text,\n path.join(this.msbuildPath(), 'msbuild.exe'),\n [\n slnFile,\n '/t:Restore',\n '/p:RestoreProjectStyle=PackagesConfig',\n '/p:RestorePackagesConfig=true',\n `/p:Platform=${buildArch}`,\n `/p:Configuration=${buildType}`,\n ],\n true,\n 'MSBuildError',\n );\n }\n\n async buildProject(\n slnFile: string,\n buildType: BuildConfig,\n buildArch: BuildArch,\n msBuildProps: Record<string, string>,\n verbose: boolean,\n target: 'build' | 'deploy',\n buildLogDirectory: string | undefined,\n singleproc?: boolean,\n ) {\n newSuccess(`Found Solution: ${slnFile}`);\n newInfo(`Build configuration: ${buildType}`);\n newInfo(`Build platform: ${buildArch}`);\n\n const verbosityOption = verbose ? 'normal' : 'minimal';\n const logPrefix = path.join(\n buildLogDirectory || os.tmpdir(),\n `msbuild_${process.pid}_${target}`,\n );\n\n const errorLog = logPrefix + '.err';\n const warnLog = logPrefix + '.wrn';\n\n const localBinLog = target === 'build' ? '' : ':deploy.binlog';\n const binlog = buildLogDirectory ? `:${logPrefix}.binlog` : localBinLog;\n\n const args = [\n `/clp:NoSummary;NoItemAndPropertyList;Verbosity=${verbosityOption}`,\n '/nologo',\n `/p:Configuration=${buildType}`,\n `/p:Platform=${buildArch}`,\n '/p:AppxBundle=Never',\n `/bl${binlog}`,\n `/flp1:errorsonly;logfile=${errorLog}`,\n `/flp2:warningsonly;logfile=${warnLog}`,\n ];\n\n // Building projects in parallel increases compiler memory usage and\n // doesn't lead to dramatic performance gains (See #4739). Only enable\n // parallel builds on machines with >16GB of memory to avoid OOM errors\n const highMemory = totalmem() > 16 * 1024 * 1024 * 1024;\n const enableParallelBuilds = singleproc === false || highMemory;\n\n if (enableParallelBuilds) {\n args.push('/maxCpuCount');\n }\n\n if (target === 'build') {\n args.push('/restore', '/p:RestorePackagesConfig=true');\n } else {\n args.push(`/t:Deploy`);\n }\n\n Object.keys(msBuildProps).forEach((key) => {\n args.push(`/p:${key}=${msBuildProps[key]}`);\n });\n\n try {\n checkRequirements.isWinSdkPresent('10.0');\n } catch (e) {\n newError((e as Error).message);\n throw e;\n }\n\n if (verbose) {\n console.log(`Running MSBuild with args ${args.join(' ')}`);\n }\n\n const progressName =\n target === 'deploy' ? 'Deploying Solution' : 'Building Solution';\n const spinner = newSpinner(progressName);\n try {\n await commandWithProgress(\n spinner,\n progressName,\n path.join(this.msbuildPath(), 'msbuild.exe'),\n [slnFile].concat(args),\n verbose,\n 'MSBuildError',\n );\n } catch (e) {\n let error = e;\n if (e instanceof CodedError) {\n const origCodedError = e as CodedError;\n if (origCodedError.type === 'MSBuildError') {\n // Try to parse msbuild errors from errorLog\n const errorLogContents = (await fs.readFile(errorLog))\n .toString()\n .split(EOL)\n .filter((s) => s)\n .map((s) => s.trim());\n if (errorLogContents.length > 0) {\n const firstMessage = errorLogContents[0];\n error = new CodedError(\n 'MSBuildError',\n firstMessage,\n origCodedError.data,\n );\n // Hide error messages in a field that won't automatically get reported\n // with telemetry but is still available to be parsed and sanitized\n (error as any).msBuildErrorMessages = errorLogContents;\n }\n }\n }\n throw error;\n }\n // If we have no errors, delete the error log when we're done\n if ((await fs.stat(errorLog)).size === 0) {\n await fs.unlink(errorLog);\n }\n }\n\n static findAvailableVersion(\n buildArch: BuildArch,\n verbose: boolean,\n prerelease?: boolean,\n ): MSBuildTools {\n // https://aka.ms/vs/workloads\n const requires = [\n 'Microsoft.Component.MSBuild',\n getVCToolsByArch(buildArch),\n ];\n const minVersion = process.env.VisualStudioVersion || '16.7';\n const vsInstallation = findLatestVsInstall({\n requires,\n minVersion,\n verbose,\n prerelease,\n });\n\n if (!vsInstallation) {\n if (process.env.VisualStudioVersion != null) {\n throw new CodedError(\n 'NoMSBuild',\n `MSBuild tools not found for version ${process.env.VisualStudioVersion} (from environment). Make sure all required components have been installed`,\n {VisualStudioVersionFromEnv: process.env.VisualStudioVersion},\n );\n } else {\n throw new CodedError(\n 'NoMSBuild',\n `Could not find MSBuild with VCTools for Visual Studio ${minVersion} or later. Make sure all required components have been installed`,\n {minVersion: minVersion},\n );\n }\n }\n\n const toolsPath = path.join(\n vsInstallation.installationPath,\n 'MSBuild/Current/Bin',\n );\n\n if (fs.existsSync(toolsPath)) {\n if (verbose) {\n newSuccess(\n `Found compatible MSBuild at ${toolsPath} (${vsInstallation.installationVersion})`,\n );\n }\n return new MSBuildTools(\n minVersion,\n vsInstallation.installationPath,\n vsInstallation.installationVersion,\n );\n } else {\n throw new CodedError(\n 'NoMSBuild',\n `MSBuild path '${toolsPath} does not exist'`,\n );\n }\n }\n\n static getAllAvailableUAPVersions(): Version[] {\n const results: Version[] = [];\n\n const programFilesFolder =\n process.env['ProgramFiles(x86)'] || process.env.ProgramFiles;\n // No Program Files folder found, so we won't be able to find UAP SDK\n if (!programFilesFolder) {\n return results;\n }\n\n let uapFolderPath = path.join(\n programFilesFolder,\n 'Windows Kits',\n '10',\n 'Platforms',\n 'UAP',\n );\n\n if (!shell.test('-e', uapFolderPath)) {\n // Check other installation folder from reg\n const sdkFolder = getSDK10InstallationFolder();\n if (sdkFolder) {\n uapFolderPath = path.join(sdkFolder, 'Platforms', 'UAP');\n }\n }\n\n // No UAP SDK exists on this machine\n if (!shell.test('-e', uapFolderPath)) {\n return results;\n }\n\n shell\n .ls(uapFolderPath)\n .filter((uapDir) => shell.test('-d', path.join(uapFolderPath, uapDir)))\n .map(Version.tryParse)\n .forEach((version) => version && results.push(version));\n\n return results;\n }\n\n evaluateMSBuildProperties(\n solutionFile: string,\n projectFile: string,\n propertyNames?: string[],\n extraMsBuildProps?: Record<string, string>,\n ): Record<string, string> {\n const spinner = newSpinner('Running Eval-MsBuildProperties.ps1');\n\n try {\n const msbuildEvalScriptPath = path.resolve(\n __dirname,\n '..',\n '..',\n '..',\n 'powershell',\n 'Eval-MsBuildProperties.ps1',\n );\n\n let command = `${powershell} -ExecutionPolicy Unrestricted -NoProfile \"${msbuildEvalScriptPath}\" -SolutionFile '${solutionFile}' -ProjectFile '${projectFile}' -MSBuildPath '${this.msbuildPath()}'`;\n\n if (propertyNames && propertyNames.length > 0) {\n command += ` -PropertyNames '${propertyNames.join(',')}'`;\n }\n\n if (extraMsBuildProps) {\n command += \" -ExtraMSBuildProps '\";\n for (const extraProp in extraMsBuildProps) {\n if (!(extraProp in Object.prototype)) {\n command += `,${extraProp}=${extraMsBuildProps[extraProp]}`;\n }\n }\n command += \"'\";\n }\n\n const commandOutput = execSync(command).toString();\n spinner.succeed();\n\n const properties = JSON.parse(commandOutput) as Record<string, string>;\n spinner.succeed();\n return properties;\n } catch (e) {\n spinner.fail(\n 'Running Eval-MsBuildProperties.ps1 failed: ' + (e as Error).message,\n );\n throw e;\n }\n }\n}\n\nfunction getVCToolsByArch(buildArch: BuildArch): string {\n switch (buildArch) {\n case 'x86':\n case 'x64':\n return 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64';\n case 'ARM64':\n return 'Microsoft.VisualStudio.Component.VC.Tools.ARM64';\n }\n}\n\nfunction getSDK10InstallationFolder(): string {\n const folder = '';\n\n const execString =\n 'reg query \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v10.0\" /s /v InstallationFolder /reg:32';\n let output;\n try {\n output = execSync(execString).toString();\n } catch (e) {\n return folder;\n }\n\n const re =\n /\\\\Microsoft SDKs\\\\Windows\\\\v10.0\\s*InstallationFolder\\s+REG_SZ\\s+(.*)/gim;\n const match = re.exec(output);\n if (match) {\n return match[1];\n }\n\n return folder;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-windows/cli",
|
|
3
|
-
"version": "0.68.
|
|
3
|
+
"version": "0.68.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"watch": "rnw-scripts watch"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@react-native-windows/fs": "0.68.
|
|
21
|
-
"@react-native-windows/package-utils": "0.68.
|
|
22
|
-
"@react-native-windows/telemetry": "0.68.
|
|
20
|
+
"@react-native-windows/fs": "0.68.1",
|
|
21
|
+
"@react-native-windows/package-utils": "0.68.1",
|
|
22
|
+
"@react-native-windows/telemetry": "0.68.3",
|
|
23
23
|
"@xmldom/xmldom": "^0.7.5",
|
|
24
24
|
"chalk": "^4.1.0",
|
|
25
25
|
"cli-spinners": "^2.2.0",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"powershell"
|
|
69
69
|
],
|
|
70
70
|
"beachball": {
|
|
71
|
-
"defaultNpmTag": "
|
|
71
|
+
"defaultNpmTag": "v0.68-stable",
|
|
72
72
|
"disallowedChangeTypes": [
|
|
73
73
|
"major",
|
|
74
74
|
"minor",
|