@react-native-windows/cli 0.67.0 → 0.68.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/lib-commonjs/config/configUtils.js +1 -1
  3. package/lib-commonjs/config/configUtils.js.map +1 -1
  4. package/lib-commonjs/config/dependencyConfig.js +4 -2
  5. package/lib-commonjs/config/dependencyConfig.js.map +1 -1
  6. package/lib-commonjs/e2etest/autolink.test.js +16 -0
  7. package/lib-commonjs/e2etest/autolink.test.js.map +1 -1
  8. package/lib-commonjs/e2etest/dependencyConfig.test.js +2 -2
  9. package/lib-commonjs/e2etest/dependencyConfig.test.js.map +1 -1
  10. package/lib-commonjs/e2etest/projectConfig.test.js +2 -4
  11. package/lib-commonjs/e2etest/projectConfig.test.js.map +1 -1
  12. package/lib-commonjs/e2etest/projectConfig.utils.js +3 -10
  13. package/lib-commonjs/e2etest/projectConfig.utils.js.map +1 -1
  14. package/lib-commonjs/e2etest/runWindows.test.js +35 -14
  15. package/lib-commonjs/e2etest/runWindows.test.js.map +1 -1
  16. package/lib-commonjs/generator-common/index.js +7 -7
  17. package/lib-commonjs/generator-common/index.js.map +1 -1
  18. package/lib-commonjs/generator-windows/index.js +10 -26
  19. package/lib-commonjs/generator-windows/index.js.map +1 -1
  20. package/lib-commonjs/index.js +9 -60
  21. package/lib-commonjs/index.js.map +1 -1
  22. package/lib-commonjs/runWindows/runWindows.d.ts +0 -1
  23. package/lib-commonjs/runWindows/runWindows.js +107 -131
  24. package/lib-commonjs/runWindows/runWindows.js.map +1 -1
  25. package/lib-commonjs/runWindows/runWindowsOptions.js +6 -2
  26. package/lib-commonjs/runWindows/runWindowsOptions.js.map +1 -1
  27. package/lib-commonjs/runWindows/utils/autolink.d.ts +9 -1
  28. package/lib-commonjs/runWindows/utils/autolink.js +81 -28
  29. package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
  30. package/lib-commonjs/runWindows/utils/build.js +1 -1
  31. package/lib-commonjs/runWindows/utils/build.js.map +1 -1
  32. package/lib-commonjs/runWindows/utils/checkRequirements.js +1 -1
  33. package/lib-commonjs/runWindows/utils/checkRequirements.js.map +1 -1
  34. package/lib-commonjs/runWindows/utils/commandWithProgress.d.ts +6 -0
  35. package/lib-commonjs/runWindows/utils/commandWithProgress.js +26 -5
  36. package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +1 -1
  37. package/lib-commonjs/runWindows/utils/deploy.js +9 -9
  38. package/lib-commonjs/runWindows/utils/deploy.js.map +1 -1
  39. package/lib-commonjs/runWindows/utils/msbuildtools.d.ts +1 -0
  40. package/lib-commonjs/runWindows/utils/msbuildtools.js +19 -12
  41. package/lib-commonjs/runWindows/utils/msbuildtools.js.map +1 -1
  42. package/lib-commonjs/runWindows/utils/telemetryHelpers.d.ts +29 -0
  43. package/lib-commonjs/runWindows/utils/telemetryHelpers.js +109 -0
  44. package/lib-commonjs/runWindows/utils/telemetryHelpers.js.map +1 -0
  45. package/lib-commonjs/runWindows/utils/version.js +1 -1
  46. package/lib-commonjs/runWindows/utils/version.js.map +1 -1
  47. package/lib-commonjs/runWindows/utils/vsInstalls.js +2 -2
  48. package/lib-commonjs/runWindows/utils/vsInstalls.js.map +1 -1
  49. package/lib-commonjs/runWindows/utils/vstools.js +4 -4
  50. package/lib-commonjs/runWindows/utils/vstools.js.map +1 -1
  51. package/lib-commonjs/runWindows/utils/winappdeploytool.js +3 -3
  52. package/lib-commonjs/runWindows/utils/winappdeploytool.js.map +1 -1
  53. package/package.json +11 -10
  54. package/CHANGELOG.json +0 -1851
  55. package/CHANGELOG.md +0 -818
@@ -27,12 +27,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  return (mod && mod.__esModule) ? mod : { "default": mod };
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.autoLinkCommand = exports.autolinkOptions = exports.AutolinkWindows = void 0;
30
+ exports.autoLinkCommand = exports.autolinkOptions = exports.autolinkWindowsInternal = exports.AutolinkWindows = void 0;
31
31
  // Types in this file are inaccurate compared to usage in terms of falsiness.
32
32
  // We should try to rewrite some of this to do automated schema validation to
33
33
  // guarantee correct types
34
34
  /* eslint-disable @typescript-eslint/no-unnecessary-condition */
35
- const fs_1 = __importDefault(require("fs"));
35
+ const fs_1 = __importDefault(require("@react-native-windows/fs"));
36
36
  const path_1 = __importDefault(require("path"));
37
37
  const chalk_1 = __importDefault(require("chalk"));
38
38
  const perf_hooks_1 = require("perf_hooks");
@@ -41,6 +41,7 @@ const vstools = __importStar(require("./vstools"));
41
41
  const generatorCommon = __importStar(require("../../generator-common"));
42
42
  const configUtils = __importStar(require("../../config/configUtils"));
43
43
  const telemetry_1 = require("@react-native-windows/telemetry");
44
+ const telemetryHelpers_1 = require("./telemetryHelpers");
44
45
  const xmldom_1 = require("@xmldom/xmldom");
45
46
  const formatter = require('xml-formatter');
46
47
  class AutolinkWindows {
@@ -149,7 +150,7 @@ class AutolinkWindows {
149
150
  'solutionFile',
150
151
  'project',
151
152
  ];
152
- alwaysRequired.forEach(item => {
153
+ alwaysRequired.forEach((item) => {
153
154
  if (!(item in this.windowsAppConfig) ||
154
155
  this.windowsAppConfig[item] === null) {
155
156
  throw new telemetry_1.CodedError('IncompleteConfig', `${item} is required but not specified by react-native config`, { item: item });
@@ -174,7 +175,7 @@ class AutolinkWindows {
174
175
  'projectLang',
175
176
  'projectGuid',
176
177
  ];
177
- projectRequired.forEach(item => {
178
+ projectRequired.forEach((item) => {
178
179
  if (!(item in windowsAppProjectConfig) ||
179
180
  windowsAppProjectConfig[item] === null) {
180
181
  throw new telemetry_1.CodedError('IncompleteConfig', `project.${item} is required but not specified by react-native config`, { item: item });
@@ -203,14 +204,14 @@ class AutolinkWindows {
203
204
  let cppPackageProviders = '';
204
205
  const windowsDependencies = this.getWindowsDependencies();
205
206
  for (const dependencyName of Object.keys(windowsDependencies)) {
206
- windowsDependencies[dependencyName].projects.forEach(project => {
207
+ windowsDependencies[dependencyName].projects.forEach((project) => {
207
208
  if (project.directDependency) {
208
209
  cppIncludes += `\n\n// Includes from ${dependencyName}`;
209
- project.cppHeaders.forEach(header => {
210
+ project.cppHeaders.forEach((header) => {
210
211
  cppIncludes += `\n#include <${header}>`;
211
212
  });
212
213
  cppPackageProviders += `\n // IReactPackageProviders from ${dependencyName}`;
213
- project.cppPackageProviders.forEach(packageProvider => {
214
+ project.cppPackageProviders.forEach((packageProvider) => {
214
215
  cppPackageProviders += `\n packageProviders.Append(winrt::${packageProvider}());`;
215
216
  });
216
217
  }
@@ -224,7 +225,7 @@ class AutolinkWindows {
224
225
  return { cppPackageProviders, cppIncludes };
225
226
  }
226
227
  generateCSAutolinking(templateRoot, projectLang, projectDir) {
227
- const { csUsingNamespaces, csReactPackageProviders, } = this.getCsReplacements();
228
+ const { csUsingNamespaces, csReactPackageProviders } = this.getCsReplacements();
228
229
  const csFileName = 'AutolinkedNativeModules.g.cs';
229
230
  const srcCsFile = path_1.default.join(templateRoot, `${projectLang}-app`, 'src', csFileName);
230
231
  const destCsFile = path_1.default.join(projectDir, csFileName);
@@ -241,14 +242,14 @@ class AutolinkWindows {
241
242
  let csReactPackageProviders = '';
242
243
  const windowsDependencies = this.getWindowsDependencies();
243
244
  for (const dependencyName of Object.keys(windowsDependencies)) {
244
- windowsDependencies[dependencyName].projects.forEach(project => {
245
+ windowsDependencies[dependencyName].projects.forEach((project) => {
245
246
  if (project.directDependency) {
246
247
  csUsingNamespaces += `\n\n// Namespaces from ${dependencyName}`;
247
- project.csNamespaces.forEach(namespace => {
248
+ project.csNamespaces.forEach((namespace) => {
248
249
  csUsingNamespaces += `\nusing ${namespace};`;
249
250
  });
250
251
  csReactPackageProviders += `\n // IReactPackageProviders from ${dependencyName}`;
251
- project.csPackageProviders.forEach(packageProvider => {
252
+ project.csPackageProviders.forEach((packageProvider) => {
252
253
  csReactPackageProviders += `\n packageProviders.Add(new ${packageProvider}());`;
253
254
  });
254
255
  }
@@ -259,8 +260,7 @@ class AutolinkWindows {
259
260
  getWindowsDependencies() {
260
261
  if (Object.keys(this.windowsDependencies).length === 0) {
261
262
  for (const dependencyName of Object.keys(this.dependenciesConfig)) {
262
- const windowsDependency = this
263
- .dependenciesConfig[dependencyName].platforms.windows;
263
+ const windowsDependency = this.dependenciesConfig[dependencyName].platforms.windows;
264
264
  if (windowsDependency) {
265
265
  verboseMessage(`${chalk_1.default.bold(dependencyName)} has Windows implementation, config:`, this.options.logging);
266
266
  verboseMessage(windowsDependency, this.options.logging);
@@ -276,12 +276,12 @@ class AutolinkWindows {
276
276
  // the dependency is probably a react native module, but we didn't find a module project
277
277
  throw new telemetry_1.CodedError('Autolinking', `Found a Windows solution for ${dependencyName} but no React Native for Windows native module projects`);
278
278
  }
279
- windowsDependency.projects.forEach(project => {
279
+ windowsDependency.projects.forEach((project) => {
280
280
  const itemsToCheck = [
281
281
  'projectFile',
282
282
  'directDependency',
283
283
  ];
284
- itemsToCheck.forEach(item => {
284
+ itemsToCheck.forEach((item) => {
285
285
  dependencyIsValid = !!(dependencyIsValid &&
286
286
  item in project &&
287
287
  project[item] !== '' &&
@@ -311,14 +311,14 @@ class AutolinkWindows {
311
311
  const fileName = chalk_1.default.bold(path_1.default.basename(filePath));
312
312
  verboseMessage(`Reading ${fileName}...`, this.options.logging);
313
313
  const actualContents = fs_1.default.existsSync(filePath)
314
- ? (await fs_1.default.promises.readFile(filePath)).toString()
314
+ ? (await fs_1.default.readFile(filePath)).toString()
315
315
  : '';
316
316
  const contentsChanged = expectedContents !== actualContents;
317
317
  if (contentsChanged) {
318
318
  verboseMessage(chalk_1.default.yellow(`${fileName} needs to be updated.`), this.options.logging);
319
319
  if (!this.options.check) {
320
320
  verboseMessage(`Writing ${fileName}...`, this.options.logging);
321
- await fs_1.default.promises.writeFile(filePath, expectedContents, {
321
+ await fs_1.default.writeFile(filePath, expectedContents, {
322
322
  encoding: 'utf8',
323
323
  flag: 'w',
324
324
  });
@@ -333,7 +333,7 @@ class AutolinkWindows {
333
333
  let projectReferencesForTargets = '';
334
334
  const windowsDependencies = this.getWindowsDependencies();
335
335
  for (const dependencyName of Object.keys(windowsDependencies)) {
336
- windowsDependencies[dependencyName].projects.forEach(project => {
336
+ windowsDependencies[dependencyName].projects.forEach((project) => {
337
337
  if (project.directDependency) {
338
338
  const dependencyProjectFile = path_1.default.join(windowsDependencies[dependencyName].folder, windowsDependencies[dependencyName].sourceDir, project.projectFile);
339
339
  const relDependencyProjectFile = path_1.default.relative(projectDir, dependencyProjectFile);
@@ -370,7 +370,7 @@ class AutolinkWindows {
370
370
  const csModuleNames = [];
371
371
  const windowsDependencies = this.getWindowsDependencies();
372
372
  for (const dependencyName of Object.keys(windowsDependencies)) {
373
- windowsDependencies[dependencyName].projects.forEach(project => {
373
+ windowsDependencies[dependencyName].projects.forEach((project) => {
374
374
  if (project.directDependency && project.projectLang === 'cs') {
375
375
  csModuleNames.push(project.projectName);
376
376
  }
@@ -383,7 +383,7 @@ class AutolinkWindows {
383
383
  const windowsDependencies = this.getWindowsDependencies();
384
384
  for (const dependencyName of Object.keys(windowsDependencies)) {
385
385
  // Process dependency projects
386
- windowsDependencies[dependencyName].projects.forEach(project => {
386
+ windowsDependencies[dependencyName].projects.forEach((project) => {
387
387
  const dependencyProjectFile = path_1.default.join(windowsDependencies[dependencyName].folder, windowsDependencies[dependencyName].sourceDir, project.projectFile);
388
388
  projectsForSolution.push({
389
389
  projectFile: dependencyProjectFile,
@@ -412,7 +412,7 @@ class AutolinkWindows {
412
412
  }
413
413
  verboseMessage(`Calculating ${chalk_1.default.bold(path_1.default.basename(solutionFile))} changes...`, this.options.logging);
414
414
  let changesNecessary = false;
415
- projectsForSolution.forEach(project => {
415
+ projectsForSolution.forEach((project) => {
416
416
  const contentsChanged = vstools.addProjectToSolution(solutionFile, project, this.options.logging, this.options.check);
417
417
  changesNecessary = changesNecessary || contentsChanged;
418
418
  });
@@ -506,8 +506,8 @@ class AutolinkWindows {
506
506
  const packageElement = packageElements.item(i);
507
507
  const idAttr = packageElement.getAttributeNode('id');
508
508
  const id = idAttr.value;
509
- const keepPkg = keepPkgs.find(pkg => pkg.id === id);
510
- if (removePkgs.find(pkg => pkg.id === id)) {
509
+ const keepPkg = keepPkgs.find((pkg) => pkg.id === id);
510
+ if (removePkgs.find((pkg) => pkg.id === id)) {
511
511
  nodesToRemove.push(packageElement);
512
512
  changed = true;
513
513
  }
@@ -515,11 +515,11 @@ class AutolinkWindows {
515
515
  changed =
516
516
  changed || keepPkg.version !== packageElement.getAttribute('version');
517
517
  packageElement.setAttribute('version', keepPkg.version);
518
- keepPkgs = keepPkgs.filter(pkg => pkg.id !== keepPkg.id);
518
+ keepPkgs = keepPkgs.filter((pkg) => pkg.id !== keepPkg.id);
519
519
  }
520
520
  }
521
- nodesToRemove.forEach(pkg => packagesConfig.content.documentElement.removeChild(pkg));
522
- keepPkgs.forEach(keepPkg => {
521
+ nodesToRemove.forEach((pkg) => packagesConfig.content.documentElement.removeChild(pkg));
522
+ keepPkgs.forEach((keepPkg) => {
523
523
  const newPkg = packagesConfig.content.createElement('package');
524
524
  Object.entries(keepPkg).forEach(([attr, value]) => {
525
525
  newPkg.setAttribute(attr, value);
@@ -567,13 +567,61 @@ function verboseMessage(message, verbose) {
567
567
  console.log(message);
568
568
  }
569
569
  }
570
+ /**
571
+ * Sanitizes the given option for telemetery.
572
+ * @param key The key of the option.
573
+ * @param value The unsanitized value of the option.
574
+ * @returns The sanitized value of the option.
575
+ */
576
+ function optionSanitizer(key, value) {
577
+ // Do not add a default case here.
578
+ // Strings risking PII should just return true if present, false otherwise.
579
+ // All others should return the value (or false if undefined).
580
+ switch (key) {
581
+ case 'sln':
582
+ case 'proj':
583
+ return value === undefined ? false : true; // Strip PII
584
+ case 'logging':
585
+ case 'check':
586
+ case 'telemetry':
587
+ return value === undefined ? false : value; // Return value
588
+ }
589
+ }
590
+ /**
591
+ * Get the extra props to add to the `autolink-windows` telemetry event.
592
+ * @returns The extra props.
593
+ */
594
+ async function getExtraProps() {
595
+ const extraProps = {};
596
+ return extraProps;
597
+ }
598
+ /**
599
+ * The function run when calling `react-native autolink-windows`.
600
+ * @param args Unprocessed args passed from react-native CLI.
601
+ * @param config Config passed from react-native CLI.
602
+ * @param options Options passed from react-native CLI.
603
+ */
604
+ async function autolinkWindows(args, config, options) {
605
+ await (0, telemetryHelpers_1.startTelemetrySession)('autolink-windows', config, options, (0, telemetryHelpers_1.getDefaultOptions)(config, exports.autolinkOptions), optionSanitizer);
606
+ let autolinkWindowsError;
607
+ try {
608
+ await autolinkWindowsInternal(args, config, options);
609
+ }
610
+ catch (ex) {
611
+ autolinkWindowsError =
612
+ ex instanceof Error ? ex : new Error(String(ex));
613
+ telemetry_1.Telemetry.trackException(autolinkWindowsError);
614
+ }
615
+ await (0, telemetryHelpers_1.endTelemetrySession)(autolinkWindowsError, getExtraProps);
616
+ (0, commandWithProgress_1.setExitProcessWithError)(options.logging, autolinkWindowsError);
617
+ }
570
618
  /**
571
619
  * Performs auto-linking for RNW native modules and apps.
572
620
  * @param args Unprocessed args passed from react-native CLI.
573
621
  * @param config Config passed from react-native CLI.
574
622
  * @param options Options passed from react-native CLI.
575
623
  */
576
- async function updateAutoLink(args, config, options) {
624
+ async function autolinkWindowsInternal(args, config, options) {
577
625
  const startTime = perf_hooks_1.performance.now();
578
626
  const spinner = (0, commandWithProgress_1.newSpinner)(options.check ? 'Checking auto-linked files...' : 'Auto-linking...');
579
627
  try {
@@ -599,6 +647,7 @@ async function updateAutoLink(args, config, options) {
599
647
  throw e;
600
648
  }
601
649
  }
650
+ exports.autolinkWindowsInternal = autolinkWindowsInternal;
602
651
  exports.autolinkOptions = [
603
652
  {
604
653
  name: '--logging',
@@ -618,6 +667,10 @@ exports.autolinkOptions = [
618
667
  description: "Override the app project file determined by 'react-native config', e.g. windows\\myApp\\myApp.vcxproj",
619
668
  default: undefined,
620
669
  },
670
+ {
671
+ name: '--no-telemetry',
672
+ description: 'Disables sending telemetry that allows analysis of usage and failures of the react-native-windows CLI',
673
+ },
621
674
  ];
622
675
  /**
623
676
  * Performs auto-linking for RNW native modules and apps.
@@ -625,7 +678,7 @@ exports.autolinkOptions = [
625
678
  exports.autoLinkCommand = {
626
679
  name: 'autolink-windows',
627
680
  description: 'performs autolinking',
628
- func: updateAutoLink,
681
+ func: autolinkWindows,
629
682
  options: exports.autolinkOptions,
630
683
  };
631
684
  //# sourceMappingURL=autolink.js.map
@@ -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 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 {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 // 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 = 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(\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 = 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 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}\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\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: updateAutoLink,\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 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 =\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"]}
@@ -17,7 +17,7 @@ const telemetry_1 = require("@react-native-windows/telemetry");
17
17
  async function buildSolution(buildTools, slnFile, buildType, buildArch, msBuildProps, verbose, target, buildLogDirectory, singleproc) {
18
18
  const minVersion = new version_1.default(10, 0, 19041, 0);
19
19
  const allVersions = msbuildtools_1.default.getAllAvailableUAPVersions();
20
- if (!allVersions.some(v => v.gte(minVersion))) {
20
+ if (!allVersions.some((v) => v.gte(minVersion))) {
21
21
  throw new telemetry_1.CodedError('MinSDKVersionNotMet', 'Must have a minimum Windows SDK version 10.0.19041.0 installed');
22
22
  }
23
23
  await buildTools.buildProject(slnFile, buildType, buildArch, msBuildProps, verbose, target, buildLogDirectory, singleproc);
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/runWindows/utils/build.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,gDAAwB;AAExB,kEAA0C;AAC1C,wDAAgC;AAChC,+DAA+C;AAG/C,+DAA2D;AAEpD,KAAK,UAAU,aAAa,CACjC,UAAwB,EACxB,OAAe,EACf,SAAsB,EACtB,SAAoB,EACpB,YAAoC,EACpC,OAAgB,EAChB,MAA0B,EAC1B,iBAA0B,EAC1B,UAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,iBAAO,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,sBAAY,CAAC,0BAA0B,EAAE,CAAC;IAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE;QAC7C,MAAM,IAAI,sBAAU,CAClB,qBAAqB,EACrB,gEAAgE,CACjE,CAAC;KACH;IAED,MAAM,UAAU,CAAC,YAAY,CAC3B,OAAO,EACP,SAAS,EACT,SAAS,EACT,YAAY,EACZ,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,UAAU,CACX,CAAC;AACJ,CAAC;AA9BD,sCA8BC;AAED,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAEpC,SAAgB,kBAAkB,CAAC,OAA0B,EAAE,MAAc;IAC3E,qCAAqC;IACrC,IAAI,OAAO,CAAC,GAAG,EAAE;QACf,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;KAC7C;IAED,4CAA4C;IAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAChD,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,sBAAU,CAClB,iBAAiB,EACjB,uCAAuC,CACxC,CAAC;KACH;IACD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,YAAY,CAAC;IAEzD,IAAI,kBAAkB,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;QACpD,IAAA,8BAAQ,EACN,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACjD,mCAAmC,CACtC,CAAC;QACF,OAAO,IAAI,CAAC;KACb;SAAM;QACL,OAAO,cAAI,CAAC,IAAI,CACd,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,SAAS,EAC1B,kBAAkB,CACnB,CAAC;KACH;AACH,CAAC;AA7BD,gDA6BC;AAED,SAAgB,iBAAiB,CAAC,OAA0B,EAAE,MAAc;IAC1E,oCAAoC;IACpC,IAAI,OAAO,CAAC,IAAI,EAAE;QAChB,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,4CAA4C;IAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAChD,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAE/C,IACE,OAAO,aAAa,KAAK,QAAQ;QACjC,aAAa,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAC3C;QACA,IAAA,8BAAQ,EACN,aAAa,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC5C,qCAAqC,CACxC,CAAC;QACF,OAAO,IAAI,CAAC;KACb;SAAM;QACL,MAAM,iBAAiB,GAAG,aAAa,CAAC,WAAW,CAAC;QACpD,IAAI,iBAAiB,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;YACnD,IAAA,8BAAQ,EACN,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBAChD,qCAAqC,CACxC,CAAC;YACF,OAAO,IAAI,CAAC;SACb;QACD,OAAO,cAAI,CAAC,IAAI,CACd,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,SAAS,EAC1B,iBAAiB,CAClB,CAAC;KACH;AACH,CAAC;AAlCD,8CAkCC;AAED,SAAgB,iBAAiB,CAC/B,OAA0B;IAE1B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO,CAAC,YAAY,EAAE;QACxB,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;SAC/C;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,8CAYC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport path from 'path';\n\nimport MSBuildTools from './msbuildtools';\nimport Version from './version';\nimport {newError} from './commandWithProgress';\nimport {RunWindowsOptions, BuildConfig, BuildArch} from '../runWindowsOptions';\nimport {Config} from '@react-native-community/cli-types';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nexport async function buildSolution(\n buildTools: MSBuildTools,\n slnFile: string,\n buildType: BuildConfig,\n buildArch: BuildArch,\n msBuildProps: Record<string, string>,\n verbose: boolean,\n target: 'build' | 'deploy',\n buildLogDirectory?: string,\n singleproc?: boolean,\n) {\n const minVersion = new Version(10, 0, 19041, 0);\n const allVersions = MSBuildTools.getAllAvailableUAPVersions();\n if (!allVersions.some(v => v.gte(minVersion))) {\n throw new CodedError(\n 'MinSDKVersionNotMet',\n 'Must have a minimum Windows SDK version 10.0.19041.0 installed',\n );\n }\n\n await buildTools.buildProject(\n slnFile,\n buildType,\n buildArch,\n msBuildProps,\n verbose,\n target,\n buildLogDirectory,\n singleproc,\n );\n}\n\nconst configErrorString = 'Error: ';\n\nexport function getAppSolutionFile(options: RunWindowsOptions, config: Config) {\n // Use the solution file if specified\n if (options.sln) {\n return path.join(options.root, options.sln);\n }\n\n // Check the answer from react-native config\n const windowsAppConfig = config.project.windows;\n if (!windowsAppConfig) {\n throw new CodedError(\n 'NoWindowsConfig',\n \"Couldn't determine Windows app config\",\n );\n }\n const configSolutionFile = windowsAppConfig.solutionFile;\n\n if (configSolutionFile.startsWith(configErrorString)) {\n newError(\n configSolutionFile.substr(configErrorString.length) +\n ' Optionally, use --sln {slnFile}.',\n );\n return null;\n } else {\n return path.join(\n windowsAppConfig.folder,\n windowsAppConfig.sourceDir,\n configSolutionFile,\n );\n }\n}\n\nexport function getAppProjectFile(options: RunWindowsOptions, config: Config) {\n // Use the project file if specified\n if (options.proj) {\n return path.join(options.root, options.proj);\n }\n\n // Check the answer from react-native config\n const windowsAppConfig = config.project.windows;\n const configProject = windowsAppConfig.project;\n\n if (\n typeof configProject === 'string' &&\n configProject.startsWith(configErrorString)\n ) {\n newError(\n configProject.substr(configErrorString.length) +\n ' Optionally, use --proj {projFile}.',\n );\n return null;\n } else {\n const configProjectFile = configProject.projectFile;\n if (configProjectFile.startsWith(configErrorString)) {\n newError(\n configProjectFile.substr(configErrorString.length) +\n ' Optionally, use --proj {projFile}.',\n );\n return null;\n }\n return path.join(\n windowsAppConfig.folder,\n windowsAppConfig.sourceDir,\n configProjectFile,\n );\n }\n}\n\nexport function parseMsBuildProps(\n options: RunWindowsOptions,\n): Record<string, string> {\n const result: Record<string, string> = {};\n if (options.msbuildprops) {\n const props = options.msbuildprops.split(',');\n for (const prop of props) {\n const propAssignment = prop.split('=');\n result[propAssignment[0]] = propAssignment[1];\n }\n }\n return result;\n}\n"]}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/runWindows/utils/build.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport path from 'path';\n\nimport MSBuildTools from './msbuildtools';\nimport Version from './version';\nimport {newError} from './commandWithProgress';\nimport {RunWindowsOptions, BuildConfig, BuildArch} from '../runWindowsOptions';\nimport {Config} from '@react-native-community/cli-types';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nexport async function buildSolution(\n buildTools: MSBuildTools,\n slnFile: string,\n buildType: BuildConfig,\n buildArch: BuildArch,\n msBuildProps: Record<string, string>,\n verbose: boolean,\n target: 'build' | 'deploy',\n buildLogDirectory?: string,\n singleproc?: boolean,\n) {\n const minVersion = new Version(10, 0, 19041, 0);\n const allVersions = MSBuildTools.getAllAvailableUAPVersions();\n if (!allVersions.some((v) => v.gte(minVersion))) {\n throw new CodedError(\n 'MinSDKVersionNotMet',\n 'Must have a minimum Windows SDK version 10.0.19041.0 installed',\n );\n }\n\n await buildTools.buildProject(\n slnFile,\n buildType,\n buildArch,\n msBuildProps,\n verbose,\n target,\n buildLogDirectory,\n singleproc,\n );\n}\n\nconst configErrorString = 'Error: ';\n\nexport function getAppSolutionFile(options: RunWindowsOptions, config: Config) {\n // Use the solution file if specified\n if (options.sln) {\n return path.join(options.root, options.sln);\n }\n\n // Check the answer from react-native config\n const windowsAppConfig = config.project.windows;\n if (!windowsAppConfig) {\n throw new CodedError(\n 'NoWindowsConfig',\n \"Couldn't determine Windows app config\",\n );\n }\n const configSolutionFile = windowsAppConfig.solutionFile;\n\n if (configSolutionFile.startsWith(configErrorString)) {\n newError(\n configSolutionFile.substr(configErrorString.length) +\n ' Optionally, use --sln {slnFile}.',\n );\n return null;\n } else {\n return path.join(\n windowsAppConfig.folder,\n windowsAppConfig.sourceDir,\n configSolutionFile,\n );\n }\n}\n\nexport function getAppProjectFile(options: RunWindowsOptions, config: Config) {\n // Use the project file if specified\n if (options.proj) {\n return path.join(options.root, options.proj);\n }\n\n // Check the answer from react-native config\n const windowsAppConfig = config.project.windows;\n const configProject = windowsAppConfig.project;\n\n if (\n typeof configProject === 'string' &&\n configProject.startsWith(configErrorString)\n ) {\n newError(\n configProject.substr(configErrorString.length) +\n ' Optionally, use --proj {projFile}.',\n );\n return null;\n } else {\n const configProjectFile = configProject.projectFile;\n if (configProjectFile.startsWith(configErrorString)) {\n newError(\n configProjectFile.substr(configErrorString.length) +\n ' Optionally, use --proj {projFile}.',\n );\n return null;\n }\n return path.join(\n windowsAppConfig.folder,\n windowsAppConfig.sourceDir,\n configProjectFile,\n );\n }\n}\n\nexport function parseMsBuildProps(\n options: RunWindowsOptions,\n): Record<string, string> {\n const result: Record<string, string> = {};\n if (options.msbuildprops) {\n const props = options.msbuildprops.split(',');\n for (const prop of props) {\n const propAssignment = prop.split('=');\n result[propAssignment[0]] = propAssignment[1];\n }\n }\n return result;\n}\n"]}
@@ -56,7 +56,7 @@ function getInstalledWindowsSdks() {
56
56
  function checkWinSdk(windowsTargetVersion) {
57
57
  const installedSdks = getInstalledWindowsSdks();
58
58
  const requiredVersion = getMinimalRequiredVersionFor('windowssdk', windowsTargetVersion);
59
- const hasSdkInstalled = installedSdks.some(installedSdk => installedSdk.eq(requiredVersion));
59
+ const hasSdkInstalled = installedSdks.some((installedSdk) => installedSdk.eq(requiredVersion));
60
60
  if (hasSdkInstalled) {
61
61
  return shortenVersion(requiredVersion);
62
62
  }