@react-native-windows/cli 0.66.0-preview.2 → 0.66.3
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/CHANGELOG.json +61 -1
- package/CHANGELOG.md +37 -5
- package/lib-commonjs/runWindows/utils/autolink.d.ts +1 -1
- package/lib-commonjs/runWindows/utils/autolink.js +2 -3
- package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
- package/lib-commonjs/runWindows/utils/vstools.js +4 -5
- package/lib-commonjs/runWindows/utils/vstools.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,67 @@
|
|
|
2
2
|
"name": "@react-native-windows/cli",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "Mon,
|
|
5
|
+
"date": "Mon, 21 Feb 2022 16:09:24 GMT",
|
|
6
|
+
"tag": "@react-native-windows/cli_v0.66.3",
|
|
7
|
+
"version": "0.66.3",
|
|
8
|
+
"comments": {
|
|
9
|
+
"patch": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "[0.66] fix(cli): fix cache not being used when there are no dependencies",
|
|
12
|
+
"author": "jthysell@microsoft.com",
|
|
13
|
+
"commit": "27bb0026bd74e3ad2af62a11160e8c7c8eaf29d2",
|
|
14
|
+
"package": "@react-native-windows/cli"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"date": "Mon, 24 Jan 2022 16:11:33 GMT",
|
|
21
|
+
"tag": "@react-native-windows/cli_v0.66.2",
|
|
22
|
+
"version": "0.66.2",
|
|
23
|
+
"comments": {
|
|
24
|
+
"patch": [
|
|
25
|
+
{
|
|
26
|
+
"comment": "Promote 0.66 to legacy",
|
|
27
|
+
"author": "ngerlem@microsoft.com",
|
|
28
|
+
"commit": "919d91a3e9845f9a60417fb8e47a36d7caedbc28",
|
|
29
|
+
"package": "@react-native-windows/cli"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"date": "Mon, 15 Nov 2021 16:09:53 GMT",
|
|
36
|
+
"tag": "@react-native-windows/cli_v0.66.1",
|
|
37
|
+
"version": "0.66.1",
|
|
38
|
+
"comments": {
|
|
39
|
+
"patch": [
|
|
40
|
+
{
|
|
41
|
+
"comment": "[0.66] Fix autolinking to support solution files using LF instead of CRLF",
|
|
42
|
+
"author": "jthysell@microsoft.com",
|
|
43
|
+
"commit": "b05dda932a79521caca4d581eaf66526ab5d6051",
|
|
44
|
+
"package": "@react-native-windows/cli"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"date": "Mon, 11 Oct 2021 15:07:19 GMT",
|
|
51
|
+
"tag": "@react-native-windows/cli_v0.66.0",
|
|
52
|
+
"version": "0.66.0",
|
|
53
|
+
"comments": {
|
|
54
|
+
"patch": [
|
|
55
|
+
{
|
|
56
|
+
"comment": "Promote 0.66 to latest",
|
|
57
|
+
"author": "ngerlem@microsoft.com",
|
|
58
|
+
"commit": "5d1e5ae98139204e02f0ac5d8c06ae7ee1157395",
|
|
59
|
+
"package": "@react-native-windows/cli"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"date": "Mon, 04 Oct 2021 15:07:37 GMT",
|
|
6
66
|
"tag": "@react-native-windows/cli_v0.66.0-preview.2",
|
|
7
67
|
"version": "0.66.0-preview.2",
|
|
8
68
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,49 @@
|
|
|
1
1
|
# Change Log - @react-native-windows/cli
|
|
2
2
|
|
|
3
|
-
This log was last generated on Mon,
|
|
3
|
+
This log was last generated on Mon, 21 Feb 2022 16:09:24 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
-
## 0.66.
|
|
7
|
+
## 0.66.3
|
|
8
8
|
|
|
9
|
-
Mon,
|
|
9
|
+
Mon, 21 Feb 2022 16:09:24 GMT
|
|
10
10
|
|
|
11
|
-
###
|
|
11
|
+
### Patches
|
|
12
12
|
|
|
13
|
-
-
|
|
13
|
+
- [0.66] fix(cli): fix cache not being used when there are no dependencies (jthysell@microsoft.com)
|
|
14
14
|
|
|
15
|
+
## 0.66.2
|
|
16
|
+
|
|
17
|
+
Mon, 24 Jan 2022 16:11:33 GMT
|
|
18
|
+
|
|
19
|
+
### Patches
|
|
20
|
+
|
|
21
|
+
- Promote 0.66 to legacy (ngerlem@microsoft.com)
|
|
22
|
+
|
|
23
|
+
## 0.66.1
|
|
24
|
+
|
|
25
|
+
Mon, 15 Nov 2021 16:09:53 GMT
|
|
26
|
+
|
|
27
|
+
### Patches
|
|
28
|
+
|
|
29
|
+
- [0.66] Fix autolinking to support solution files using LF instead of CRLF (jthysell@microsoft.com)
|
|
30
|
+
|
|
31
|
+
## 0.66.0
|
|
32
|
+
|
|
33
|
+
Mon, 11 Oct 2021 15:07:19 GMT
|
|
34
|
+
|
|
35
|
+
### Patches
|
|
36
|
+
|
|
37
|
+
- Promote 0.66 to latest (ngerlem@microsoft.com)
|
|
38
|
+
|
|
39
|
+
## 0.66.0-preview.2
|
|
40
|
+
|
|
41
|
+
Mon, 04 Oct 2021 15:07:37 GMT
|
|
42
|
+
|
|
43
|
+
### Changes
|
|
44
|
+
|
|
45
|
+
- Bump the version of xmldom used by @react-native-windows/cli to 0.7.0. (yicyao@microsoft.com)
|
|
46
|
+
|
|
15
47
|
## 0.66.0-preview.1
|
|
16
48
|
|
|
17
49
|
Fri, 03 Sep 2021 18:48:19 GMT
|
|
@@ -46,7 +46,7 @@ export declare class AutolinkWindows {
|
|
|
46
46
|
csReactPackageProviders: string;
|
|
47
47
|
};
|
|
48
48
|
/** Cache of dependencies */
|
|
49
|
-
private
|
|
49
|
+
private windowsDependencies;
|
|
50
50
|
private getWindowsDependencies;
|
|
51
51
|
/**
|
|
52
52
|
* Updates the target file with the expected contents if it's different.
|
|
@@ -48,8 +48,6 @@ class AutolinkWindows {
|
|
|
48
48
|
this.projectConfig = projectConfig;
|
|
49
49
|
this.dependenciesConfig = dependenciesConfig;
|
|
50
50
|
this.options = options;
|
|
51
|
-
/** Cache of dependencies */
|
|
52
|
-
this.windowsDependencies = {};
|
|
53
51
|
this.changesNecessary = false;
|
|
54
52
|
if (!('windows' in this.projectConfig) ||
|
|
55
53
|
this.projectConfig.windows === null) {
|
|
@@ -257,7 +255,8 @@ class AutolinkWindows {
|
|
|
257
255
|
return { csUsingNamespaces, csReactPackageProviders };
|
|
258
256
|
}
|
|
259
257
|
getWindowsDependencies() {
|
|
260
|
-
if (
|
|
258
|
+
if (!this.windowsDependencies) {
|
|
259
|
+
this.windowsDependencies = {};
|
|
261
260
|
for (const dependencyName of Object.keys(this.dependenciesConfig)) {
|
|
262
261
|
const windowsDependency = this
|
|
263
262
|
.dependenciesConfig[dependencyName].platforms.windows;
|
|
@@ -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 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {performance} from 'perf_hooks';\n\nimport {newSpinner} from './commandWithProgress';\nimport * as vstools from './vstools';\nimport * as generatorCommon from '../../generator-common';\nimport * as configUtils from '../../config/configUtils';\n\nimport {\n Command,\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 {CodedError} from '@react-native-windows/telemetry';\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 {\n csUsingNamespaces,\n 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 readonly windowsDependencies: Record<\n string,\n WindowsDependencyConfig\n > = {};\n\n private getWindowsDependencies() {\n if (Object.keys(this.windowsDependencies).length === 0) {\n for (const dependencyName of Object.keys(this.dependenciesConfig)) {\n const windowsDependency: WindowsDependencyConfig | undefined = this\n .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.promises.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.promises.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 // 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 );\n if (useWinUI3FromConfig !== undefined) {\n // Make sure ExperimentalFeatures.props matches the value that comes from react-native.config.js\n const node = experimentalFeatures.content.getElementsByTagName(\n 'UseWinUI3',\n );\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 = new XMLSerializer().serializeToString(\n experimentalFeatures.content,\n );\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(useWinUI3: boolean) {\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 const winui2xVersion = configUtils.tryFindPropertyValue(\n winuiPropsContents,\n 'WinUI2xVersion',\n );\n const winui3Version = configUtils.tryFindPropertyValue(\n winuiPropsContents,\n 'WinUI3Version',\n );\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 = packagesConfig.content.documentElement.getElementsByTagName(\n 'package',\n );\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 * 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 */\nasync function updateAutoLink(\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.toString()}. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n throw e;\n }\n}\n\ninterface AutoLinkOptions {\n logging: boolean;\n check: boolean;\n sln?: string;\n proj?: string;\n}\n\nexport const autoLinkCommand: Command = {\n name: 'autolink-windows',\n description: 'performs autolinking',\n func: updateAutoLink,\n options: [\n {\n name: '--logging',\n description: 'Verbose output logging',\n default: false,\n },\n {\n name: '--check',\n description: 'Only check whether any autolinked files need to change',\n default: false,\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};\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 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {performance} from 'perf_hooks';\n\nimport {newSpinner} from './commandWithProgress';\nimport * as vstools from './vstools';\nimport * as generatorCommon from '../../generator-common';\nimport * as configUtils from '../../config/configUtils';\n\nimport {\n Command,\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 {CodedError} from '@react-native-windows/telemetry';\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 {\n csUsingNamespaces,\n 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 = this\n .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.promises.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.promises.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 // 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 );\n if (useWinUI3FromConfig !== undefined) {\n // Make sure ExperimentalFeatures.props matches the value that comes from react-native.config.js\n const node = experimentalFeatures.content.getElementsByTagName(\n 'UseWinUI3',\n );\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 = new XMLSerializer().serializeToString(\n experimentalFeatures.content,\n );\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(useWinUI3: boolean) {\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 const winui2xVersion = configUtils.tryFindPropertyValue(\n winuiPropsContents,\n 'WinUI2xVersion',\n );\n const winui3Version = configUtils.tryFindPropertyValue(\n winuiPropsContents,\n 'WinUI3Version',\n );\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 = packagesConfig.content.documentElement.getElementsByTagName(\n 'package',\n );\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 * 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 */\nasync function updateAutoLink(\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.toString()}. (${Math.round(\n endTime - startTime,\n )}ms)`,\n );\n throw e;\n }\n}\n\ninterface AutoLinkOptions {\n logging: boolean;\n check: boolean;\n sln?: string;\n proj?: string;\n}\n\nexport const autoLinkCommand: Command = {\n name: 'autolink-windows',\n description: 'performs autolinking',\n func: updateAutoLink,\n options: [\n {\n name: '--logging',\n description: 'Verbose output logging',\n default: false,\n },\n {\n name: '--check',\n description: 'Only check whether any autolinked files need to change',\n default: false,\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};\n"]}
|
|
@@ -88,10 +88,9 @@ function addProjectToSolution(slnFile, project, verbose = false, checkMode = fal
|
|
|
88
88
|
if (verbose) {
|
|
89
89
|
console.log(`Processing ${chalk_1.default.bold(path_1.default.basename(project.projectFile))}...`);
|
|
90
90
|
}
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
.split('\r\n');
|
|
91
|
+
const originalSlnContents = fs_1.default.readFileSync(slnFile).toString();
|
|
92
|
+
const isCRLF = originalSlnContents.includes('\r\n');
|
|
93
|
+
const slnLines = originalSlnContents.split(isCRLF ? '\r\n' : '\n');
|
|
95
94
|
let contentsChanged = false;
|
|
96
95
|
// Check for the project entry block
|
|
97
96
|
const slnDir = path_1.default.dirname(slnFile);
|
|
@@ -146,7 +145,7 @@ function addProjectToSolution(slnFile, project, verbose = false, checkMode = fal
|
|
|
146
145
|
if (verbose) {
|
|
147
146
|
console.log(`Writing changes to ${chalk_1.default.bold(path_1.default.basename(slnFile))}...`);
|
|
148
147
|
}
|
|
149
|
-
const slnContents = slnLines.join('\r\n');
|
|
148
|
+
const slnContents = slnLines.join(isCRLF ? '\r\n' : '\n');
|
|
150
149
|
fs_1.default.writeFileSync(slnFile, slnContents, {
|
|
151
150
|
encoding: 'utf8',
|
|
152
151
|
flag: 'w',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vstools.js","sourceRoot":"","sources":["../../../src/runWindows/utils/vstools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {Project} from '../../config/projectConfig';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nconst projectTypeGuidsByLanguage = {\n cpp: '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}',\n cs: '{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}',\n};\n\nexport const dotNetCoreProjectTypeGuid =\n '{9A19103F-16F7-4668-BE54-9A1E7A4F7556}';\n\n/**\n * Checks is the given block of lines exists within an array of lines.\n * @param lines The array of lines to search.\n * @param block The block of lines to search for.\n * @return True if the block of lines does exist within lines.\n */\nfunction linesContainsBlock(lines: string[], block: string[]): boolean {\n if (block.length > 0) {\n const startIndex = lines.indexOf(block[0]);\n\n if (startIndex >= 0) {\n for (let i = 1; i < block.length; i++) {\n if (lines[startIndex + i] !== block[i]) {\n return false;\n }\n }\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Insert the given block of lines into an array of lines.\n * @param lines The array of lines to insert into.\n * @param block The block of lines to insert.\n * @param index The index to perform the insert.\n */\nfunction insertBlockIntoLines(lines: string[], block: string[], index: number) {\n for (let i = 0; i < block.length; i++) {\n lines.splice(index + i, 0, block[i]);\n }\n}\n\n/**\n * Search through an array of lines for a block of lines starting with startLine and ending with endLine.\n * @param lines The array of lines to search.\n * @param startLine The first line of the block.\n * @param endLine The last line of the block.\n * @param includeStartEnd Include the start and end lines in the result.\n * @return The found block of lines, if found.\n */\nfunction getBlockContentsFromLines(\n lines: string[],\n startLine: string,\n endLine: string,\n includeStartEnd: boolean = true,\n): string[] {\n const startIndex = lines.indexOf(startLine);\n const endIndex = lines.indexOf(endLine, startIndex);\n\n if (startIndex >= 0 && startIndex < endIndex) {\n if (includeStartEnd) {\n return lines.slice(startIndex, endIndex + 1);\n } else if (startIndex + 1 < endIndex) {\n return lines.slice(startIndex + 1, endIndex);\n }\n }\n\n return [];\n}\n\n/**\n * Adds the necessary info from a VS project into a VS solution file so that it will build.\n * @param slnFile The Absolute path to the target VS solution file.\n * @param project The object representing the project info.\n * @param verbose If true, enable verbose logging.\n * @param checkMode It true, don't make any changes.\n * @return Whether any changes were necessary.\n */\nexport function addProjectToSolution(\n slnFile: string,\n project: Project,\n verbose: boolean = false,\n checkMode: boolean = false,\n): boolean {\n if (project.projectLang === null) {\n throw new CodedError(\n 'AddProjectToSolution',\n 'Unable to add project to solution, projectLang is null',\n );\n }\n\n if (project.projectGuid === null) {\n throw new CodedError(\n 'AddProjectToSolution',\n 'Unable to add project to solution, projectGuid is null',\n );\n }\n\n if (verbose) {\n console.log(\n `Processing ${chalk.bold(path.basename(project.projectFile))}...`,\n );\n }\n\n const slnLines = fs\n .readFileSync(slnFile)\n .toString()\n .split('\\r\\n');\n\n let contentsChanged = false;\n\n // Check for the project entry block\n\n const slnDir = path.dirname(slnFile);\n const relProjectFile = path.relative(slnDir, project.projectFile);\n\n const projectTypeGuid =\n 'projectTypeGuid' in project\n ? project.projectTypeGuid!\n : projectTypeGuidsByLanguage[project.projectLang];\n\n const projectGuid = project.projectGuid.toUpperCase();\n\n const projectEntryBlock = [\n `Project(\"${projectTypeGuid}\") = \"${project.projectName}\", \"${relProjectFile}\", \"${projectGuid}\"`,\n 'EndProject',\n ];\n\n if (!linesContainsBlock(slnLines, projectEntryBlock)) {\n if (verbose) {\n console.log(chalk.yellow('Missing project entry block.'));\n }\n\n const globalIndex = slnLines.indexOf('Global');\n insertBlockIntoLines(slnLines, projectEntryBlock, globalIndex);\n contentsChanged = true;\n }\n\n // Check for the project configuration platforms\n\n const slnConfigs = getBlockContentsFromLines(\n slnLines,\n '\\tGlobalSection(SolutionConfigurationPlatforms) = preSolution',\n '\\tEndGlobalSection',\n false,\n ).map(line => line.match(/\\s+([\\w\\s|]+)\\s=/)![1]);\n\n const projectConfigLines: string[] = [];\n\n slnConfigs.forEach(slnConfig => {\n if (!slnConfig.endsWith('|Any CPU')) {\n projectConfigLines.push(\n `\\t\\t${projectGuid}.${slnConfig}.ActiveCfg = ${\n project.projectLang === 'cpp'\n ? slnConfig.replace('x86', 'Win32')\n : slnConfig\n }`,\n );\n projectConfigLines.push(\n `\\t\\t${projectGuid}.${slnConfig}.Build.0 = ${\n project.projectLang === 'cpp'\n ? slnConfig.replace('x86', 'Win32')\n : slnConfig\n }`,\n );\n }\n });\n\n const projectConfigStartIndex = slnLines.indexOf(\n '\\tGlobalSection(ProjectConfigurationPlatforms) = postSolution',\n );\n\n projectConfigLines.forEach(projectConfigLine => {\n if (!slnLines.includes(projectConfigLine)) {\n if (verbose) {\n const configLine = projectConfigLine.substr(\n projectConfigLine.indexOf('= ') + 2,\n );\n console.log(chalk.yellow(`Missing ${configLine} config block.`));\n }\n\n const projectConfigEndIndex = slnLines.indexOf(\n '\\tEndGlobalSection',\n projectConfigStartIndex,\n );\n\n slnLines.splice(projectConfigEndIndex, 0, projectConfigLine);\n contentsChanged = true;\n }\n });\n\n // Write out new solution file if there were changes\n if (contentsChanged) {\n if (verbose) {\n console.log(\n chalk.yellow(\n `${chalk.bold(path.basename(slnFile))} needs to be updated.`,\n ),\n );\n }\n\n if (!checkMode) {\n if (verbose) {\n console.log(\n `Writing changes to ${chalk.bold(path.basename(slnFile))}...`,\n );\n }\n\n const slnContents = slnLines.join('\\r\\n');\n fs.writeFileSync(slnFile, slnContents, {\n encoding: 'utf8',\n flag: 'w',\n });\n }\n } else {\n if (verbose) {\n console.log(`No changes to ${chalk.bold(path.basename(slnFile))}.`);\n }\n }\n\n return contentsChanged;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"vstools.js","sourceRoot":"","sources":["../../../src/runWindows/utils/vstools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {Project} from '../../config/projectConfig';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nconst projectTypeGuidsByLanguage = {\n cpp: '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}',\n cs: '{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}',\n};\n\nexport const dotNetCoreProjectTypeGuid =\n '{9A19103F-16F7-4668-BE54-9A1E7A4F7556}';\n\n/**\n * Checks is the given block of lines exists within an array of lines.\n * @param lines The array of lines to search.\n * @param block The block of lines to search for.\n * @return True if the block of lines does exist within lines.\n */\nfunction linesContainsBlock(lines: string[], block: string[]): boolean {\n if (block.length > 0) {\n const startIndex = lines.indexOf(block[0]);\n\n if (startIndex >= 0) {\n for (let i = 1; i < block.length; i++) {\n if (lines[startIndex + i] !== block[i]) {\n return false;\n }\n }\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Insert the given block of lines into an array of lines.\n * @param lines The array of lines to insert into.\n * @param block The block of lines to insert.\n * @param index The index to perform the insert.\n */\nfunction insertBlockIntoLines(lines: string[], block: string[], index: number) {\n for (let i = 0; i < block.length; i++) {\n lines.splice(index + i, 0, block[i]);\n }\n}\n\n/**\n * Search through an array of lines for a block of lines starting with startLine and ending with endLine.\n * @param lines The array of lines to search.\n * @param startLine The first line of the block.\n * @param endLine The last line of the block.\n * @param includeStartEnd Include the start and end lines in the result.\n * @return The found block of lines, if found.\n */\nfunction getBlockContentsFromLines(\n lines: string[],\n startLine: string,\n endLine: string,\n includeStartEnd: boolean = true,\n): string[] {\n const startIndex = lines.indexOf(startLine);\n const endIndex = lines.indexOf(endLine, startIndex);\n\n if (startIndex >= 0 && startIndex < endIndex) {\n if (includeStartEnd) {\n return lines.slice(startIndex, endIndex + 1);\n } else if (startIndex + 1 < endIndex) {\n return lines.slice(startIndex + 1, endIndex);\n }\n }\n\n return [];\n}\n\n/**\n * Adds the necessary info from a VS project into a VS solution file so that it will build.\n * @param slnFile The Absolute path to the target VS solution file.\n * @param project The object representing the project info.\n * @param verbose If true, enable verbose logging.\n * @param checkMode It true, don't make any changes.\n * @return Whether any changes were necessary.\n */\nexport function addProjectToSolution(\n slnFile: string,\n project: Project,\n verbose: boolean = false,\n checkMode: boolean = false,\n): boolean {\n if (project.projectLang === null) {\n throw new CodedError(\n 'AddProjectToSolution',\n 'Unable to add project to solution, projectLang is null',\n );\n }\n\n if (project.projectGuid === null) {\n throw new CodedError(\n 'AddProjectToSolution',\n 'Unable to add project to solution, projectGuid is null',\n );\n }\n\n if (verbose) {\n console.log(\n `Processing ${chalk.bold(path.basename(project.projectFile))}...`,\n );\n }\n\n const originalSlnContents = fs.readFileSync(slnFile).toString();\n\n const isCRLF = originalSlnContents.includes('\\r\\n');\n\n const slnLines = originalSlnContents.split(isCRLF ? '\\r\\n' : '\\n');\n\n let contentsChanged = false;\n\n // Check for the project entry block\n\n const slnDir = path.dirname(slnFile);\n const relProjectFile = path.relative(slnDir, project.projectFile);\n\n const projectTypeGuid =\n 'projectTypeGuid' in project\n ? project.projectTypeGuid!\n : projectTypeGuidsByLanguage[project.projectLang];\n\n const projectGuid = project.projectGuid.toUpperCase();\n\n const projectEntryBlock = [\n `Project(\"${projectTypeGuid}\") = \"${project.projectName}\", \"${relProjectFile}\", \"${projectGuid}\"`,\n 'EndProject',\n ];\n\n if (!linesContainsBlock(slnLines, projectEntryBlock)) {\n if (verbose) {\n console.log(chalk.yellow('Missing project entry block.'));\n }\n\n const globalIndex = slnLines.indexOf('Global');\n insertBlockIntoLines(slnLines, projectEntryBlock, globalIndex);\n contentsChanged = true;\n }\n\n // Check for the project configuration platforms\n\n const slnConfigs = getBlockContentsFromLines(\n slnLines,\n '\\tGlobalSection(SolutionConfigurationPlatforms) = preSolution',\n '\\tEndGlobalSection',\n false,\n ).map(line => line.match(/\\s+([\\w\\s|]+)\\s=/)![1]);\n\n const projectConfigLines: string[] = [];\n\n slnConfigs.forEach(slnConfig => {\n if (!slnConfig.endsWith('|Any CPU')) {\n projectConfigLines.push(\n `\\t\\t${projectGuid}.${slnConfig}.ActiveCfg = ${\n project.projectLang === 'cpp'\n ? slnConfig.replace('x86', 'Win32')\n : slnConfig\n }`,\n );\n projectConfigLines.push(\n `\\t\\t${projectGuid}.${slnConfig}.Build.0 = ${\n project.projectLang === 'cpp'\n ? slnConfig.replace('x86', 'Win32')\n : slnConfig\n }`,\n );\n }\n });\n\n const projectConfigStartIndex = slnLines.indexOf(\n '\\tGlobalSection(ProjectConfigurationPlatforms) = postSolution',\n );\n\n projectConfigLines.forEach(projectConfigLine => {\n if (!slnLines.includes(projectConfigLine)) {\n if (verbose) {\n const configLine = projectConfigLine.substr(\n projectConfigLine.indexOf('= ') + 2,\n );\n console.log(chalk.yellow(`Missing ${configLine} config block.`));\n }\n\n const projectConfigEndIndex = slnLines.indexOf(\n '\\tEndGlobalSection',\n projectConfigStartIndex,\n );\n\n slnLines.splice(projectConfigEndIndex, 0, projectConfigLine);\n contentsChanged = true;\n }\n });\n\n // Write out new solution file if there were changes\n if (contentsChanged) {\n if (verbose) {\n console.log(\n chalk.yellow(\n `${chalk.bold(path.basename(slnFile))} needs to be updated.`,\n ),\n );\n }\n\n if (!checkMode) {\n if (verbose) {\n console.log(\n `Writing changes to ${chalk.bold(path.basename(slnFile))}...`,\n );\n }\n\n const slnContents = slnLines.join(isCRLF ? '\\r\\n' : '\\n');\n fs.writeFileSync(slnFile, slnContents, {\n encoding: 'utf8',\n flag: 'w',\n });\n }\n } else {\n if (verbose) {\n console.log(`No changes to ${chalk.bold(path.basename(slnFile))}.`);\n }\n }\n\n return contentsChanged;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-windows/cli",
|
|
3
|
-
"version": "0.66.
|
|
3
|
+
"version": "0.66.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
"watch": "rnw-scripts watch"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@react-native-windows/package-utils": "0.66.
|
|
21
|
-
"@react-native-windows/telemetry": "0.66.
|
|
20
|
+
"@react-native-windows/package-utils": "0.66.1",
|
|
21
|
+
"@react-native-windows/telemetry": "0.66.1",
|
|
22
|
+
"@xmldom/xmldom": "^0.7.5",
|
|
22
23
|
"chalk": "^4.1.0",
|
|
23
24
|
"cli-spinners": "^2.2.0",
|
|
24
25
|
"envinfo": "^7.5.0",
|
|
@@ -34,7 +35,6 @@
|
|
|
34
35
|
"uuid": "^3.3.2",
|
|
35
36
|
"xml-formatter": "^2.4.0",
|
|
36
37
|
"xml-parser": "^1.2.1",
|
|
37
|
-
"@xmldom/xmldom": "^0.7.5",
|
|
38
38
|
"xpath": "^0.0.27"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
@@ -67,11 +67,11 @@
|
|
|
67
67
|
"powershell"
|
|
68
68
|
],
|
|
69
69
|
"beachball": {
|
|
70
|
-
"defaultNpmTag": "
|
|
70
|
+
"defaultNpmTag": "v0.66-stable",
|
|
71
71
|
"disallowedChangeTypes": [
|
|
72
72
|
"major",
|
|
73
73
|
"minor",
|
|
74
|
-
"
|
|
74
|
+
"prerelease"
|
|
75
75
|
]
|
|
76
76
|
},
|
|
77
77
|
"promoteRelease": true,
|