@react-native-windows/cli 0.0.0-canary.121 → 0.0.0-canary.124

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 (30) hide show
  1. package/lib-commonjs/config/dependencyConfig.js +1 -1
  2. package/lib-commonjs/config/dependencyConfig.js.map +1 -1
  3. package/lib-commonjs/e2etest/autolink.test.js.map +1 -1
  4. package/lib-commonjs/generator-common/index.js +6 -6
  5. package/lib-commonjs/generator-common/index.js.map +1 -1
  6. package/lib-commonjs/runWindows/runWindows.js +1 -1
  7. package/lib-commonjs/runWindows/runWindows.js.map +1 -1
  8. package/lib-commonjs/runWindows/runWindowsOptions.js +1 -1
  9. package/lib-commonjs/runWindows/runWindowsOptions.js.map +1 -1
  10. package/lib-commonjs/runWindows/utils/autolink.js +19 -19
  11. package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
  12. package/lib-commonjs/runWindows/utils/build.js +1 -1
  13. package/lib-commonjs/runWindows/utils/build.js.map +1 -1
  14. package/lib-commonjs/runWindows/utils/checkRequirements.js +1 -1
  15. package/lib-commonjs/runWindows/utils/checkRequirements.js.map +1 -1
  16. package/lib-commonjs/runWindows/utils/commandWithProgress.js +4 -4
  17. package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +1 -1
  18. package/lib-commonjs/runWindows/utils/deploy.js +7 -7
  19. package/lib-commonjs/runWindows/utils/deploy.js.map +1 -1
  20. package/lib-commonjs/runWindows/utils/msbuildtools.js +4 -4
  21. package/lib-commonjs/runWindows/utils/msbuildtools.js.map +1 -1
  22. package/lib-commonjs/runWindows/utils/version.js +1 -1
  23. package/lib-commonjs/runWindows/utils/version.js.map +1 -1
  24. package/lib-commonjs/runWindows/utils/vsInstalls.js +1 -1
  25. package/lib-commonjs/runWindows/utils/vsInstalls.js.map +1 -1
  26. package/lib-commonjs/runWindows/utils/vstools.js +3 -3
  27. package/lib-commonjs/runWindows/utils/vstools.js.map +1 -1
  28. package/lib-commonjs/runWindows/utils/winappdeploytool.js +2 -2
  29. package/lib-commonjs/runWindows/utils/winappdeploytool.js.map +1 -1
  30. package/package.json +4 -4
@@ -133,7 +133,7 @@ function dependencyConfigWindows(folder, userConfig = {}) {
133
133
  for (const project of result.projects) {
134
134
  // Verifying (req) items
135
135
  let errorFound = false;
136
- alwaysRequired.forEach((item) => {
136
+ alwaysRequired.forEach(item => {
137
137
  if (!(item in project)) {
138
138
  project[item] = `Error: ${item} is required for each project in react-native.config`;
139
139
  errorFound = true;
@@ -1 +1 @@
1
- {"version":3,"file":"dependencyConfig.js","sourceRoot":"","sources":["../../src/config/dependencyConfig.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 {platform} from 'os';\nimport path from 'path';\n\nimport * as configUtils from './configUtils';\n\n/*\n\nreact-native config will generate the following JSON for each native module dependency\nunder node_modules that has a Windows implementation, in order to support auto-linking.\nThis is done heuristically, so if the result isn't quite correct, native module developers\ncan provide a manual override file: react-native.config.js.\n\nSchema for dependencies:\n\nTags:\nauto - Item is always calculated by config. An override file should NEVER provide it.\nreq - Item is required. If an override file exists, it MUST provide it. If no override file exists, config will try to calculate it.\nopt - Item is optional. If an override file exists, it MAY provide it. If no override file exists, config may try to calculate it.\n\n{\n folder: string, // (auto) Absolute path to the module root folder, determined by react-native config, ex: 'c:\\path\\to\\app-name\\node_modules\\my-module'\n sourceDir: string, // (opt, req if projects defined) Relative path to the Windows implementation under folder, ex: 'windows'\n solutionFile: string, // (opt) Relative path to the module's VS solution file under sourceDir, ex: 'MyModule.sln'\n projects: [ // (opt) Array of VS projects that must be added to the consuming app's solution file, so they are built\n {\n projectFile: string, // (req) Relative path to the VS project file under sourceDir, ex: 'MyModule\\MyModule.vcxproj' for 'c:\\path\\to\\app-name\\node_modules\\my-module\\windows\\MyModule\\MyModule.vcxproj'\n directDependency: bool, // (req) Whether to add the project file as a dependency to the consuming app's project file. true for projects that provide native modules\n projectName: string, // (auto) Name of the project, determined from projectFile, ex: 'MyModule'\n projectLang: string, // (auto) Language of the project, cpp or cs, determined from projectFile\n projectGuid: string, // (auto) Project identifier, determined from projectFile\n cppHeaders: [], // (opt) Array of cpp header include lines, ie: 'winrt/MyModule.h', to be transformed into '#include <winrt/MyModule.h>'\n cppPackageProviders: [], // (opt) Array of fully qualified cpp IReactPackageProviders, ie: 'MyModule::ReactPackageProvider'\n csNamespaces: [], // (opt) Array of cs namespaces, ie: 'MyModule', to be transformed into 'using MyModule;'\n csPackageProviders: [], // (opt) Array of fully qualified cs IReactPackageProviders, ie: 'MyModule.ReactPackageProvider'\n },\n ],\n nugetPackages: [ // (opt) Array of nuget packages including native modules that must be added as a dependency to the consuming app. It can be empty, but by its nature it can't be calculated\n {\n packageName: string, // (req) Name of the nuget package to install\n packageVersion: string, // (req) Version of the nuget package to install\n cppHeaders: [], // (req) Array of cpp header include lines, ie: 'winrt/NugetModule.h', to be transformed into '#include <winrt/NugetModule.h>'\n cppPackageProviders: [], // (req) Array of fully qualified cpp IReactPackageProviders, ie: 'NugetModule::ReactPackageProvider'\n csNamespaces: [], // (req) Array of cs namespaces, ie: 'NugetModule', to be transformed into 'using NugetModule;'\n csPackageProviders: [], // (req) Array of fully qualified cs IReactPackageProviders, ie: 'NugetModule.ReactPackageProvider'\n },\n ],\n}\n\nExample react-native.config.js for a 'MyModule':\n\nmodule.exports = {\n dependency: {\n platforms: {\n windows: {\n sourceDir: 'windows',\n solutionFile: 'MyModule.sln',\n projects: [\n {\n projectFile: 'MyModule\\\\MyModule.vcxproj',\n directDependency: true,\n }\n ],\n },\n },\n },\n};\n\n*/\n\nexport interface ProjectDependency {\n projectFile: string;\n directDependency: boolean;\n projectName: string;\n projectLang: 'cpp' | 'cs' | null;\n projectGuid: string | null;\n cppHeaders: string[];\n cppPackageProviders: string[];\n csNamespaces: string[];\n csPackageProviders: string[];\n}\n\nexport interface NuGetPackageDependency {\n packageName: string;\n packageVersion: string;\n cppHeaders: string[];\n cppPackageProviders: string[];\n csNamespaces: string[];\n csPackageProviders: string[];\n}\n\nexport interface WindowsDependencyConfig {\n folder: string;\n sourceDir?: string;\n solutionFile?: string | null;\n projects: ProjectDependency[];\n nugetPackages: NuGetPackageDependency[];\n}\n\n/**\n * Gets the config of any RNW native modules under the target folder.\n * @param userConfig A manually specified override config.\n * @return The config if any RNW native modules exist.\n */\n// Disabled due to existing high cyclomatic complexity\n// eslint-disable-next-line complexity\nexport function dependencyConfigWindows(\n folder: string,\n userConfig: Partial<WindowsDependencyConfig> | null = {},\n): WindowsDependencyConfig | null {\n if (platform() !== 'win32') {\n return null;\n }\n\n if (userConfig === null) {\n return null;\n }\n\n const usingManualProjectsOverride =\n 'projects' in userConfig && Array.isArray(userConfig.projects);\n\n const usingManualNugetPackagesOverride =\n 'nugetPackages' in userConfig && Array.isArray(userConfig.nugetPackages);\n\n const result: WindowsDependencyConfig = {\n folder,\n projects: usingManualProjectsOverride ? userConfig.projects! : [],\n solutionFile: null,\n nugetPackages: usingManualNugetPackagesOverride\n ? userConfig.nugetPackages!\n : [],\n };\n\n let sourceDir: string | null = null;\n if (usingManualProjectsOverride && result.projects.length > 0) {\n // Manually provided projects, so extract the sourceDir\n if (!('sourceDir' in userConfig)) {\n sourceDir =\n 'Error: Source dir is required if projects are specified, but it is not specified in react-native.config.';\n } else if (userConfig.sourceDir === null) {\n sourceDir =\n 'Error: Source dir is required if projects are specified, but it is null in react-native.config.';\n } else {\n sourceDir = path.join(folder, userConfig.sourceDir!);\n }\n } else if (!usingManualProjectsOverride) {\n // No manually provided projects, try to find sourceDir\n if ('sourceDir' in userConfig && userConfig.sourceDir !== null) {\n sourceDir = path.join(folder, userConfig.sourceDir!);\n } else {\n sourceDir = configUtils.findWindowsFolder(folder);\n }\n }\n\n if (sourceDir === null) {\n // Try to salvage the missing sourceDir\n if (result.projects.length === 0 && result.nugetPackages.length > 0) {\n // Only nuget packages, no sourceDir required\n return result;\n } else if (result.projects.length > 0) {\n // Projects overridden but no sourceDir, assume the sourceDir === folder\n sourceDir = folder;\n }\n } else if (sourceDir.startsWith('Error: ')) {\n // Source dir error, bail with error\n result.sourceDir = sourceDir;\n return result;\n }\n\n if (sourceDir === null) {\n // After everything above, if sourceDir is still null,\n // there's nothing more to look for here, bail\n return null;\n }\n\n result.sourceDir = path.relative(folder, sourceDir);\n\n const usingManualSolutionFile = 'solutionFile' in userConfig;\n\n let solutionFile = null;\n if (usingManualSolutionFile && userConfig.solutionFile !== null) {\n // Manually provided solutionFile, so extract it\n solutionFile = path.join(sourceDir, userConfig.solutionFile!);\n } else if (!usingManualSolutionFile) {\n // No manually provided solutionFile, try to find it\n const foundSolutions = configUtils.findSolutionFiles(sourceDir);\n if (foundSolutions.length === 1) {\n solutionFile = path.join(sourceDir, foundSolutions[0]);\n }\n }\n\n result.solutionFile =\n solutionFile !== null ? path.relative(sourceDir, solutionFile) : null;\n\n if (usingManualProjectsOverride) {\n // react-native.config used, fill out (auto) items for each provided project, verify (req) items are present\n\n const alwaysRequired: Array<keyof ProjectDependency> = [\n 'projectFile',\n 'directDependency',\n ];\n\n for (const project of result.projects) {\n // Verifying (req) items\n let errorFound = false;\n\n alwaysRequired.forEach((item) => {\n if (!(item in project)) {\n (project[\n item\n ] as string) = `Error: ${item} is required for each project in react-native.config`;\n errorFound = true;\n }\n });\n\n if (errorFound) {\n break;\n }\n\n const projectFile = path.join(sourceDir, project.projectFile);\n\n const projectContents = configUtils.readProjectFile(projectFile);\n\n project.projectFile = path.relative(sourceDir, projectFile);\n\n // Calculating (auto) items\n project.projectName = configUtils.getProjectName(\n projectFile,\n projectContents,\n );\n project.projectLang = configUtils.getProjectLanguage(projectFile);\n project.projectGuid = configUtils.getProjectGuid(projectContents);\n\n if (project.directDependency) {\n // Calculating more (auto) items\n\n const projectNamespace =\n configUtils.getProjectNamespace(projectContents);\n\n if (projectNamespace !== null) {\n const cppNamespace = projectNamespace!.replace(/\\./g, '::');\n const csNamespace = projectNamespace!.replace(/::/g, '.');\n\n project.cppHeaders = project.cppHeaders || [`winrt/${csNamespace}.h`];\n project.cppPackageProviders = project.cppPackageProviders || [\n `${cppNamespace}::ReactPackageProvider`,\n ];\n project.csNamespaces = project.csNamespaces || [`${csNamespace}`];\n project.csPackageProviders = project.csPackageProviders || [\n `${csNamespace}.ReactPackageProvider`,\n ];\n }\n }\n }\n } else {\n // No react-native.config, try to heuristically find any projects\n\n const foundProjects = configUtils.findDependencyProjectFiles(sourceDir);\n\n for (const foundProject of foundProjects) {\n const projectFile = path.join(sourceDir, foundProject);\n\n const projectContents = configUtils.readProjectFile(projectFile);\n\n const projectType = configUtils.getProjectType(\n projectFile,\n projectContents,\n );\n\n if (\n projectType === 'dynamiclibrary' ||\n projectType === 'winmdobj' ||\n projectType === 'library'\n ) {\n const projectLang = configUtils.getProjectLanguage(projectFile);\n\n const projectName = configUtils.getProjectName(\n projectFile,\n projectContents,\n );\n\n const projectGuid = configUtils.getProjectGuid(projectContents);\n\n const projectNamespace =\n configUtils.getProjectNamespace(projectContents);\n\n const directDependency = true;\n\n const cppHeaders: string[] = [];\n const cppPackageProviders: string[] = [];\n const csNamespaces: string[] = [];\n const csPackageProviders: string[] = [];\n\n if (projectNamespace !== null) {\n const cppNamespace = projectNamespace.replace(/\\./g, '::');\n const csNamespace = projectNamespace.replace(/::/g, '.');\n\n cppHeaders.push(`winrt/${csNamespace}.h`);\n cppPackageProviders.push(`${cppNamespace}::ReactPackageProvider`);\n csNamespaces.push(`${csNamespace}`);\n csPackageProviders.push(`${csNamespace}.ReactPackageProvider`);\n }\n\n result.projects.push({\n projectFile: path.relative(sourceDir, projectFile),\n projectName,\n projectLang,\n projectGuid,\n directDependency,\n cppHeaders,\n cppPackageProviders,\n csNamespaces,\n csPackageProviders,\n });\n } else {\n const projectPath = path.relative(sourceDir, projectFile);\n result.projects.push({\n projectFile: `Error: ${projectPath} is type '${projectType}'`,\n directDependency: false,\n projectName: '',\n projectLang: null,\n projectGuid: null,\n cppHeaders: [],\n cppPackageProviders: [],\n csNamespaces: [],\n csPackageProviders: [],\n });\n }\n }\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"dependencyConfig.js","sourceRoot":"","sources":["../../src/config/dependencyConfig.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 {platform} from 'os';\nimport path from 'path';\n\nimport * as configUtils from './configUtils';\n\n/*\n\nreact-native config will generate the following JSON for each native module dependency\nunder node_modules that has a Windows implementation, in order to support auto-linking.\nThis is done heuristically, so if the result isn't quite correct, native module developers\ncan provide a manual override file: react-native.config.js.\n\nSchema for dependencies:\n\nTags:\nauto - Item is always calculated by config. An override file should NEVER provide it.\nreq - Item is required. If an override file exists, it MUST provide it. If no override file exists, config will try to calculate it.\nopt - Item is optional. If an override file exists, it MAY provide it. If no override file exists, config may try to calculate it.\n\n{\n folder: string, // (auto) Absolute path to the module root folder, determined by react-native config, ex: 'c:\\path\\to\\app-name\\node_modules\\my-module'\n sourceDir: string, // (opt, req if projects defined) Relative path to the Windows implementation under folder, ex: 'windows'\n solutionFile: string, // (opt) Relative path to the module's VS solution file under sourceDir, ex: 'MyModule.sln'\n projects: [ // (opt) Array of VS projects that must be added to the consuming app's solution file, so they are built\n {\n projectFile: string, // (req) Relative path to the VS project file under sourceDir, ex: 'MyModule\\MyModule.vcxproj' for 'c:\\path\\to\\app-name\\node_modules\\my-module\\windows\\MyModule\\MyModule.vcxproj'\n directDependency: bool, // (req) Whether to add the project file as a dependency to the consuming app's project file. true for projects that provide native modules\n projectName: string, // (auto) Name of the project, determined from projectFile, ex: 'MyModule'\n projectLang: string, // (auto) Language of the project, cpp or cs, determined from projectFile\n projectGuid: string, // (auto) Project identifier, determined from projectFile\n cppHeaders: [], // (opt) Array of cpp header include lines, ie: 'winrt/MyModule.h', to be transformed into '#include <winrt/MyModule.h>'\n cppPackageProviders: [], // (opt) Array of fully qualified cpp IReactPackageProviders, ie: 'MyModule::ReactPackageProvider'\n csNamespaces: [], // (opt) Array of cs namespaces, ie: 'MyModule', to be transformed into 'using MyModule;'\n csPackageProviders: [], // (opt) Array of fully qualified cs IReactPackageProviders, ie: 'MyModule.ReactPackageProvider'\n },\n ],\n nugetPackages: [ // (opt) Array of nuget packages including native modules that must be added as a dependency to the consuming app. It can be empty, but by its nature it can't be calculated\n {\n packageName: string, // (req) Name of the nuget package to install\n packageVersion: string, // (req) Version of the nuget package to install\n cppHeaders: [], // (req) Array of cpp header include lines, ie: 'winrt/NugetModule.h', to be transformed into '#include <winrt/NugetModule.h>'\n cppPackageProviders: [], // (req) Array of fully qualified cpp IReactPackageProviders, ie: 'NugetModule::ReactPackageProvider'\n csNamespaces: [], // (req) Array of cs namespaces, ie: 'NugetModule', to be transformed into 'using NugetModule;'\n csPackageProviders: [], // (req) Array of fully qualified cs IReactPackageProviders, ie: 'NugetModule.ReactPackageProvider'\n },\n ],\n}\n\nExample react-native.config.js for a 'MyModule':\n\nmodule.exports = {\n dependency: {\n platforms: {\n windows: {\n sourceDir: 'windows',\n solutionFile: 'MyModule.sln',\n projects: [\n {\n projectFile: 'MyModule\\\\MyModule.vcxproj',\n directDependency: true,\n }\n ],\n },\n },\n },\n};\n\n*/\n\nexport interface ProjectDependency {\n projectFile: string;\n directDependency: boolean;\n projectName: string;\n projectLang: 'cpp' | 'cs' | null;\n projectGuid: string | null;\n cppHeaders: string[];\n cppPackageProviders: string[];\n csNamespaces: string[];\n csPackageProviders: string[];\n}\n\nexport interface NuGetPackageDependency {\n packageName: string;\n packageVersion: string;\n cppHeaders: string[];\n cppPackageProviders: string[];\n csNamespaces: string[];\n csPackageProviders: string[];\n}\n\nexport interface WindowsDependencyConfig {\n folder: string;\n sourceDir?: string;\n solutionFile?: string | null;\n projects: ProjectDependency[];\n nugetPackages: NuGetPackageDependency[];\n}\n\n/**\n * Gets the config of any RNW native modules under the target folder.\n * @param userConfig A manually specified override config.\n * @return The config if any RNW native modules exist.\n */\n// Disabled due to existing high cyclomatic complexity\n// eslint-disable-next-line complexity\nexport function dependencyConfigWindows(\n folder: string,\n userConfig: Partial<WindowsDependencyConfig> | null = {},\n): WindowsDependencyConfig | null {\n if (platform() !== 'win32') {\n return null;\n }\n\n if (userConfig === null) {\n return null;\n }\n\n const usingManualProjectsOverride =\n 'projects' in userConfig && Array.isArray(userConfig.projects);\n\n const usingManualNugetPackagesOverride =\n 'nugetPackages' in userConfig && Array.isArray(userConfig.nugetPackages);\n\n const result: WindowsDependencyConfig = {\n folder,\n projects: usingManualProjectsOverride ? userConfig.projects! : [],\n solutionFile: null,\n nugetPackages: usingManualNugetPackagesOverride\n ? userConfig.nugetPackages!\n : [],\n };\n\n let sourceDir: string | null = null;\n if (usingManualProjectsOverride && result.projects.length > 0) {\n // Manually provided projects, so extract the sourceDir\n if (!('sourceDir' in userConfig)) {\n sourceDir =\n 'Error: Source dir is required if projects are specified, but it is not specified in react-native.config.';\n } else if (userConfig.sourceDir === null) {\n sourceDir =\n 'Error: Source dir is required if projects are specified, but it is null in react-native.config.';\n } else {\n sourceDir = path.join(folder, userConfig.sourceDir!);\n }\n } else if (!usingManualProjectsOverride) {\n // No manually provided projects, try to find sourceDir\n if ('sourceDir' in userConfig && userConfig.sourceDir !== null) {\n sourceDir = path.join(folder, userConfig.sourceDir!);\n } else {\n sourceDir = configUtils.findWindowsFolder(folder);\n }\n }\n\n if (sourceDir === null) {\n // Try to salvage the missing sourceDir\n if (result.projects.length === 0 && result.nugetPackages.length > 0) {\n // Only nuget packages, no sourceDir required\n return result;\n } else if (result.projects.length > 0) {\n // Projects overridden but no sourceDir, assume the sourceDir === folder\n sourceDir = folder;\n }\n } else if (sourceDir.startsWith('Error: ')) {\n // Source dir error, bail with error\n result.sourceDir = sourceDir;\n return result;\n }\n\n if (sourceDir === null) {\n // After everything above, if sourceDir is still null,\n // there's nothing more to look for here, bail\n return null;\n }\n\n result.sourceDir = path.relative(folder, sourceDir);\n\n const usingManualSolutionFile = 'solutionFile' in userConfig;\n\n let solutionFile = null;\n if (usingManualSolutionFile && userConfig.solutionFile !== null) {\n // Manually provided solutionFile, so extract it\n solutionFile = path.join(sourceDir, userConfig.solutionFile!);\n } else if (!usingManualSolutionFile) {\n // No manually provided solutionFile, try to find it\n const foundSolutions = configUtils.findSolutionFiles(sourceDir);\n if (foundSolutions.length === 1) {\n solutionFile = path.join(sourceDir, foundSolutions[0]);\n }\n }\n\n result.solutionFile =\n solutionFile !== null ? path.relative(sourceDir, solutionFile) : null;\n\n if (usingManualProjectsOverride) {\n // react-native.config used, fill out (auto) items for each provided project, verify (req) items are present\n\n const alwaysRequired: Array<keyof ProjectDependency> = [\n 'projectFile',\n 'directDependency',\n ];\n\n for (const project of result.projects) {\n // Verifying (req) items\n let errorFound = false;\n\n alwaysRequired.forEach(item => {\n if (!(item in project)) {\n (project[\n item\n ] as string) = `Error: ${item} is required for each project in react-native.config`;\n errorFound = true;\n }\n });\n\n if (errorFound) {\n break;\n }\n\n const projectFile = path.join(sourceDir, project.projectFile);\n\n const projectContents = configUtils.readProjectFile(projectFile);\n\n project.projectFile = path.relative(sourceDir, projectFile);\n\n // Calculating (auto) items\n project.projectName = configUtils.getProjectName(\n projectFile,\n projectContents,\n );\n project.projectLang = configUtils.getProjectLanguage(projectFile);\n project.projectGuid = configUtils.getProjectGuid(projectContents);\n\n if (project.directDependency) {\n // Calculating more (auto) items\n\n const projectNamespace =\n configUtils.getProjectNamespace(projectContents);\n\n if (projectNamespace !== null) {\n const cppNamespace = projectNamespace!.replace(/\\./g, '::');\n const csNamespace = projectNamespace!.replace(/::/g, '.');\n\n project.cppHeaders = project.cppHeaders || [`winrt/${csNamespace}.h`];\n project.cppPackageProviders = project.cppPackageProviders || [\n `${cppNamespace}::ReactPackageProvider`,\n ];\n project.csNamespaces = project.csNamespaces || [`${csNamespace}`];\n project.csPackageProviders = project.csPackageProviders || [\n `${csNamespace}.ReactPackageProvider`,\n ];\n }\n }\n }\n } else {\n // No react-native.config, try to heuristically find any projects\n\n const foundProjects = configUtils.findDependencyProjectFiles(sourceDir);\n\n for (const foundProject of foundProjects) {\n const projectFile = path.join(sourceDir, foundProject);\n\n const projectContents = configUtils.readProjectFile(projectFile);\n\n const projectType = configUtils.getProjectType(\n projectFile,\n projectContents,\n );\n\n if (\n projectType === 'dynamiclibrary' ||\n projectType === 'winmdobj' ||\n projectType === 'library'\n ) {\n const projectLang = configUtils.getProjectLanguage(projectFile);\n\n const projectName = configUtils.getProjectName(\n projectFile,\n projectContents,\n );\n\n const projectGuid = configUtils.getProjectGuid(projectContents);\n\n const projectNamespace =\n configUtils.getProjectNamespace(projectContents);\n\n const directDependency = true;\n\n const cppHeaders: string[] = [];\n const cppPackageProviders: string[] = [];\n const csNamespaces: string[] = [];\n const csPackageProviders: string[] = [];\n\n if (projectNamespace !== null) {\n const cppNamespace = projectNamespace.replace(/\\./g, '::');\n const csNamespace = projectNamespace.replace(/::/g, '.');\n\n cppHeaders.push(`winrt/${csNamespace}.h`);\n cppPackageProviders.push(`${cppNamespace}::ReactPackageProvider`);\n csNamespaces.push(`${csNamespace}`);\n csPackageProviders.push(`${csNamespace}.ReactPackageProvider`);\n }\n\n result.projects.push({\n projectFile: path.relative(sourceDir, projectFile),\n projectName,\n projectLang,\n projectGuid,\n directDependency,\n cppHeaders,\n cppPackageProviders,\n csNamespaces,\n csPackageProviders,\n });\n } else {\n const projectPath = path.relative(sourceDir, projectFile);\n result.projects.push({\n projectFile: `Error: ${projectPath} is type '${projectType}'`,\n directDependency: false,\n projectName: '',\n projectLang: null,\n projectGuid: null,\n cppHeaders: [],\n cppPackageProviders: [],\n csNamespaces: [],\n csPackageProviders: [],\n });\n }\n }\n }\n\n return result;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"autolink.test.js","sourceRoot":"","sources":["../../src/e2etest/autolink.test.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';\nimport {commanderNameToOptionName} from '@react-native-windows/telemetry';\nimport {projectConfigWindows} from '../config/projectConfig';\nimport {\n AutolinkWindows,\n autolinkOptions,\n AutoLinkOptions,\n} from '../runWindows/utils/autolink';\nimport {DOMParser} from '@xmldom/xmldom';\nimport {ensureCppAppProject, ensureWinUI3Project} from './projectConfig.utils';\n\ntest('autolink with no windows project', () => {\n expect(() => {\n // eslint-disable-next-line no-new\n new AutolinkTest({}, {}, {check: true, logging: false});\n }).toThrowError();\n});\n\ntest('autolink with incomplete windows project', () => {\n expect(() => {\n const autolink = new AutolinkTest(\n {windows: {}},\n {},\n {check: true, logging: false},\n );\n autolink.validateRequiredAppProperties();\n }).toThrowError();\n});\n\nclass AutolinkTest extends AutolinkWindows {\n public getWindowsProjectConfig() {\n return this.windowsAppConfig;\n }\n public packagesConfig = '';\n public experimentalFeaturesProps = '';\n protected getPackagesConfigXml() {\n return {\n path: 'packages.config',\n content: new DOMParser().parseFromString(\n this.packagesConfig,\n 'application/xml',\n ),\n };\n }\n protected getExperimentalFeaturesPropsXml() {\n return {\n path: 'ExperimentalFeatures.props',\n content: new DOMParser().parseFromString(\n this.experimentalFeaturesProps,\n 'application/xml',\n ),\n };\n }\n protected async updateFile(filepath: string, content: string) {\n if (filepath === 'packages.config') {\n this.packagesConfig = content;\n } else if (filepath === 'ExperimentalFeatures.props') {\n this.experimentalFeaturesProps = content;\n } else {\n throw new Error(`Unknown path: ${filepath}`);\n }\n return true;\n }\n}\n\ntest('autolink fixup sln', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.'}},\n {},\n {check: true, logging: false, sln: 'foo'},\n );\n expect(autolink.getWindowsProjectConfig().solutionFile).toBeUndefined();\n expect(() => {\n autolink.validateRequiredAppProperties();\n }).toThrow();\n autolink.fixUpForSlnOption();\n expect(autolink.getWindowsProjectConfig().solutionFile).toEqual('foo');\n expect(() => {\n autolink.validateRequiredAppProperties();\n }).toThrow();\n});\n\ntest('autolink fixup proj', async (done) => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {},\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n expect(autolink.getWindowsProjectConfig().solutionFile).toEqual('foo.sln');\n expect(autolink.getWindowsProjectConfig().project).toBeUndefined();\n\n const folder = path.resolve('src/e2etest/projects/', 'WithWinUI3');\n await ensureWinUI3Project(folder);\n expect(() => {\n autolink.validateRequiredProjectProperties();\n }).toThrow();\n autolink.fixUpForProjOption();\n\n const projectConfig = autolink.getWindowsProjectConfig().project;\n expect(projectConfig).not.toBeUndefined();\n expect(projectConfig.projectName).toEqual('WithWinUI3');\n autolink.validateRequiredProjectProperties();\n done();\n});\n\ntest('empty cpp autolink dependencies', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {},\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toEqual('');\n expect(replacements.cppPackageProviders).toEqual(\n '\\n UNREFERENCED_PARAMETER(packageProviders);',\n );\n});\n\ntest('one invalid cpp autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {},\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toEqual('');\n expect(replacements.cppPackageProviders).toEqual(\n '\\n UNREFERENCED_PARAMETER(packageProviders);',\n );\n});\n\ntest('one invalid cs autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {},\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/SimpleCSharpApp/windows/SimpleCSharpApp/SimpleCSharpApp.csproj',\n },\n );\n const replacements = autolink.getCsReplacements();\n expect(replacements.csUsingNamespaces).toEqual('');\n expect(replacements.csReactPackageProviders).toEqual('');\n});\n\ntest('one valid cpp autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {\n sourceDir: __dirname,\n projects: [\n {\n directDependency: true,\n projectFile: 'superModule.vcxproj',\n cppHeaders: ['Garfield.h', 'Snoopy.h'],\n cppPackageProviders: ['FamousAnimalCartoons'],\n },\n ],\n },\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toMatch(/#include <Garfield.h>/);\n expect(replacements.cppIncludes).toMatch(/#include <Snoopy.h>/);\n expect(replacements.cppPackageProviders).toContain(\n 'packageProviders.Append(winrt::FamousAnimalCartoons())',\n );\n});\n\ntest('one valid cs autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {\n sourceDir: __dirname,\n projects: [\n {\n directDependency: true,\n csNamespaces: ['Garfield'],\n projectFile: 'superModule.vcxproj',\n cppHeaders: ['Garfield.h', 'Snoopy.h'],\n csPackageProviders: ['FamousAnimalCartoons'],\n },\n ],\n },\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/SimpleCSharpApp/windows/SimpleCSharpApp/SimpleCSharpApp.csproj',\n },\n );\n const replacements = autolink.getCsReplacements();\n expect(replacements.csUsingNamespaces).toContain('using Garfield;');\n expect(replacements.csReactPackageProviders).toContain(\n 'packageProviders.Add(new FamousAnimalCartoons())',\n );\n});\n\ntest('ensureXAMLDialect - useWinUI3=true in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async (done) => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n\n // Create project with UseWinUI3 == false in ExperimentalFeatures.props\n await ensureCppAppProject(folder, 'WithWinUI3', false, false, false);\n\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n // Set useWinUI3=true in react-native.config.js\n config.useWinUI3 = true;\n\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures =\n '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>';\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).not.toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('ensureXAMLDialect - useWinUI3=false in react-native.config.js, useWinUI3=true in ExperimentalFeatures.props', async (done) => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n config.useWinUI3 = false;\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures =\n '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>';\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=true in ExperimentalFeatures.props', async (done) => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n delete config.useWinUI3;\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures =\n '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>';\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).not.toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async (done) => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n delete config.useWinUI3;\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/><package id=\"Microsoft.WindowsAppSDK\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>`;\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('Indirect autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {\n sourceDir: __dirname,\n projects: [\n {\n directDependency: true,\n projectFile: 'superModule.vcxproj',\n cppHeaders: ['Garfield.h', 'Snoopy.h'],\n cppPackageProviders: ['FamousAnimalCartoons'],\n },\n {\n directDependency: false,\n projectFile: 'indirect.vcxproj',\n },\n ],\n },\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/WithIndirectDependency/windows/WithIndirectDependency/WithIndirectDependency.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toMatch(/#include <Garfield.h>/);\n expect(replacements.cppIncludes).toMatch(/#include <Snoopy.h>/);\n expect(replacements.cppPackageProviders).toContain(\n 'packageProviders.Append(winrt::FamousAnimalCartoons())',\n );\n});\n\nfunction validateOptionName(\n name: string,\n optionName: keyof AutoLinkOptions,\n): boolean {\n // Do not add a default case here. Every item must explicitly return true\n switch (optionName) {\n case 'check':\n case 'logging':\n case 'sln':\n case 'proj':\n case 'telemetry':\n return true;\n }\n throw new Error(\n `Unable to find ${optionName} to match '${name}' in AutoLinkOptions.`,\n );\n}\n\ntest('autolinkOptions - validate options', () => {\n for (const commandOption of autolinkOptions) {\n // Validate names\n expect(commandOption.name).not.toBeNull();\n expect(commandOption.name.startsWith('--')).toBe(true);\n expect(commandOption.name).toBe(commandOption.name.trim());\n // Validate defaults\n if (\n !commandOption.name.endsWith(' [string]') &&\n !commandOption.name.endsWith(' [number]')\n ) {\n // Commander ignores defaults for flags, so leave undefined to prevent confusion\n expect(commandOption.default).toBeUndefined();\n }\n // Validate description\n expect(commandOption.description).not.toBeNull();\n expect(commandOption.description!).toBe(commandOption.description!.trim());\n\n // Validate all command options are present in AutoLinkOptions\n const optionName = commanderNameToOptionName(commandOption.name);\n expect(\n validateOptionName(\n commandOption.name,\n optionName as keyof AutoLinkOptions,\n ),\n ).toBe(true);\n }\n});\n"]}
1
+ {"version":3,"file":"autolink.test.js","sourceRoot":"","sources":["../../src/e2etest/autolink.test.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';\nimport {commanderNameToOptionName} from '@react-native-windows/telemetry';\nimport {projectConfigWindows} from '../config/projectConfig';\nimport {\n AutolinkWindows,\n autolinkOptions,\n AutoLinkOptions,\n} from '../runWindows/utils/autolink';\nimport {DOMParser} from '@xmldom/xmldom';\nimport {ensureCppAppProject, ensureWinUI3Project} from './projectConfig.utils';\n\ntest('autolink with no windows project', () => {\n expect(() => {\n // eslint-disable-next-line no-new\n new AutolinkTest({}, {}, {check: true, logging: false});\n }).toThrowError();\n});\n\ntest('autolink with incomplete windows project', () => {\n expect(() => {\n const autolink = new AutolinkTest(\n {windows: {}},\n {},\n {check: true, logging: false},\n );\n autolink.validateRequiredAppProperties();\n }).toThrowError();\n});\n\nclass AutolinkTest extends AutolinkWindows {\n public getWindowsProjectConfig() {\n return this.windowsAppConfig;\n }\n public packagesConfig = '';\n public experimentalFeaturesProps = '';\n protected getPackagesConfigXml() {\n return {\n path: 'packages.config',\n content: new DOMParser().parseFromString(\n this.packagesConfig,\n 'application/xml',\n ),\n };\n }\n protected getExperimentalFeaturesPropsXml() {\n return {\n path: 'ExperimentalFeatures.props',\n content: new DOMParser().parseFromString(\n this.experimentalFeaturesProps,\n 'application/xml',\n ),\n };\n }\n protected async updateFile(filepath: string, content: string) {\n if (filepath === 'packages.config') {\n this.packagesConfig = content;\n } else if (filepath === 'ExperimentalFeatures.props') {\n this.experimentalFeaturesProps = content;\n } else {\n throw new Error(`Unknown path: ${filepath}`);\n }\n return true;\n }\n}\n\ntest('autolink fixup sln', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.'}},\n {},\n {check: true, logging: false, sln: 'foo'},\n );\n expect(autolink.getWindowsProjectConfig().solutionFile).toBeUndefined();\n expect(() => {\n autolink.validateRequiredAppProperties();\n }).toThrow();\n autolink.fixUpForSlnOption();\n expect(autolink.getWindowsProjectConfig().solutionFile).toEqual('foo');\n expect(() => {\n autolink.validateRequiredAppProperties();\n }).toThrow();\n});\n\ntest('autolink fixup proj', async done => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {},\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n expect(autolink.getWindowsProjectConfig().solutionFile).toEqual('foo.sln');\n expect(autolink.getWindowsProjectConfig().project).toBeUndefined();\n\n const folder = path.resolve('src/e2etest/projects/', 'WithWinUI3');\n await ensureWinUI3Project(folder);\n expect(() => {\n autolink.validateRequiredProjectProperties();\n }).toThrow();\n autolink.fixUpForProjOption();\n\n const projectConfig = autolink.getWindowsProjectConfig().project;\n expect(projectConfig).not.toBeUndefined();\n expect(projectConfig.projectName).toEqual('WithWinUI3');\n autolink.validateRequiredProjectProperties();\n done();\n});\n\ntest('empty cpp autolink dependencies', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {},\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toEqual('');\n expect(replacements.cppPackageProviders).toEqual(\n '\\n UNREFERENCED_PARAMETER(packageProviders);',\n );\n});\n\ntest('one invalid cpp autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {},\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toEqual('');\n expect(replacements.cppPackageProviders).toEqual(\n '\\n UNREFERENCED_PARAMETER(packageProviders);',\n );\n});\n\ntest('one invalid cs autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {},\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/SimpleCSharpApp/windows/SimpleCSharpApp/SimpleCSharpApp.csproj',\n },\n );\n const replacements = autolink.getCsReplacements();\n expect(replacements.csUsingNamespaces).toEqual('');\n expect(replacements.csReactPackageProviders).toEqual('');\n});\n\ntest('one valid cpp autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {\n sourceDir: __dirname,\n projects: [\n {\n directDependency: true,\n projectFile: 'superModule.vcxproj',\n cppHeaders: ['Garfield.h', 'Snoopy.h'],\n cppPackageProviders: ['FamousAnimalCartoons'],\n },\n ],\n },\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/WithWinUI3/windows/WithWinUI3/WithWinUI3.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toMatch(/#include <Garfield.h>/);\n expect(replacements.cppIncludes).toMatch(/#include <Snoopy.h>/);\n expect(replacements.cppPackageProviders).toContain(\n 'packageProviders.Append(winrt::FamousAnimalCartoons())',\n );\n});\n\ntest('one valid cs autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {\n sourceDir: __dirname,\n projects: [\n {\n directDependency: true,\n csNamespaces: ['Garfield'],\n projectFile: 'superModule.vcxproj',\n cppHeaders: ['Garfield.h', 'Snoopy.h'],\n csPackageProviders: ['FamousAnimalCartoons'],\n },\n ],\n },\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/SimpleCSharpApp/windows/SimpleCSharpApp/SimpleCSharpApp.csproj',\n },\n );\n const replacements = autolink.getCsReplacements();\n expect(replacements.csUsingNamespaces).toContain('using Garfield;');\n expect(replacements.csReactPackageProviders).toContain(\n 'packageProviders.Add(new FamousAnimalCartoons())',\n );\n});\n\ntest('ensureXAMLDialect - useWinUI3=true in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async done => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n\n // Create project with UseWinUI3 == false in ExperimentalFeatures.props\n await ensureCppAppProject(folder, 'WithWinUI3', false, false, false);\n\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n // Set useWinUI3=true in react-native.config.js\n config.useWinUI3 = true;\n\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures =\n '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>';\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).not.toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('ensureXAMLDialect - useWinUI3=false in react-native.config.js, useWinUI3=true in ExperimentalFeatures.props', async done => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n config.useWinUI3 = false;\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures =\n '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>';\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=true in ExperimentalFeatures.props', async done => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n delete config.useWinUI3;\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures =\n '<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>';\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).not.toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async done => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\n delete config.useWinUI3;\n const al = new AutolinkTest(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n al.experimentalFeaturesProps = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>`;\n al.packagesConfig = `<packages><package id=\"SuperPkg\" version=\"42\"/><package id=\"Microsoft.WindowsAppSDK\"/></packages>`;\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const expectedExperimentalFeatures = `<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>`;\n expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);\n\n // example packages.config:\n // <packages>\n // <package id=\"SuperPkg\" version=\"42\"/>\n // <package id=\"Microsoft.WindowsAppSDK\" version=\"1.0.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WindowsAppSDK');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');\n\n done();\n});\n\ntest('Indirect autolink dependency', () => {\n const autolink = new AutolinkTest(\n {windows: {folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln'}},\n {\n superModule: {\n name: 'superModule',\n root: 'theRoot',\n platforms: {\n windows: {\n sourceDir: __dirname,\n projects: [\n {\n directDependency: true,\n projectFile: 'superModule.vcxproj',\n cppHeaders: ['Garfield.h', 'Snoopy.h'],\n cppPackageProviders: ['FamousAnimalCartoons'],\n },\n {\n directDependency: false,\n projectFile: 'indirect.vcxproj',\n },\n ],\n },\n },\n assets: [],\n hooks: {},\n params: [],\n },\n },\n {\n check: true,\n logging: false,\n proj: 'projects/WithIndirectDependency/windows/WithIndirectDependency/WithIndirectDependency.vcxproj',\n },\n );\n const replacements = autolink.getCppReplacements();\n expect(replacements.cppIncludes).toMatch(/#include <Garfield.h>/);\n expect(replacements.cppIncludes).toMatch(/#include <Snoopy.h>/);\n expect(replacements.cppPackageProviders).toContain(\n 'packageProviders.Append(winrt::FamousAnimalCartoons())',\n );\n});\n\nfunction validateOptionName(\n name: string,\n optionName: keyof AutoLinkOptions,\n): boolean {\n // Do not add a default case here. Every item must explicitly return true\n switch (optionName) {\n case 'check':\n case 'logging':\n case 'sln':\n case 'proj':\n case 'telemetry':\n return true;\n }\n throw new Error(\n `Unable to find ${optionName} to match '${name}' in AutoLinkOptions.`,\n );\n}\n\ntest('autolinkOptions - validate options', () => {\n for (const commandOption of autolinkOptions) {\n // Validate names\n expect(commandOption.name).not.toBeNull();\n expect(commandOption.name.startsWith('--')).toBe(true);\n expect(commandOption.name).toBe(commandOption.name.trim());\n // Validate defaults\n if (\n !commandOption.name.endsWith(' [string]') &&\n !commandOption.name.endsWith(' [number]')\n ) {\n // Commander ignores defaults for flags, so leave undefined to prevent confusion\n expect(commandOption.default).toBeUndefined();\n }\n // Validate description\n expect(commandOption.description).not.toBeNull();\n expect(commandOption.description!).toBe(commandOption.description!.trim());\n\n // Validate all command options are present in AutoLinkOptions\n const optionName = commanderNameToOptionName(commandOption.name);\n expect(\n validateOptionName(\n commandOption.name,\n optionName as keyof AutoLinkOptions,\n ),\n ).toBe(true);\n }\n});\n"]}
@@ -21,7 +21,7 @@ function walk(current) {
21
21
  }
22
22
  const files = fs_1.default
23
23
  .readdirSync(current)
24
- .map((child) => walk(path_1.default.join(current, child)));
24
+ .map(child => walk(path_1.default.join(current, child)));
25
25
  const result = [];
26
26
  return result.concat.apply([current], files);
27
27
  }
@@ -51,12 +51,12 @@ function resolveContents(srcPath, replacements) {
51
51
  }
52
52
  if (replacements.useMustache) {
53
53
  content = mustache_1.default.render(content, replacements);
54
- (replacements.regExpPatternsToRemove || []).forEach((regexPattern) => {
54
+ (replacements.regExpPatternsToRemove || []).forEach(regexPattern => {
55
55
  content = content.replace(new RegExp(regexPattern, 'g'), '');
56
56
  });
57
57
  }
58
58
  else {
59
- Object.keys(replacements).forEach((regex) => {
59
+ Object.keys(replacements).forEach(regex => {
60
60
  content = content.replace(new RegExp(regex, 'g'), replacements[regex]);
61
61
  });
62
62
  }
@@ -109,7 +109,7 @@ async function copyAndReplace(srcPath, destPath, replacements, contentChangedCal
109
109
  shouldOverwrite = await contentChangedCallback(destPath, contentChanged);
110
110
  }
111
111
  if (shouldOverwrite === 'overwrite') {
112
- copyBinaryFile(srcPath, destPath, (err) => {
112
+ copyBinaryFile(srcPath, destPath, err => {
113
113
  if (err) {
114
114
  throw err;
115
115
  }
@@ -157,13 +157,13 @@ function copyBinaryFile(srcPath, destPath, cb) {
157
157
  let cbCalled = false;
158
158
  const srcPermissions = fs_1.default.statSync(srcPath).mode;
159
159
  const readStream = fs_1.default.createReadStream(srcPath);
160
- readStream.on('error', (err) => {
160
+ readStream.on('error', err => {
161
161
  done(err);
162
162
  });
163
163
  const writeStream = fs_1.default.createWriteStream(destPath, {
164
164
  mode: srcPermissions,
165
165
  });
166
- writeStream.on('error', (err) => {
166
+ writeStream.on('error', err => {
167
167
  done(err);
168
168
  });
169
169
  writeStream.on('close', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator-common/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport chalk from 'chalk';\nimport prompts from 'prompts';\nimport path from 'path';\nimport mustache from 'mustache';\nimport {CodedError} from '@react-native-windows/telemetry';\n\n/**\n * Text to replace, + config options\n */\nexport type Replacements = {\n useMustache?: boolean;\n regExpPatternsToRemove?: RegExp[];\n [key: string]: any;\n};\n\nfunction walk(current: string): string[] {\n if (!fs.lstatSync(current).isDirectory()) {\n return [current];\n }\n\n const files = fs\n .readdirSync(current)\n .map((child) => walk(path.join(current, child)));\n const result: string[] = [];\n return result.concat.apply([current], files);\n}\n\n/**\n * Get a source file and replace parts of its contents.\n * @param srcPath Path to the source file.\n * @param replacements e.g. {'TextToBeReplaced': 'Replacement'}\n * @return The contents of the file with the replacements applied.\n */\nexport function resolveContents(\n srcPath: string,\n replacements: Replacements,\n): string {\n let content = fs.readFileSync(srcPath, 'utf8');\n\n if (content.includes('\\r\\n')) {\n // CRLF file, make sure multiline replacements are also CRLF\n for (const key of Object.keys(replacements)) {\n if (typeof replacements[key] === 'string') {\n replacements[key] = replacements[key].replace(/(?<!\\r)\\n/g, '\\r\\n');\n }\n }\n } else {\n // LF file, make sure multiline replacements are also LF\n for (const key of Object.keys(replacements)) {\n if (typeof replacements[key] === 'string') {\n replacements[key] = replacements[key].replace(/\\r\\n/g, '\\n');\n }\n }\n }\n\n if (replacements.useMustache) {\n content = mustache.render(content, replacements);\n (replacements.regExpPatternsToRemove || []).forEach((regexPattern) => {\n content = content.replace(new RegExp(regexPattern, 'g'), '');\n });\n } else {\n Object.keys(replacements).forEach((regex) => {\n content = content.replace(new RegExp(regex, 'g'), replacements[regex]);\n });\n }\n return content;\n}\n\n// Binary files, don't process these (avoid decoding as utf8)\nconst binaryExtensions = ['.png', '.jar', '.keystore'];\n\ntype ContentChangedCallbackOption = 'identical' | 'changed' | 'new' | null;\n\ntype ContentChangedCallback = (\n path: string,\n option: ContentChangedCallbackOption,\n) => Promise<'keep' | 'overwrite'>;\n\n/**\n * Copy a file to given destination, replacing parts of its contents.\n * @param srcPath Path to a file to be copied.\n * @param destPath Destination path.\n * @param replacements: e.g. {'TextToBeReplaced': 'Replacement'}\n * @param contentChangedCallback\n * Used when upgrading projects. Based on if file contents would change\n * when being replaced, allows the caller to specify whether the file\n * should be replaced or not.\n * If null, files will be overwritten.\n * Function(path, 'identical' | 'changed' | 'new') => 'keep' | 'overwrite'\n */\nexport async function copyAndReplace(\n srcPath: string,\n destPath: string,\n replacements: Replacements,\n contentChangedCallback: ContentChangedCallback | null,\n) {\n if (fs.lstatSync(srcPath).isDirectory()) {\n if (!fs.existsSync(destPath)) {\n fs.mkdirSync(destPath);\n }\n // Not recursive\n return;\n }\n\n const extension = path.extname(srcPath);\n if (binaryExtensions.includes(extension)) {\n // Binary file\n let shouldOverwrite = 'overwrite';\n if (contentChangedCallback) {\n const newContentBuffer = fs.readFileSync(srcPath);\n let contentChanged: ContentChangedCallbackOption = 'identical';\n try {\n const origContentBuffer = fs.readFileSync(destPath);\n if (Buffer.compare(origContentBuffer, newContentBuffer) !== 0) {\n contentChanged = 'changed';\n }\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n contentChanged = 'new';\n } else {\n throw err;\n }\n }\n shouldOverwrite = await contentChangedCallback(destPath, contentChanged);\n }\n if (shouldOverwrite === 'overwrite') {\n copyBinaryFile(srcPath, destPath, (err) => {\n if (err) {\n throw err;\n }\n });\n }\n } else {\n // Text file\n const srcPermissions = fs.statSync(srcPath).mode;\n const content = resolveContents(srcPath, replacements);\n\n let shouldOverwrite = 'overwrite';\n if (contentChangedCallback) {\n // Check if contents changed and ask to overwrite\n let contentChanged: ContentChangedCallbackOption = 'identical';\n try {\n const origContent = fs.readFileSync(destPath, 'utf8');\n if (content !== origContent) {\n // logger.info('Content changed: ' + destPath);\n contentChanged = 'changed';\n }\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n contentChanged = 'new';\n } else {\n throw err;\n }\n }\n shouldOverwrite = await contentChangedCallback(destPath, contentChanged);\n }\n if (shouldOverwrite === 'overwrite') {\n fs.writeFileSync(destPath, content, {\n encoding: 'utf8',\n mode: srcPermissions,\n });\n }\n }\n}\n\n/**\n * Same as 'cp' on Unix. Don't do any replacements.\n */\nfunction copyBinaryFile(\n srcPath: string,\n destPath: string,\n cb: (err?: Error) => void,\n) {\n let cbCalled = false;\n const srcPermissions = fs.statSync(srcPath).mode;\n const readStream = fs.createReadStream(srcPath);\n readStream.on('error', (err) => {\n done(err);\n });\n const writeStream = fs.createWriteStream(destPath, {\n mode: srcPermissions,\n });\n writeStream.on('error', (err) => {\n done(err);\n });\n writeStream.on('close', () => {\n done();\n });\n readStream.pipe(writeStream);\n function done(err?: Error) {\n if (!cbCalled) {\n cb(err);\n cbCalled = true;\n }\n }\n}\n\nexport function createDir(destPath: string) {\n if (!fs.existsSync(destPath)) {\n fs.mkdirSync(destPath);\n }\n}\n\nexport async function copyAndReplaceWithChangedCallback(\n srcPath: string,\n destRoot: string,\n relativeDestPath: string,\n replacements?: Record<string, string>,\n alwaysOverwrite?: boolean,\n) {\n if (!replacements) {\n replacements = {};\n }\n const contentChangedCallback: ContentChangedCallback = alwaysOverwrite\n ? (_, contentChanged) =>\n alwaysOverwriteContentChangedCallback(\n srcPath,\n relativeDestPath,\n contentChanged,\n )\n : (_, contentChanged) =>\n upgradeFileContentChangedCallback(\n srcPath,\n relativeDestPath,\n contentChanged,\n );\n\n await copyAndReplace(\n srcPath,\n path.join(destRoot, relativeDestPath),\n replacements,\n contentChangedCallback,\n );\n}\n\nexport async function copyAndReplaceAll(\n srcPath: string,\n destPath: string,\n relativeDestDir: string,\n replacements: Replacements,\n alwaysOverwrite: boolean,\n) {\n for (const absoluteSrcFilePath of walk(srcPath)) {\n const filename = path.relative(srcPath, absoluteSrcFilePath);\n const relativeDestPath = path.join(relativeDestDir, filename);\n await copyAndReplaceWithChangedCallback(\n absoluteSrcFilePath,\n destPath,\n relativeDestPath,\n replacements,\n alwaysOverwrite,\n );\n }\n}\n\nasync function alwaysOverwriteContentChangedCallback(\n absoluteSrcFilePath: string,\n relativeDestPath: string,\n contentChanged: ContentChangedCallbackOption,\n): Promise<'keep' | 'overwrite'> {\n if (contentChanged === 'new') {\n console.log(`${chalk.bold('new')} ${relativeDestPath}`);\n return 'overwrite';\n }\n if (contentChanged === 'changed') {\n console.log(\n `${chalk.bold('changed')} ${relativeDestPath} ${chalk.yellow(\n '[overwriting]',\n )}`,\n );\n return 'overwrite';\n }\n if (contentChanged === 'identical') {\n return 'keep';\n }\n throw new CodedError(\n 'Autolinking',\n `Unknown file changed state: ${relativeDestPath}, ${contentChanged}`,\n );\n}\n\nasync function upgradeFileContentChangedCallback(\n absoluteSrcFilePath: string,\n relativeDestPath: string,\n contentChanged: ContentChangedCallbackOption,\n): Promise<'keep' | 'overwrite'> {\n if (contentChanged === 'new') {\n console.log(`${chalk.bold('new')} ${relativeDestPath}`);\n return 'overwrite';\n }\n if (contentChanged === 'changed') {\n console.log(\n `${chalk.bold(relativeDestPath)} ` +\n `has changed in the new version.\\nDo you want to keep your ${relativeDestPath} or replace it with the ` +\n 'latest version?\\nMake sure you have any changes you made to this file saved somewhere.\\n' +\n `You can see the new version here: ${absoluteSrcFilePath}`,\n );\n\n const {shouldReplace} = await prompts([\n {\n name: 'shouldReplace',\n type: 'confirm',\n message: `Do you want to replace ${relativeDestPath}?`,\n initial: false,\n },\n ]);\n\n return shouldReplace ? 'overwrite' : 'keep';\n }\n if (contentChanged === 'identical') {\n return 'keep';\n }\n throw new CodedError(\n 'Autolinking',\n `Unknown file changed state: ${relativeDestPath}, ${contentChanged}`,\n );\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator-common/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport chalk from 'chalk';\nimport prompts from 'prompts';\nimport path from 'path';\nimport mustache from 'mustache';\nimport {CodedError} from '@react-native-windows/telemetry';\n\n/**\n * Text to replace, + config options\n */\nexport type Replacements = {\n useMustache?: boolean;\n regExpPatternsToRemove?: RegExp[];\n [key: string]: any;\n};\n\nfunction walk(current: string): string[] {\n if (!fs.lstatSync(current).isDirectory()) {\n return [current];\n }\n\n const files = fs\n .readdirSync(current)\n .map(child => walk(path.join(current, child)));\n const result: string[] = [];\n return result.concat.apply([current], files);\n}\n\n/**\n * Get a source file and replace parts of its contents.\n * @param srcPath Path to the source file.\n * @param replacements e.g. {'TextToBeReplaced': 'Replacement'}\n * @return The contents of the file with the replacements applied.\n */\nexport function resolveContents(\n srcPath: string,\n replacements: Replacements,\n): string {\n let content = fs.readFileSync(srcPath, 'utf8');\n\n if (content.includes('\\r\\n')) {\n // CRLF file, make sure multiline replacements are also CRLF\n for (const key of Object.keys(replacements)) {\n if (typeof replacements[key] === 'string') {\n replacements[key] = replacements[key].replace(/(?<!\\r)\\n/g, '\\r\\n');\n }\n }\n } else {\n // LF file, make sure multiline replacements are also LF\n for (const key of Object.keys(replacements)) {\n if (typeof replacements[key] === 'string') {\n replacements[key] = replacements[key].replace(/\\r\\n/g, '\\n');\n }\n }\n }\n\n if (replacements.useMustache) {\n content = mustache.render(content, replacements);\n (replacements.regExpPatternsToRemove || []).forEach(regexPattern => {\n content = content.replace(new RegExp(regexPattern, 'g'), '');\n });\n } else {\n Object.keys(replacements).forEach(regex => {\n content = content.replace(new RegExp(regex, 'g'), replacements[regex]);\n });\n }\n return content;\n}\n\n// Binary files, don't process these (avoid decoding as utf8)\nconst binaryExtensions = ['.png', '.jar', '.keystore'];\n\ntype ContentChangedCallbackOption = 'identical' | 'changed' | 'new' | null;\n\ntype ContentChangedCallback = (\n path: string,\n option: ContentChangedCallbackOption,\n) => Promise<'keep' | 'overwrite'>;\n\n/**\n * Copy a file to given destination, replacing parts of its contents.\n * @param srcPath Path to a file to be copied.\n * @param destPath Destination path.\n * @param replacements: e.g. {'TextToBeReplaced': 'Replacement'}\n * @param contentChangedCallback\n * Used when upgrading projects. Based on if file contents would change\n * when being replaced, allows the caller to specify whether the file\n * should be replaced or not.\n * If null, files will be overwritten.\n * Function(path, 'identical' | 'changed' | 'new') => 'keep' | 'overwrite'\n */\nexport async function copyAndReplace(\n srcPath: string,\n destPath: string,\n replacements: Replacements,\n contentChangedCallback: ContentChangedCallback | null,\n) {\n if (fs.lstatSync(srcPath).isDirectory()) {\n if (!fs.existsSync(destPath)) {\n fs.mkdirSync(destPath);\n }\n // Not recursive\n return;\n }\n\n const extension = path.extname(srcPath);\n if (binaryExtensions.includes(extension)) {\n // Binary file\n let shouldOverwrite = 'overwrite';\n if (contentChangedCallback) {\n const newContentBuffer = fs.readFileSync(srcPath);\n let contentChanged: ContentChangedCallbackOption = 'identical';\n try {\n const origContentBuffer = fs.readFileSync(destPath);\n if (Buffer.compare(origContentBuffer, newContentBuffer) !== 0) {\n contentChanged = 'changed';\n }\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n contentChanged = 'new';\n } else {\n throw err;\n }\n }\n shouldOverwrite = await contentChangedCallback(destPath, contentChanged);\n }\n if (shouldOverwrite === 'overwrite') {\n copyBinaryFile(srcPath, destPath, err => {\n if (err) {\n throw err;\n }\n });\n }\n } else {\n // Text file\n const srcPermissions = fs.statSync(srcPath).mode;\n const content = resolveContents(srcPath, replacements);\n\n let shouldOverwrite = 'overwrite';\n if (contentChangedCallback) {\n // Check if contents changed and ask to overwrite\n let contentChanged: ContentChangedCallbackOption = 'identical';\n try {\n const origContent = fs.readFileSync(destPath, 'utf8');\n if (content !== origContent) {\n // logger.info('Content changed: ' + destPath);\n contentChanged = 'changed';\n }\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n contentChanged = 'new';\n } else {\n throw err;\n }\n }\n shouldOverwrite = await contentChangedCallback(destPath, contentChanged);\n }\n if (shouldOverwrite === 'overwrite') {\n fs.writeFileSync(destPath, content, {\n encoding: 'utf8',\n mode: srcPermissions,\n });\n }\n }\n}\n\n/**\n * Same as 'cp' on Unix. Don't do any replacements.\n */\nfunction copyBinaryFile(\n srcPath: string,\n destPath: string,\n cb: (err?: Error) => void,\n) {\n let cbCalled = false;\n const srcPermissions = fs.statSync(srcPath).mode;\n const readStream = fs.createReadStream(srcPath);\n readStream.on('error', err => {\n done(err);\n });\n const writeStream = fs.createWriteStream(destPath, {\n mode: srcPermissions,\n });\n writeStream.on('error', err => {\n done(err);\n });\n writeStream.on('close', () => {\n done();\n });\n readStream.pipe(writeStream);\n function done(err?: Error) {\n if (!cbCalled) {\n cb(err);\n cbCalled = true;\n }\n }\n}\n\nexport function createDir(destPath: string) {\n if (!fs.existsSync(destPath)) {\n fs.mkdirSync(destPath);\n }\n}\n\nexport async function copyAndReplaceWithChangedCallback(\n srcPath: string,\n destRoot: string,\n relativeDestPath: string,\n replacements?: Record<string, string>,\n alwaysOverwrite?: boolean,\n) {\n if (!replacements) {\n replacements = {};\n }\n const contentChangedCallback: ContentChangedCallback = alwaysOverwrite\n ? (_, contentChanged) =>\n alwaysOverwriteContentChangedCallback(\n srcPath,\n relativeDestPath,\n contentChanged,\n )\n : (_, contentChanged) =>\n upgradeFileContentChangedCallback(\n srcPath,\n relativeDestPath,\n contentChanged,\n );\n\n await copyAndReplace(\n srcPath,\n path.join(destRoot, relativeDestPath),\n replacements,\n contentChangedCallback,\n );\n}\n\nexport async function copyAndReplaceAll(\n srcPath: string,\n destPath: string,\n relativeDestDir: string,\n replacements: Replacements,\n alwaysOverwrite: boolean,\n) {\n for (const absoluteSrcFilePath of walk(srcPath)) {\n const filename = path.relative(srcPath, absoluteSrcFilePath);\n const relativeDestPath = path.join(relativeDestDir, filename);\n await copyAndReplaceWithChangedCallback(\n absoluteSrcFilePath,\n destPath,\n relativeDestPath,\n replacements,\n alwaysOverwrite,\n );\n }\n}\n\nasync function alwaysOverwriteContentChangedCallback(\n absoluteSrcFilePath: string,\n relativeDestPath: string,\n contentChanged: ContentChangedCallbackOption,\n): Promise<'keep' | 'overwrite'> {\n if (contentChanged === 'new') {\n console.log(`${chalk.bold('new')} ${relativeDestPath}`);\n return 'overwrite';\n }\n if (contentChanged === 'changed') {\n console.log(\n `${chalk.bold('changed')} ${relativeDestPath} ${chalk.yellow(\n '[overwriting]',\n )}`,\n );\n return 'overwrite';\n }\n if (contentChanged === 'identical') {\n return 'keep';\n }\n throw new CodedError(\n 'Autolinking',\n `Unknown file changed state: ${relativeDestPath}, ${contentChanged}`,\n );\n}\n\nasync function upgradeFileContentChangedCallback(\n absoluteSrcFilePath: string,\n relativeDestPath: string,\n contentChanged: ContentChangedCallbackOption,\n): Promise<'keep' | 'overwrite'> {\n if (contentChanged === 'new') {\n console.log(`${chalk.bold('new')} ${relativeDestPath}`);\n return 'overwrite';\n }\n if (contentChanged === 'changed') {\n console.log(\n `${chalk.bold(relativeDestPath)} ` +\n `has changed in the new version.\\nDo you want to keep your ${relativeDestPath} or replace it with the ` +\n 'latest version?\\nMake sure you have any changes you made to this file saved somewhere.\\n' +\n `You can see the new version here: ${absoluteSrcFilePath}`,\n );\n\n const {shouldReplace} = await prompts([\n {\n name: 'shouldReplace',\n type: 'confirm',\n message: `Do you want to replace ${relativeDestPath}?`,\n initial: false,\n },\n ]);\n\n return shouldReplace ? 'overwrite' : 'keep';\n }\n if (contentChanged === 'identical') {\n return 'keep';\n }\n throw new CodedError(\n 'Autolinking',\n `Unknown file changed state: ${relativeDestPath}, ${contentChanged}`,\n );\n}\n"]}
@@ -128,7 +128,7 @@ async function runWindows(args, config, options) {
128
128
  console.log(output.trimEnd());
129
129
  console.log(' Installed UWP SDKs:');
130
130
  const sdks = msbuildtools_1.default.getAllAvailableUAPVersions();
131
- sdks.forEach((version) => console.log(' ' + version));
131
+ sdks.forEach(version => console.log(' ' + version));
132
132
  }
133
133
  catch (ex) {
134
134
  runWindowsError =
@@ -1 +1 @@
1
- {"version":3,"file":"runWindows.js","sourceRoot":"","sources":["../../src/runWindows/runWindows.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport {Telemetry, CodedError} from '@react-native-windows/telemetry';\n\nimport * as build from './utils/build';\nimport chalk from 'chalk';\nimport * as deploy from './utils/deploy';\nimport {\n newError,\n newInfo,\n newWarn,\n setExitProcessWithError,\n} from './utils/commandWithProgress';\nimport {\n getDefaultOptions,\n startTelemetrySession,\n endTelemetrySession,\n} from './utils/telemetryHelpers';\nimport * as info from './utils/info';\nimport MSBuildTools from './utils/msbuildtools';\n\nimport {Command, Config} from '@react-native-community/cli-types';\nimport {runWindowsOptions, RunWindowsOptions} from './runWindowsOptions';\n\nimport {autolinkWindowsInternal, AutoLinkOptions} from './utils/autolink';\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 */\n// eslint-disable-next-line complexity\nfunction optionSanitizer(key: keyof RunWindowsOptions, 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 'root':\n case 'target':\n case 'sln':\n case 'proj':\n case 'buildLogDirectory':\n return value === undefined ? false : true; // Strip PII\n case 'msbuildprops':\n return value === undefined ? 0 : value.split(',').length; // Convert to count\n case 'release':\n case 'arch':\n case 'singleproc':\n case 'emulator':\n case 'device':\n case 'remoteDebugging':\n case 'logging':\n case 'packager':\n case 'bundle':\n case 'launch':\n case 'autolink':\n case 'build':\n case 'deploy':\n case 'deployFromLayout':\n case 'info':\n case 'directDebugging':\n case 'telemetry':\n return value === undefined ? false : value; // Return value\n }\n}\n\n/**\n * Get the extra props to add to the `run-windows` telemetry event.\n * @returns The extra props.\n */\nasync function getExtraProps(): Promise<Record<string, any>> {\n const extraProps: Record<string, any> = {\n phase: runWindowsPhase,\n hasRunRnwDependencies,\n msBuildProps: evaluateMSBuildPropsCallback\n ? evaluateMSBuildPropsCallback()\n : {},\n };\n return extraProps;\n}\n\n/**\n * Labels used by telemetry to represent current operation\n */\ntype RunWindowsPhase =\n | 'None'\n | 'Info'\n | 'FindSolution'\n | 'FindBuildTools'\n | 'Autolink'\n | 'RestorePackagesConfig'\n | 'Build'\n | 'Deploy';\n\nlet runWindowsPhase: RunWindowsPhase = 'None';\n\nlet hasRunRnwDependencies: boolean = false;\n\nlet evaluateMSBuildPropsCallback:\n | (() => Record<string, string> | null)\n | undefined;\n\n/**\n * The function run when calling `react-native run-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 runWindows(\n args: string[],\n config: Config,\n options: RunWindowsOptions,\n) {\n await startTelemetrySession(\n 'run-windows',\n config,\n options,\n getDefaultOptions(config, runWindowsOptions),\n optionSanitizer,\n );\n\n // https://github.com/yarnpkg/yarn/issues/8334 - Yarn on Windows breaks apps that read from the environment variables\n // Yarn will run node via CreateProcess and pass npm_config_* variables in lowercase without unifying their value\n // with their possibly existing uppercase counterparts. This breaks programs that read from the environment block\n // and write to a case-insensitive dictionary since they expect to encounter each variable only once.\n // The values of the lowercase variables are the one npm actually wants to use, plus they are seeded from the\n // uppercase variable values one if there are no overrides.\n delete process.env.NPM_CONFIG_CACHE;\n delete process.env.NPM_CONFIG_PREFIX;\n\n if (process.env.LocalAppData) {\n hasRunRnwDependencies = fs.existsSync(\n path.join(process.env.LocalAppData, 'rnw-dependencies.txt'),\n ); // CODESYNC \\vnext\\scripts\\rnw-dependencies.ps1\n }\n\n let runWindowsError: Error | undefined;\n if (options.info) {\n runWindowsPhase = 'Info';\n try {\n const output = await info.getEnvironmentInfo();\n console.log(output.trimEnd());\n console.log(' Installed UWP SDKs:');\n const sdks = MSBuildTools.getAllAvailableUAPVersions();\n sdks.forEach((version) => console.log(' ' + version));\n } catch (ex) {\n runWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(runWindowsError);\n\n newError(\n 'Unable to print environment info.\\n' + runWindowsError.toString(),\n );\n }\n await endTelemetrySession(runWindowsError, getExtraProps);\n setExitProcessWithError(options.logging, runWindowsError);\n return;\n }\n\n try {\n await runWindowsInternal(args, config, options);\n } catch (ex) {\n runWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(runWindowsError);\n\n if (!hasRunRnwDependencies) {\n const rnwPkgJsonPath = require.resolve(\n 'react-native-windows/package.json',\n {\n paths: [process.cwd(), __dirname],\n },\n );\n const rnwDependenciesPath = path.join(\n path.dirname(rnwPkgJsonPath),\n 'scripts/rnw-dependencies.ps1',\n );\n\n newError(\n `It is possible your installation is missing required software dependencies. Dependencies can be automatically installed by running ${rnwDependenciesPath} from an elevated PowerShell prompt.\\nFor more information, go to http://aka.ms/rnw-deps`,\n );\n }\n }\n await endTelemetrySession(runWindowsError, getExtraProps);\n setExitProcessWithError(options.logging, runWindowsError);\n}\n\n/**\n * Performs build deploy and launch of RNW 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 runWindowsInternal(\n args: string[],\n config: Config,\n options: RunWindowsOptions,\n) {\n const verbose = options.logging === true;\n\n if (verbose) {\n newInfo('Verbose: ON');\n }\n\n // Get the solution file\n let slnFile: string | null;\n runWindowsPhase = 'FindSolution';\n try {\n slnFile = build.getAppSolutionFile(options, config);\n } catch (e) {\n newError(`Couldn't get app solution information. ${(e as Error).message}`);\n throw e;\n }\n\n let buildTools: MSBuildTools;\n runWindowsPhase = 'FindBuildTools';\n try {\n buildTools = MSBuildTools.findAvailableVersion(options.arch, verbose);\n } catch (error) {\n newWarn('No public VS release found');\n // Try prerelease\n try {\n newInfo('Trying pre-release VS');\n buildTools = MSBuildTools.findAvailableVersion(\n options.arch,\n verbose,\n true, // preRelease\n );\n } catch (e) {\n newError((e as Error).message);\n throw error;\n }\n }\n\n // Set up the callback to capture MSBuild properties after the command completes\n evaluateMSBuildPropsCallback = () => {\n const projectFile = build.getAppProjectFile(options, config);\n if (projectFile) {\n if (verbose) {\n newInfo('Gathering MSBuild data for telemetry.');\n }\n\n const msBuildPropertiesJsonPath = path.resolve(\n path.dirname(projectFile),\n 'Generated Files',\n 'msbuildproperties.g.json',\n );\n\n if (fs.existsSync(msBuildPropertiesJsonPath)) {\n if (verbose) {\n newInfo('Loading properties from msbuildproperties.g.json');\n }\n return fs.readJsonFileSync(msBuildPropertiesJsonPath);\n }\n\n if (verbose) {\n newInfo('Unable to find msbuildproperties.g.json');\n }\n }\n\n return {};\n };\n\n // Restore packages.config files for dependencies that don't support PackageReference.\n runWindowsPhase = 'RestorePackagesConfig';\n const buildType = deploy.getBuildConfiguration(options);\n try {\n await buildTools.restorePackageConfigs(slnFile, options.arch, buildType);\n } catch (e) {\n newError(\n `Couldn't restore found packages.config instances. ${\n (e as Error).message\n }`,\n );\n throw e;\n }\n\n if (options.autolink) {\n runWindowsPhase = 'Autolink';\n try {\n const autolinkArgs: string[] = [];\n const autolinkConfig = config;\n const autoLinkOptions: AutoLinkOptions = {\n logging: options.logging,\n check: false,\n proj: options.proj,\n sln: options.sln,\n telemetry: options.telemetry,\n };\n await autolinkWindowsInternal(\n autolinkArgs,\n autolinkConfig,\n autoLinkOptions,\n );\n } catch (e) {\n newError(`Autolinking failed. ${(e as Error).message}`);\n throw e;\n }\n } else {\n newInfo('Autolink step is skipped');\n }\n\n if (options.build) {\n runWindowsPhase = 'Build';\n if (!slnFile) {\n newError(\n 'Visual Studio Solution file not found. Maybe run \"npx react-native-windows-init\" first?',\n );\n throw new CodedError('NoSolution', 'Cannot find solution file');\n }\n\n // Get build/deploy options\n const msBuildProps = build.parseMsBuildProps(options);\n\n // Disable the autolink check since we just ran it\n msBuildProps.RunAutolinkCheck = 'false';\n\n try {\n await build.buildSolution(\n buildTools,\n slnFile!,\n buildType,\n options.arch,\n msBuildProps,\n verbose,\n 'build',\n options.buildLogDirectory,\n options.singleproc,\n );\n } catch (e) {\n newError(\n `Build failed with message ${\n (e as Error).message\n }. Check your build configuration.`,\n );\n if ((e as any).logfile) {\n console.log('See', chalk.bold((e as any).logfile));\n }\n throw e;\n }\n } else {\n newInfo('Build step is skipped');\n }\n\n if (shouldLaunchPackager(options)) {\n await deploy.startServerInNewWindow(options, verbose);\n }\n\n if (options.deploy) {\n runWindowsPhase = 'Deploy';\n if (!slnFile) {\n newError(\n 'Visual Studio Solution file not found. Maybe run \"npx react-native-windows-init\" first?',\n );\n throw new CodedError('NoSolution', 'Cannot find solution file');\n }\n\n try {\n if (options.device || options.emulator || options.target) {\n await deploy.deployToDevice(options, verbose, config);\n } else {\n await deploy.deployToDesktop(options, verbose, config, buildTools);\n }\n } catch (e) {\n newError(`Failed to deploy${e ? `: ${(e as Error).message}` : ''}`);\n throw e;\n }\n } else {\n newInfo('Deploy step is skipped');\n }\n}\n\nfunction shouldLaunchPackager(options: RunWindowsOptions): boolean {\n return (\n options.packager === true &&\n options.launch === true &&\n options.release !== true\n );\n}\n\n/*\n// Example of running the Windows Command\nrunWindows({\n root: 'C:\\\\github\\\\hack\\\\myapp',\n debug: true,\n arch: 'x86',\n nugetPath: 'C:\\\\github\\\\react\\\\react-native-windows\\\\local-cli\\\\runWindows\\\\.nuget\\\\nuget.exe'\n});\n*/\n\n/**\n * Starts the app on a connected Windows emulator or mobile device.\n */\nexport const runWindowsCommand: Command = {\n name: 'run-windows',\n description:\n 'builds your app and starts it on a connected Windows desktop, emulator or device',\n func: runWindows,\n options: runWindowsOptions,\n};\n"]}
1
+ {"version":3,"file":"runWindows.js","sourceRoot":"","sources":["../../src/runWindows/runWindows.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport {Telemetry, CodedError} from '@react-native-windows/telemetry';\n\nimport * as build from './utils/build';\nimport chalk from 'chalk';\nimport * as deploy from './utils/deploy';\nimport {\n newError,\n newInfo,\n newWarn,\n setExitProcessWithError,\n} from './utils/commandWithProgress';\nimport {\n getDefaultOptions,\n startTelemetrySession,\n endTelemetrySession,\n} from './utils/telemetryHelpers';\nimport * as info from './utils/info';\nimport MSBuildTools from './utils/msbuildtools';\n\nimport {Command, Config} from '@react-native-community/cli-types';\nimport {runWindowsOptions, RunWindowsOptions} from './runWindowsOptions';\n\nimport {autolinkWindowsInternal, AutoLinkOptions} from './utils/autolink';\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 */\n// eslint-disable-next-line complexity\nfunction optionSanitizer(key: keyof RunWindowsOptions, 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 'root':\n case 'target':\n case 'sln':\n case 'proj':\n case 'buildLogDirectory':\n return value === undefined ? false : true; // Strip PII\n case 'msbuildprops':\n return value === undefined ? 0 : value.split(',').length; // Convert to count\n case 'release':\n case 'arch':\n case 'singleproc':\n case 'emulator':\n case 'device':\n case 'remoteDebugging':\n case 'logging':\n case 'packager':\n case 'bundle':\n case 'launch':\n case 'autolink':\n case 'build':\n case 'deploy':\n case 'deployFromLayout':\n case 'info':\n case 'directDebugging':\n case 'telemetry':\n return value === undefined ? false : value; // Return value\n }\n}\n\n/**\n * Get the extra props to add to the `run-windows` telemetry event.\n * @returns The extra props.\n */\nasync function getExtraProps(): Promise<Record<string, any>> {\n const extraProps: Record<string, any> = {\n phase: runWindowsPhase,\n hasRunRnwDependencies,\n msBuildProps: evaluateMSBuildPropsCallback\n ? evaluateMSBuildPropsCallback()\n : {},\n };\n return extraProps;\n}\n\n/**\n * Labels used by telemetry to represent current operation\n */\ntype RunWindowsPhase =\n | 'None'\n | 'Info'\n | 'FindSolution'\n | 'FindBuildTools'\n | 'Autolink'\n | 'RestorePackagesConfig'\n | 'Build'\n | 'Deploy';\n\nlet runWindowsPhase: RunWindowsPhase = 'None';\n\nlet hasRunRnwDependencies: boolean = false;\n\nlet evaluateMSBuildPropsCallback:\n | (() => Record<string, string> | null)\n | undefined;\n\n/**\n * The function run when calling `react-native run-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 runWindows(\n args: string[],\n config: Config,\n options: RunWindowsOptions,\n) {\n await startTelemetrySession(\n 'run-windows',\n config,\n options,\n getDefaultOptions(config, runWindowsOptions),\n optionSanitizer,\n );\n\n // https://github.com/yarnpkg/yarn/issues/8334 - Yarn on Windows breaks apps that read from the environment variables\n // Yarn will run node via CreateProcess and pass npm_config_* variables in lowercase without unifying their value\n // with their possibly existing uppercase counterparts. This breaks programs that read from the environment block\n // and write to a case-insensitive dictionary since they expect to encounter each variable only once.\n // The values of the lowercase variables are the one npm actually wants to use, plus they are seeded from the\n // uppercase variable values one if there are no overrides.\n delete process.env.NPM_CONFIG_CACHE;\n delete process.env.NPM_CONFIG_PREFIX;\n\n if (process.env.LocalAppData) {\n hasRunRnwDependencies = fs.existsSync(\n path.join(process.env.LocalAppData, 'rnw-dependencies.txt'),\n ); // CODESYNC \\vnext\\scripts\\rnw-dependencies.ps1\n }\n\n let runWindowsError: Error | undefined;\n if (options.info) {\n runWindowsPhase = 'Info';\n try {\n const output = await info.getEnvironmentInfo();\n console.log(output.trimEnd());\n console.log(' Installed UWP SDKs:');\n const sdks = MSBuildTools.getAllAvailableUAPVersions();\n sdks.forEach(version => console.log(' ' + version));\n } catch (ex) {\n runWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(runWindowsError);\n\n newError(\n 'Unable to print environment info.\\n' + runWindowsError.toString(),\n );\n }\n await endTelemetrySession(runWindowsError, getExtraProps);\n setExitProcessWithError(options.logging, runWindowsError);\n return;\n }\n\n try {\n await runWindowsInternal(args, config, options);\n } catch (ex) {\n runWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(runWindowsError);\n\n if (!hasRunRnwDependencies) {\n const rnwPkgJsonPath = require.resolve(\n 'react-native-windows/package.json',\n {\n paths: [process.cwd(), __dirname],\n },\n );\n const rnwDependenciesPath = path.join(\n path.dirname(rnwPkgJsonPath),\n 'scripts/rnw-dependencies.ps1',\n );\n\n newError(\n `It is possible your installation is missing required software dependencies. Dependencies can be automatically installed by running ${rnwDependenciesPath} from an elevated PowerShell prompt.\\nFor more information, go to http://aka.ms/rnw-deps`,\n );\n }\n }\n await endTelemetrySession(runWindowsError, getExtraProps);\n setExitProcessWithError(options.logging, runWindowsError);\n}\n\n/**\n * Performs build deploy and launch of RNW 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 runWindowsInternal(\n args: string[],\n config: Config,\n options: RunWindowsOptions,\n) {\n const verbose = options.logging === true;\n\n if (verbose) {\n newInfo('Verbose: ON');\n }\n\n // Get the solution file\n let slnFile: string | null;\n runWindowsPhase = 'FindSolution';\n try {\n slnFile = build.getAppSolutionFile(options, config);\n } catch (e) {\n newError(`Couldn't get app solution information. ${(e as Error).message}`);\n throw e;\n }\n\n let buildTools: MSBuildTools;\n runWindowsPhase = 'FindBuildTools';\n try {\n buildTools = MSBuildTools.findAvailableVersion(options.arch, verbose);\n } catch (error) {\n newWarn('No public VS release found');\n // Try prerelease\n try {\n newInfo('Trying pre-release VS');\n buildTools = MSBuildTools.findAvailableVersion(\n options.arch,\n verbose,\n true, // preRelease\n );\n } catch (e) {\n newError((e as Error).message);\n throw error;\n }\n }\n\n // Set up the callback to capture MSBuild properties after the command completes\n evaluateMSBuildPropsCallback = () => {\n const projectFile = build.getAppProjectFile(options, config);\n if (projectFile) {\n if (verbose) {\n newInfo('Gathering MSBuild data for telemetry.');\n }\n\n const msBuildPropertiesJsonPath = path.resolve(\n path.dirname(projectFile),\n 'Generated Files',\n 'msbuildproperties.g.json',\n );\n\n if (fs.existsSync(msBuildPropertiesJsonPath)) {\n if (verbose) {\n newInfo('Loading properties from msbuildproperties.g.json');\n }\n return fs.readJsonFileSync(msBuildPropertiesJsonPath);\n }\n\n if (verbose) {\n newInfo('Unable to find msbuildproperties.g.json');\n }\n }\n\n return {};\n };\n\n // Restore packages.config files for dependencies that don't support PackageReference.\n runWindowsPhase = 'RestorePackagesConfig';\n const buildType = deploy.getBuildConfiguration(options);\n try {\n await buildTools.restorePackageConfigs(slnFile, options.arch, buildType);\n } catch (e) {\n newError(\n `Couldn't restore found packages.config instances. ${\n (e as Error).message\n }`,\n );\n throw e;\n }\n\n if (options.autolink) {\n runWindowsPhase = 'Autolink';\n try {\n const autolinkArgs: string[] = [];\n const autolinkConfig = config;\n const autoLinkOptions: AutoLinkOptions = {\n logging: options.logging,\n check: false,\n proj: options.proj,\n sln: options.sln,\n telemetry: options.telemetry,\n };\n await autolinkWindowsInternal(\n autolinkArgs,\n autolinkConfig,\n autoLinkOptions,\n );\n } catch (e) {\n newError(`Autolinking failed. ${(e as Error).message}`);\n throw e;\n }\n } else {\n newInfo('Autolink step is skipped');\n }\n\n if (options.build) {\n runWindowsPhase = 'Build';\n if (!slnFile) {\n newError(\n 'Visual Studio Solution file not found. Maybe run \"npx react-native-windows-init\" first?',\n );\n throw new CodedError('NoSolution', 'Cannot find solution file');\n }\n\n // Get build/deploy options\n const msBuildProps = build.parseMsBuildProps(options);\n\n // Disable the autolink check since we just ran it\n msBuildProps.RunAutolinkCheck = 'false';\n\n try {\n await build.buildSolution(\n buildTools,\n slnFile!,\n buildType,\n options.arch,\n msBuildProps,\n verbose,\n 'build',\n options.buildLogDirectory,\n options.singleproc,\n );\n } catch (e) {\n newError(\n `Build failed with message ${\n (e as Error).message\n }. Check your build configuration.`,\n );\n if ((e as any).logfile) {\n console.log('See', chalk.bold((e as any).logfile));\n }\n throw e;\n }\n } else {\n newInfo('Build step is skipped');\n }\n\n if (shouldLaunchPackager(options)) {\n await deploy.startServerInNewWindow(options, verbose);\n }\n\n if (options.deploy) {\n runWindowsPhase = 'Deploy';\n if (!slnFile) {\n newError(\n 'Visual Studio Solution file not found. Maybe run \"npx react-native-windows-init\" first?',\n );\n throw new CodedError('NoSolution', 'Cannot find solution file');\n }\n\n try {\n if (options.device || options.emulator || options.target) {\n await deploy.deployToDevice(options, verbose, config);\n } else {\n await deploy.deployToDesktop(options, verbose, config, buildTools);\n }\n } catch (e) {\n newError(`Failed to deploy${e ? `: ${(e as Error).message}` : ''}`);\n throw e;\n }\n } else {\n newInfo('Deploy step is skipped');\n }\n}\n\nfunction shouldLaunchPackager(options: RunWindowsOptions): boolean {\n return (\n options.packager === true &&\n options.launch === true &&\n options.release !== true\n );\n}\n\n/*\n// Example of running the Windows Command\nrunWindows({\n root: 'C:\\\\github\\\\hack\\\\myapp',\n debug: true,\n arch: 'x86',\n nugetPath: 'C:\\\\github\\\\react\\\\react-native-windows\\\\local-cli\\\\runWindows\\\\.nuget\\\\nuget.exe'\n});\n*/\n\n/**\n * Starts the app on a connected Windows emulator or mobile device.\n */\nexport const runWindowsCommand: Command = {\n name: 'run-windows',\n description:\n 'builds your app and starts it on a connected Windows desktop, emulator or device',\n func: runWindows,\n options: runWindowsOptions,\n};\n"]}
@@ -18,7 +18,7 @@ exports.runWindowsOptions = [
18
18
  {
19
19
  name: '--root [string]',
20
20
  description: 'Override the root directory for the windows build which contains the windows folder.',
21
- default: (config) => config.root,
21
+ default: config => config.root,
22
22
  },
23
23
  {
24
24
  name: '--arch [string]',
@@ -1 +1 @@
1
- {"version":3,"file":"runWindowsOptions.js","sourceRoot":"","sources":["../../src/runWindows/runWindowsOptions.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,4CAAoB;AAsDP,QAAA,iBAAiB,GAAoB;IAChD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,sFAAsF;QACxF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI;KACjC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,YAAE,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,cAAc;KACtB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,gCAAgC;KAC9C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,qDAAqD;KACnE;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,iBAAiB;KAC/B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,gGAAgG;KACnG;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wBAAwB;KACtC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,uBAAuB;KACrC;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,0BAA0B;KACxC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,6FAA6F;QAC/F,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,uGAAuG;QACzG,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,yEAAyE;KAC5E;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,6DAA6D;KAC3E;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,8BAA8B;KAC5C;IACD;QACE,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,2CAA2C;QACxD,KAAK,EAAE,wBAAwB;KAChC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,uGAAuG;KAC1G;CACF,CAAC;AAEF,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,eAAe,GAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7D,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE;QACvC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,EAAE;YACjD,OAAO,SAAS,CAAC;SAClB;KACF;IAED,QAAQ,CAAC,wBAAwB,GAAG,sBAAsB,eAAe,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAW;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAE9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QAC1B,QAAQ,CAAC,uDAAuD,CAAC,CAAC;KACnE;IACD,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE;QAC9B,QAAQ,CAAC,uCAAuC,CAAC,CAAC;KACnD;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport os from 'os';\nimport {CommandOption} from '@react-native-community/cli-types';\n\nexport type BuildArch = 'x86' | 'x64' | 'ARM64';\nexport type BuildConfig = 'Debug' | 'DebugBundle' | 'Release' | 'ReleaseBundle';\n\n/**\n * * Options are the following:\n * release: Boolean - Specifies release build\n * root: String - The root of the application\n * arch: String - The build architecture (ARM64, x86, x64)\n * singleproc: Boolean - opt out of multi-proc builds\n * emulator: Boolean - Deploy to the emulator\n * device: Boolean - Deploy to a device\n * target: String - Device GUID to deploy to\n * remote-debugging: Boolean - Run using remote JS proxy\n * logging: Boolean - Enables logging\n * no-packager: Boolean - Do not launch packager while building\n * bundle: Boolean - Enable Bundle configuration.\n * no-launch: Boolean - Do not launch the app after deployment\n * no-build: Boolean - Do not build the solution\n * no-deploy: Boolean - Do not deploy the app\n * deploy-from-layout: Force deploy from layout, even in release builds\n * sln: String - Solution file to build\n * msbuildprops: String - Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2\n * direct-debugging: Number - Enable direct debugging on specified port\n * no-telemetry: Boolean - Disables sending telemetry that allows analysis of usage and failures of the react-native-windows CLI\n */\nexport interface RunWindowsOptions {\n release?: boolean;\n root: string;\n arch: BuildArch;\n singleproc?: boolean;\n emulator?: boolean;\n device?: boolean;\n target?: string;\n remoteDebugging?: string;\n logging?: boolean;\n packager?: boolean;\n bundle?: boolean;\n launch?: boolean;\n autolink?: boolean;\n build?: boolean;\n deploy?: boolean;\n deployFromLayout?: boolean;\n sln?: string;\n proj?: string;\n msbuildprops?: string;\n buildLogDirectory?: string;\n info?: boolean;\n directDebugging?: number;\n telemetry?: boolean;\n}\n\nexport const runWindowsOptions: CommandOption[] = [\n {\n name: '--release',\n description: 'Specifies a release build',\n },\n {\n name: '--root [string]',\n description:\n 'Override the root directory for the windows build which contains the windows folder.',\n default: (config) => config.root,\n },\n {\n name: '--arch [string]',\n description: 'The build architecture (ARM64, x86, x64)',\n default: os.arch(),\n parse: parseBuildArch,\n },\n {\n name: '--singleproc',\n description: 'Disables multi-proc build',\n },\n {\n name: '--emulator',\n description: 'Deploys the app to an emulator',\n },\n {\n name: '--device',\n description: 'Deploys the app to a connected device',\n },\n {\n name: '--target [string]',\n description: 'Deploys the app to the specified GUID for a device.',\n },\n {\n name: '--remote-debugging',\n description: 'Deploys the app in remote debugging mode.',\n },\n {\n name: '--logging',\n description: 'Enables logging',\n },\n {\n name: '--no-packager',\n description: 'Do not launch packager while building',\n },\n {\n name: '--bundle',\n description:\n 'Enable Bundle configuration and it would be ReleaseBundle/DebugBundle other than Release/Debug',\n },\n {\n name: '--no-launch',\n description: 'Do not launch the app after deployment',\n },\n {\n name: '--no-autolink',\n description: 'Do not run autolinking',\n },\n {\n name: '--no-build',\n description: 'Do not build the solution',\n },\n {\n name: '--no-deploy',\n description: 'Do not deploy the app',\n },\n {\n name: '--deploy-from-layout',\n description: 'Force deploy from layout',\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: '--msbuildprops [string]',\n description:\n 'Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2',\n },\n {\n name: '--buildLogDirectory [string]',\n description: 'Optional directory where msbuild log files should be stored',\n },\n {\n name: '--info',\n description: 'Dump environment information',\n },\n {\n name: '--direct-debugging [number]',\n description: 'Enable direct debugging on specified port',\n parse: parseDirectDebuggingPort,\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\nfunction parseBuildArch(arg: string): BuildArch {\n const supportedArches: BuildArch[] = ['x86', 'x64', 'ARM64'];\n for (const supported of supportedArches) {\n if (arg.toLowerCase() === supported.toLowerCase()) {\n return supported;\n }\n }\n\n errorOut(`Unrecognized --arch '${arg}'. Expected one of ${supportedArches}`);\n}\n\nfunction parseDirectDebuggingPort(arg: string): number {\n const num = parseInt(arg, 10);\n\n if (!Number.isInteger(num)) {\n errorOut(`Expected argument '--direct-debugging' to be a number`);\n }\n if (num < 1024 || num >= 65535) {\n errorOut('Direct debugging port it out of range');\n }\n\n return num;\n}\n\nfunction errorOut(arg: string): never {\n console.error(arg);\n process.exit(1);\n}\n"]}
1
+ {"version":3,"file":"runWindowsOptions.js","sourceRoot":"","sources":["../../src/runWindows/runWindowsOptions.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,4CAAoB;AAsDP,QAAA,iBAAiB,GAAoB;IAChD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,sFAAsF;QACxF,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;KAC/B;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,YAAE,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,cAAc;KACtB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,gCAAgC;KAC9C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,qDAAqD;KACnE;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,iBAAiB;KAC/B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,gGAAgG;KACnG;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wBAAwB;KACtC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,uBAAuB;KACrC;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,0BAA0B;KACxC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,6FAA6F;QAC/F,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,uGAAuG;QACzG,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,yEAAyE;KAC5E;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,6DAA6D;KAC3E;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,8BAA8B;KAC5C;IACD;QACE,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,2CAA2C;QACxD,KAAK,EAAE,wBAAwB;KAChC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,uGAAuG;KAC1G;CACF,CAAC;AAEF,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,eAAe,GAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7D,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE;QACvC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,EAAE;YACjD,OAAO,SAAS,CAAC;SAClB;KACF;IAED,QAAQ,CAAC,wBAAwB,GAAG,sBAAsB,eAAe,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAW;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAE9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QAC1B,QAAQ,CAAC,uDAAuD,CAAC,CAAC;KACnE;IACD,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE;QAC9B,QAAQ,CAAC,uCAAuC,CAAC,CAAC;KACnD;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport os from 'os';\nimport {CommandOption} from '@react-native-community/cli-types';\n\nexport type BuildArch = 'x86' | 'x64' | 'ARM64';\nexport type BuildConfig = 'Debug' | 'DebugBundle' | 'Release' | 'ReleaseBundle';\n\n/**\n * * Options are the following:\n * release: Boolean - Specifies release build\n * root: String - The root of the application\n * arch: String - The build architecture (ARM64, x86, x64)\n * singleproc: Boolean - opt out of multi-proc builds\n * emulator: Boolean - Deploy to the emulator\n * device: Boolean - Deploy to a device\n * target: String - Device GUID to deploy to\n * remote-debugging: Boolean - Run using remote JS proxy\n * logging: Boolean - Enables logging\n * no-packager: Boolean - Do not launch packager while building\n * bundle: Boolean - Enable Bundle configuration.\n * no-launch: Boolean - Do not launch the app after deployment\n * no-build: Boolean - Do not build the solution\n * no-deploy: Boolean - Do not deploy the app\n * deploy-from-layout: Force deploy from layout, even in release builds\n * sln: String - Solution file to build\n * msbuildprops: String - Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2\n * direct-debugging: Number - Enable direct debugging on specified port\n * no-telemetry: Boolean - Disables sending telemetry that allows analysis of usage and failures of the react-native-windows CLI\n */\nexport interface RunWindowsOptions {\n release?: boolean;\n root: string;\n arch: BuildArch;\n singleproc?: boolean;\n emulator?: boolean;\n device?: boolean;\n target?: string;\n remoteDebugging?: string;\n logging?: boolean;\n packager?: boolean;\n bundle?: boolean;\n launch?: boolean;\n autolink?: boolean;\n build?: boolean;\n deploy?: boolean;\n deployFromLayout?: boolean;\n sln?: string;\n proj?: string;\n msbuildprops?: string;\n buildLogDirectory?: string;\n info?: boolean;\n directDebugging?: number;\n telemetry?: boolean;\n}\n\nexport const runWindowsOptions: CommandOption[] = [\n {\n name: '--release',\n description: 'Specifies a release build',\n },\n {\n name: '--root [string]',\n description:\n 'Override the root directory for the windows build which contains the windows folder.',\n default: config => config.root,\n },\n {\n name: '--arch [string]',\n description: 'The build architecture (ARM64, x86, x64)',\n default: os.arch(),\n parse: parseBuildArch,\n },\n {\n name: '--singleproc',\n description: 'Disables multi-proc build',\n },\n {\n name: '--emulator',\n description: 'Deploys the app to an emulator',\n },\n {\n name: '--device',\n description: 'Deploys the app to a connected device',\n },\n {\n name: '--target [string]',\n description: 'Deploys the app to the specified GUID for a device.',\n },\n {\n name: '--remote-debugging',\n description: 'Deploys the app in remote debugging mode.',\n },\n {\n name: '--logging',\n description: 'Enables logging',\n },\n {\n name: '--no-packager',\n description: 'Do not launch packager while building',\n },\n {\n name: '--bundle',\n description:\n 'Enable Bundle configuration and it would be ReleaseBundle/DebugBundle other than Release/Debug',\n },\n {\n name: '--no-launch',\n description: 'Do not launch the app after deployment',\n },\n {\n name: '--no-autolink',\n description: 'Do not run autolinking',\n },\n {\n name: '--no-build',\n description: 'Do not build the solution',\n },\n {\n name: '--no-deploy',\n description: 'Do not deploy the app',\n },\n {\n name: '--deploy-from-layout',\n description: 'Force deploy from layout',\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: '--msbuildprops [string]',\n description:\n 'Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2',\n },\n {\n name: '--buildLogDirectory [string]',\n description: 'Optional directory where msbuild log files should be stored',\n },\n {\n name: '--info',\n description: 'Dump environment information',\n },\n {\n name: '--direct-debugging [number]',\n description: 'Enable direct debugging on specified port',\n parse: parseDirectDebuggingPort,\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\nfunction parseBuildArch(arg: string): BuildArch {\n const supportedArches: BuildArch[] = ['x86', 'x64', 'ARM64'];\n for (const supported of supportedArches) {\n if (arg.toLowerCase() === supported.toLowerCase()) {\n return supported;\n }\n }\n\n errorOut(`Unrecognized --arch '${arg}'. Expected one of ${supportedArches}`);\n}\n\nfunction parseDirectDebuggingPort(arg: string): number {\n const num = parseInt(arg, 10);\n\n if (!Number.isInteger(num)) {\n errorOut(`Expected argument '--direct-debugging' to be a number`);\n }\n if (num < 1024 || num >= 65535) {\n errorOut('Direct debugging port it out of range');\n }\n\n return num;\n}\n\nfunction errorOut(arg: string): never {\n console.error(arg);\n process.exit(1);\n}\n"]}