@react-native-windows/cli 0.66.1 → 0.67.0

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 (51) hide show
  1. package/CHANGELOG.json +303 -22
  2. package/CHANGELOG.md +127 -14
  3. package/lib-commonjs/config/configUtils.js.map +1 -1
  4. package/lib-commonjs/config/dependencyConfig.js +2 -2
  5. package/lib-commonjs/config/dependencyConfig.js.map +1 -1
  6. package/lib-commonjs/config/projectConfig.js +2 -2
  7. package/lib-commonjs/config/projectConfig.js.map +1 -1
  8. package/lib-commonjs/e2etest/autolink.test.d.ts +5 -0
  9. package/lib-commonjs/e2etest/autolink.test.js +93 -12
  10. package/lib-commonjs/e2etest/autolink.test.js.map +1 -1
  11. package/lib-commonjs/e2etest/dependencyConfig.test.js +15 -15
  12. package/lib-commonjs/e2etest/dependencyConfig.test.js.map +1 -1
  13. package/lib-commonjs/e2etest/projectConfig.test.js +16 -16
  14. package/lib-commonjs/e2etest/projectConfig.test.js.map +1 -1
  15. package/lib-commonjs/e2etest/projectConfig.utils.js +4 -4
  16. package/lib-commonjs/e2etest/projectConfig.utils.js.map +1 -1
  17. package/lib-commonjs/e2etest/runWindows.test.js +21 -3
  18. package/lib-commonjs/e2etest/runWindows.test.js.map +1 -1
  19. package/lib-commonjs/generator-common/index.js +1 -1
  20. package/lib-commonjs/generator-common/index.js.map +1 -1
  21. package/lib-commonjs/generator-windows/index.js +24 -51
  22. package/lib-commonjs/generator-windows/index.js.map +1 -1
  23. package/lib-commonjs/healthChecks.js +22 -4
  24. package/lib-commonjs/healthChecks.js.map +1 -1
  25. package/lib-commonjs/index.js +3 -3
  26. package/lib-commonjs/index.js.map +1 -1
  27. package/lib-commonjs/runWindows/runWindows.js +29 -26
  28. package/lib-commonjs/runWindows/runWindows.js.map +1 -1
  29. package/lib-commonjs/runWindows/runWindowsOptions.d.ts +8 -8
  30. package/lib-commonjs/runWindows/runWindowsOptions.js +1 -10
  31. package/lib-commonjs/runWindows/runWindowsOptions.js.map +1 -1
  32. package/lib-commonjs/runWindows/utils/autolink.d.ts +8 -5
  33. package/lib-commonjs/runWindows/utils/autolink.js +38 -30
  34. package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
  35. package/lib-commonjs/runWindows/utils/build.js +3 -3
  36. package/lib-commonjs/runWindows/utils/build.js.map +1 -1
  37. package/lib-commonjs/runWindows/utils/checkRequirements.js +1 -1
  38. package/lib-commonjs/runWindows/utils/checkRequirements.js.map +1 -1
  39. package/lib-commonjs/runWindows/utils/commandWithProgress.d.ts +2 -1
  40. package/lib-commonjs/runWindows/utils/commandWithProgress.js +5 -4
  41. package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +1 -1
  42. package/lib-commonjs/runWindows/utils/deploy.d.ts +1 -1
  43. package/lib-commonjs/runWindows/utils/deploy.js +80 -29
  44. package/lib-commonjs/runWindows/utils/deploy.js.map +1 -1
  45. package/lib-commonjs/runWindows/utils/msbuildtools.js +11 -11
  46. package/lib-commonjs/runWindows/utils/msbuildtools.js.map +1 -1
  47. package/lib-commonjs/runWindows/utils/vsInstalls.js +1 -1
  48. package/lib-commonjs/runWindows/utils/vsInstalls.js.map +1 -1
  49. package/lib-commonjs/runWindows/utils/winappdeploytool.js +4 -4
  50. package/lib-commonjs/runWindows/utils/winappdeploytool.js.map +1 -1
  51. package/package.json +12 -9
@@ -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 = configUtils.getProjectNamespace(\n projectContents,\n );\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 (projectType === 'dynamiclibrary' || projectType === 'winmdobj') {\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 = configUtils.getProjectNamespace(\n projectContents,\n );\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 = configUtils.getProjectNamespace(\n projectContents,\n );\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 (projectType === 'dynamiclibrary' || projectType === 'winmdobj') {\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 = configUtils.getProjectNamespace(\n projectContents,\n );\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"]}
@@ -19,7 +19,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
19
19
  var __importStar = (this && this.__importStar) || function (mod) {
20
20
  if (mod && mod.__esModule) return mod;
21
21
  var result = {};
22
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
23
  __setModuleDefault(result, mod);
24
24
  return result;
25
25
  };
@@ -45,7 +45,7 @@ const configUtils = __importStar(require("./configUtils"));
45
45
  // eslint-disable-next-line complexity
46
46
  function projectConfigWindows(folder, userConfig = {}) {
47
47
  var _a;
48
- if (os_1.platform() !== 'win32') {
48
+ if ((0, os_1.platform)() !== 'win32') {
49
49
  return null;
50
50
  }
51
51
  if (userConfig === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.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 app projects that have a\nwindows implementation, as a target for auto-linking. This is done heuristically,\nso if the result isn't quite correct, app developers can provide a manual override\nfile: react-native.config.js.\n\nSchema for app projects:\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 app root folder, determined by react-native config, ex: 'c:\\path\\to\\my-app'\n sourceDir: string, // (req) Relative path to the Windows implementation under folder, ex: 'windows'\n solutionFile: string, // (req) Relative path to the app's VS solution file under sourceDir, ex: 'MyApp.sln'\n useWinUI3: boolean // (opt) If true, use WinUI 3. If false, use Windows XAML and WinUI 2.x. If missing, the value from rnwRoot\\PropertySheets\\ExperimentalFeatures.props will be used.\n project: { // (req)\n projectFile: string, // (req) Relative path to the VS project file under sourceDir, ex: 'MyApp\\MyApp.vcxproj' for 'c:\\path\\to\\my-app\\windows\\MyApp\\MyApp.vcxproj'\n projectName: string, // (auto) Name of the project, determined from projectFile, ex: 'MyApp'\n projectLang: string, // (auto) Language of the project, cpp or cs, determined from projectFile\n projectGuid: string, // (auto) Project identifier, determined from projectFile\n },\n experimentalFeatures: Record<String, string> // (auto) Properties extracted from ExperimentalFeatures.props\n}\n\nExample react-native.config.js for a 'MyApp':\n\nmodule.exports = {\n project: {\n windows: {\n sourceDir: 'windows',\n solutionFile: 'MyApp.sln',\n project: {\n projectFile: 'MyApp\\\\MyApp.vcxproj',\n },\n },\n },\n};\n\n*/\n\nexport interface Project {\n projectFile: string;\n projectName: string;\n projectLang: 'cpp' | 'cs' | null;\n projectGuid: string | null;\n projectTypeGuid?: string;\n}\n\nexport interface WindowsProjectConfig {\n folder: string;\n sourceDir: string;\n solutionFile: string;\n project: Project;\n useWinUI3?: boolean;\n experimentalFeatures?: Record<string, string>;\n}\n\ntype DeepPartial<T> = {[P in keyof T]?: DeepPartial<T[P]>};\n\n/**\n * Gets the config of any RNW apps under the target folder.\n * @param folder The absolute path to the target folder.\n * @param userConfig A manually specified override config.\n * @return The config if any RNW apps exist.\n */\n// Disabled due to existing high cyclomatic complexity\n// eslint-disable-next-line complexity\nexport function projectConfigWindows(\n folder: string,\n userConfig: Partial<WindowsProjectConfig> | null = {},\n): WindowsProjectConfig | null {\n if (platform() !== 'win32') {\n return null;\n }\n\n if (userConfig === null) {\n return null;\n }\n\n const usingManualOverride = 'sourceDir' in userConfig;\n\n const sourceDir = usingManualOverride\n ? path.join(folder, userConfig.sourceDir!)\n : configUtils.findWindowsFolder(folder);\n\n if (sourceDir === null) {\n // Nothing to look for here, bail\n return null;\n }\n\n const result: DeepPartial<WindowsProjectConfig> = {\n folder: folder,\n sourceDir: path.relative(folder, sourceDir),\n };\n\n let validSolution = false;\n let validProject = false;\n\n if (usingManualOverride) {\n // Manual override, try to use it for solutionFile\n if (!('solutionFile' in userConfig)) {\n result.solutionFile =\n 'Error: Solution file is required but not specified in react-native.config.';\n } else if (userConfig.solutionFile === null) {\n result.solutionFile =\n 'Error: Solution file is null in react-native.config.';\n } else {\n result.solutionFile = path.normalize(userConfig.solutionFile!);\n validSolution = true;\n }\n\n // Manual override, try to use it for project\n if (!('project' in userConfig)) {\n result.project = {\n projectFile:\n 'Error: Project is required but not specified in react-native.config.',\n };\n } else if (!userConfig.project) {\n result.project = {\n projectFile: 'Error: Project is null in react-native.config.',\n };\n } else {\n if (!('projectFile' in userConfig.project)) {\n result.project = {\n projectFile:\n 'Error: Project file is required for project in react-native.config.',\n };\n } else if (userConfig.project.projectFile === null) {\n result.project = {\n projectFile: 'Error: Project file is null in react-native.config.',\n };\n } else {\n result.project = {\n projectFile: path.normalize(userConfig.project.projectFile),\n };\n validProject = true;\n }\n }\n\n if ('useWinUI3' in userConfig) {\n result.useWinUI3 = userConfig.useWinUI3;\n }\n } else {\n // No manually provided solutionFile, try to find it\n const foundSolutions = configUtils.findSolutionFiles(sourceDir);\n if (foundSolutions.length === 0) {\n result.solutionFile =\n 'Error: No app solution file found, please specify in react-native.config.';\n } else if (foundSolutions.length > 1) {\n result.solutionFile =\n 'Error: Too many app solution files found, please specify in react-native.config.';\n } else {\n result.solutionFile = path.normalize(foundSolutions[0]);\n validSolution = true;\n }\n\n // No manually provided project, try to find it\n const foundProjects = configUtils.findAppProjectFiles(sourceDir);\n if (foundProjects.length === 0) {\n result.project = {\n projectFile:\n 'Error: No app project file found, please specify in react-native.config.',\n };\n } else if (foundProjects.length > 1) {\n result.project = {\n projectFile:\n 'Error: Too many app project files found, please specify in react-native.config.',\n };\n } else {\n result.project = {\n projectFile: path.normalize(foundProjects[0]),\n };\n validProject = true;\n }\n }\n\n if (validSolution) {\n result.solutionFile = path.relative(\n sourceDir,\n path.join(sourceDir, result.solutionFile),\n );\n\n // Populating experimental features from ExperimentalFeatures.props\n const experimentalFeatures = configUtils.getExperimentalFeatures(\n path.dirname(path.join(sourceDir, result.solutionFile)),\n );\n if (experimentalFeatures) {\n result.experimentalFeatures = experimentalFeatures;\n }\n }\n\n if (validProject) {\n const projectFile = path.join(sourceDir, result.project.projectFile!);\n const projectContents = configUtils.readProjectFile(projectFile);\n\n result.project.projectFile = path.relative(sourceDir, projectFile);\n\n // Add missing (auto) items\n result.project.projectName = configUtils.getProjectName(\n projectFile,\n projectContents,\n );\n result.project.projectLang = configUtils.getProjectLanguage(projectFile);\n result.project.projectGuid = configUtils.getProjectGuid(projectContents);\n\n // Since we moved the UseExperimentalNuget property from the project to the\n // ExperimentalFeatures.props file, we should should double-check the project file\n // in case it was made with an older template\n const useExperimentalNuget = configUtils.tryFindPropertyValue(\n projectContents,\n 'UseExperimentalNuget',\n );\n if (useExperimentalNuget) {\n result.experimentalFeatures = result.experimentalFeatures ?? {};\n result.experimentalFeatures.UseExperimentalNuget = useExperimentalNuget;\n }\n }\n\n return result as WindowsProjectConfig;\n}\n"]}
1
+ {"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.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 app projects that have a\nwindows implementation, as a target for auto-linking. This is done heuristically,\nso if the result isn't quite correct, app developers can provide a manual override\nfile: react-native.config.js.\n\nSchema for app projects:\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 app root folder, determined by react-native config, ex: 'c:\\path\\to\\my-app'\n sourceDir: string, // (req) Relative path to the Windows implementation under folder, ex: 'windows'\n solutionFile: string, // (req) Relative path to the app's VS solution file under sourceDir, ex: 'MyApp.sln'\n useWinUI3: boolean // (opt) If true, use WinUI 3. If false, use Windows XAML and WinUI 2.x. If missing, the value from rnwRoot\\PropertySheets\\ExperimentalFeatures.props will be used.\n project: { // (req)\n projectFile: string, // (req) Relative path to the VS project file under sourceDir, ex: 'MyApp\\MyApp.vcxproj' for 'c:\\path\\to\\my-app\\windows\\MyApp\\MyApp.vcxproj'\n projectName: string, // (auto) Name of the project, determined from projectFile, ex: 'MyApp'\n projectLang: string, // (auto) Language of the project, cpp or cs, determined from projectFile\n projectGuid: string, // (auto) Project identifier, determined from projectFile\n },\n experimentalFeatures: Record<String, string> // (auto) Properties extracted from ExperimentalFeatures.props\n}\n\nExample react-native.config.js for a 'MyApp':\n\nmodule.exports = {\n project: {\n windows: {\n sourceDir: 'windows',\n solutionFile: 'MyApp.sln',\n project: {\n projectFile: 'MyApp\\\\MyApp.vcxproj',\n },\n },\n },\n};\n\n*/\n\nexport interface Project {\n projectFile: string;\n projectName: string;\n projectLang: 'cpp' | 'cs' | null;\n projectGuid: string | null;\n projectTypeGuid?: string;\n}\n\nexport interface WindowsProjectConfig {\n folder: string;\n sourceDir: string;\n solutionFile: string;\n project: Project;\n useWinUI3?: boolean;\n experimentalFeatures?: Record<string, string>;\n}\n\ntype DeepPartial<T> = {[P in keyof T]?: DeepPartial<T[P]>};\n\n/**\n * Gets the config of any RNW apps under the target folder.\n * @param folder The absolute path to the target folder.\n * @param userConfig A manually specified override config.\n * @return The config if any RNW apps exist.\n */\n// Disabled due to existing high cyclomatic complexity\n// eslint-disable-next-line complexity\nexport function projectConfigWindows(\n folder: string,\n userConfig: Partial<WindowsProjectConfig> | null = {},\n): WindowsProjectConfig | null {\n if (platform() !== 'win32') {\n return null;\n }\n\n if (userConfig === null) {\n return null;\n }\n\n const usingManualOverride = 'sourceDir' in userConfig;\n\n const sourceDir = usingManualOverride\n ? path.join(folder, userConfig.sourceDir!)\n : configUtils.findWindowsFolder(folder);\n\n if (sourceDir === null) {\n // Nothing to look for here, bail\n return null;\n }\n\n const result: DeepPartial<WindowsProjectConfig> = {\n folder: folder,\n sourceDir: path.relative(folder, sourceDir),\n };\n\n let validSolution = false;\n let validProject = false;\n\n if (usingManualOverride) {\n // Manual override, try to use it for solutionFile\n if (!('solutionFile' in userConfig)) {\n result.solutionFile =\n 'Error: Solution file is required but not specified in react-native.config.';\n } else if (userConfig.solutionFile === null) {\n result.solutionFile =\n 'Error: Solution file is null in react-native.config.';\n } else {\n result.solutionFile = path.normalize(userConfig.solutionFile!);\n validSolution = true;\n }\n\n // Manual override, try to use it for project\n if (!('project' in userConfig)) {\n result.project = {\n projectFile:\n 'Error: Project is required but not specified in react-native.config.',\n };\n } else if (!userConfig.project) {\n result.project = {\n projectFile: 'Error: Project is null in react-native.config.',\n };\n } else {\n if (!('projectFile' in userConfig.project)) {\n result.project = {\n projectFile:\n 'Error: Project file is required for project in react-native.config.',\n };\n } else if (userConfig.project.projectFile === null) {\n result.project = {\n projectFile: 'Error: Project file is null in react-native.config.',\n };\n } else {\n result.project = {\n projectFile: path.normalize(userConfig.project.projectFile),\n };\n validProject = true;\n }\n }\n\n if ('useWinUI3' in userConfig) {\n result.useWinUI3 = userConfig.useWinUI3;\n }\n } else {\n // No manually provided solutionFile, try to find it\n const foundSolutions = configUtils.findSolutionFiles(sourceDir);\n if (foundSolutions.length === 0) {\n result.solutionFile =\n 'Error: No app solution file found, please specify in react-native.config.';\n } else if (foundSolutions.length > 1) {\n result.solutionFile =\n 'Error: Too many app solution files found, please specify in react-native.config.';\n } else {\n result.solutionFile = path.normalize(foundSolutions[0]);\n validSolution = true;\n }\n\n // No manually provided project, try to find it\n const foundProjects = configUtils.findAppProjectFiles(sourceDir);\n if (foundProjects.length === 0) {\n result.project = {\n projectFile:\n 'Error: No app project file found, please specify in react-native.config.',\n };\n } else if (foundProjects.length > 1) {\n result.project = {\n projectFile:\n 'Error: Too many app project files found, please specify in react-native.config.',\n };\n } else {\n result.project = {\n projectFile: path.normalize(foundProjects[0]),\n };\n validProject = true;\n }\n }\n\n if (validSolution) {\n result.solutionFile = path.relative(\n sourceDir,\n path.join(sourceDir, result.solutionFile),\n );\n\n // Populating experimental features from ExperimentalFeatures.props\n const experimentalFeatures = configUtils.getExperimentalFeatures(\n path.dirname(path.join(sourceDir, result.solutionFile)),\n );\n if (experimentalFeatures) {\n result.experimentalFeatures = experimentalFeatures;\n }\n }\n\n if (validProject) {\n const projectFile = path.join(sourceDir, result.project.projectFile!);\n const projectContents = configUtils.readProjectFile(projectFile);\n\n result.project.projectFile = path.relative(sourceDir, projectFile);\n\n // Add missing (auto) items\n result.project.projectName = configUtils.getProjectName(\n projectFile,\n projectContents,\n );\n result.project.projectLang = configUtils.getProjectLanguage(projectFile);\n result.project.projectGuid = configUtils.getProjectGuid(projectContents);\n\n // Since we moved the UseExperimentalNuget property from the project to the\n // ExperimentalFeatures.props file, we should should double-check the project file\n // in case it was made with an older template\n const useExperimentalNuget = configUtils.tryFindPropertyValue(\n projectContents,\n 'UseExperimentalNuget',\n );\n if (useExperimentalNuget) {\n result.experimentalFeatures = result.experimentalFeatures ?? {};\n result.experimentalFeatures.UseExperimentalNuget = useExperimentalNuget;\n }\n }\n\n return result as WindowsProjectConfig;\n}\n"]}
@@ -1 +1,6 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ * Licensed under the MIT License.
4
+ * @format
5
+ */
1
6
  export {};
@@ -1,4 +1,9 @@
1
1
  "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation.
4
+ * Licensed under the MIT License.
5
+ * @format
6
+ */
2
7
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
9
  };
@@ -30,10 +35,16 @@ class AutolinkTest extends autolink_1.AutolinkWindows {
30
35
  return this.windowsAppConfig;
31
36
  }
32
37
  getPackagesConfigXml() {
33
- return { path: 'packages.config', content: new xmldom_1.DOMParser().parseFromString(this.packagesConfig, 'application/xml') };
38
+ return {
39
+ path: 'packages.config',
40
+ content: new xmldom_1.DOMParser().parseFromString(this.packagesConfig, 'application/xml'),
41
+ };
34
42
  }
35
43
  getExperimentalFeaturesPropsXml() {
36
- return { path: 'ExperimentalFeatures.props', content: new xmldom_1.DOMParser().parseFromString(this.experimentalFeaturesProps, 'application/xml') };
44
+ return {
45
+ path: 'ExperimentalFeatures.props',
46
+ content: new xmldom_1.DOMParser().parseFromString(this.experimentalFeaturesProps, 'application/xml'),
47
+ };
37
48
  }
38
49
  async updateFile(filepath, content) {
39
50
  if (filepath === 'packages.config') {
@@ -69,7 +80,7 @@ test('autolink fixup proj', async (done) => {
69
80
  expect(autolink.getWindowsProjectConfig().solutionFile).toEqual('foo.sln');
70
81
  expect(autolink.getWindowsProjectConfig().project).toBeUndefined();
71
82
  const folder = path_1.default.resolve('src/e2etest/projects/', 'WithWinUI3');
72
- await projectConfig_utils_1.ensureWinUI3Project(folder);
83
+ await (0, projectConfig_utils_1.ensureWinUI3Project)(folder);
73
84
  expect(() => {
74
85
  autolink.validateRequiredProjectProperties();
75
86
  }).toThrow();
@@ -199,7 +210,7 @@ test('one valid cs autolink dependency', () => {
199
210
  test('ensureXAMLDialect - useWinUI3=true in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async (done) => {
200
211
  const folder = path_1.default.resolve('src/e2etest/projects/WithWinUI3');
201
212
  const rnc = require(path_1.default.join(folder, 'react-native.config.js'));
202
- const config = projectConfig_1.projectConfigWindows(folder, rnc.project.windows);
213
+ const config = (0, projectConfig_1.projectConfigWindows)(folder, rnc.project.windows);
203
214
  const al = new AutolinkTest({ windows: config }, {}, {
204
215
  check: false,
205
216
  logging: false,
@@ -210,7 +221,7 @@ test('ensureXAMLDialect - useWinUI3=true in react-native.config.js, useWinUI3=fa
210
221
  expect(exd).toBeTruthy();
211
222
  const expectedExperimentalFeatures = '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>';
212
223
  expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);
213
- // example packages.config:
224
+ // example packages.config:
214
225
  // <packages>
215
226
  // <package id="SuperPkg" version="42"/>
216
227
  // <package id="Microsoft.WinUI" version="3.0.0-preview3.201113.0" targetFramework="native"/>
@@ -224,7 +235,7 @@ test('ensureXAMLDialect - useWinUI3=true in react-native.config.js, useWinUI3=fa
224
235
  test('ensureXAMLDialect - useWinUI3=false in react-native.config.js, useWinUI3=true in ExperimentalFeatures.props', async (done) => {
225
236
  const folder = path_1.default.resolve('src/e2etest/projects/WithWinUI3');
226
237
  const rnc = require(path_1.default.join(folder, 'react-native.config.js'));
227
- const config = projectConfig_1.projectConfigWindows(folder, rnc.project.windows);
238
+ const config = (0, projectConfig_1.projectConfigWindows)(folder, rnc.project.windows);
228
239
  config.useWinUI3 = false;
229
240
  const al = new AutolinkTest({ windows: config }, {}, {
230
241
  check: false,
@@ -236,7 +247,7 @@ test('ensureXAMLDialect - useWinUI3=false in react-native.config.js, useWinUI3=t
236
247
  expect(exd).toBeTruthy();
237
248
  const expectedExperimentalFeatures = '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>';
238
249
  expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);
239
- // example packages.config:
250
+ // example packages.config:
240
251
  // <packages>
241
252
  // <package id="SuperPkg" version="42"/>
242
253
  // <package id="Microsoft.WinUI" version="3.0.0-preview3.201113.0" targetFramework="native"/>
@@ -250,7 +261,7 @@ test('ensureXAMLDialect - useWinUI3=false in react-native.config.js, useWinUI3=t
250
261
  test('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=true in ExperimentalFeatures.props', async (done) => {
251
262
  const folder = path_1.default.resolve('src/e2etest/projects/WithWinUI3');
252
263
  const rnc = require(path_1.default.join(folder, 'react-native.config.js'));
253
- const config = projectConfig_1.projectConfigWindows(folder, rnc.project.windows);
264
+ const config = (0, projectConfig_1.projectConfigWindows)(folder, rnc.project.windows);
254
265
  delete config.useWinUI3;
255
266
  const al = new AutolinkTest({ windows: config }, {}, {
256
267
  check: false,
@@ -262,7 +273,7 @@ test('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=tru
262
273
  expect(exd).toBeTruthy();
263
274
  const expectedExperimentalFeatures = '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>true</UseWinUI3></PropertyGroup></Project>';
264
275
  expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);
265
- // example packages.config:
276
+ // example packages.config:
266
277
  // <packages>
267
278
  // <package id="SuperPkg" version="42"/>
268
279
  // <package id="Microsoft.WinUI" version="3.0.0-preview3.201113.0" targetFramework="native"/>
@@ -276,7 +287,7 @@ test('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=tru
276
287
  test('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async (done) => {
277
288
  const folder = path_1.default.resolve('src/e2etest/projects/WithWinUI3');
278
289
  const rnc = require(path_1.default.join(folder, 'react-native.config.js'));
279
- const config = projectConfig_1.projectConfigWindows(folder, rnc.project.windows);
290
+ const config = (0, projectConfig_1.projectConfigWindows)(folder, rnc.project.windows);
280
291
  delete config.useWinUI3;
281
292
  const al = new AutolinkTest({ windows: config }, {}, {
282
293
  check: false,
@@ -288,7 +299,7 @@ test('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=fal
288
299
  expect(exd).toBeTruthy();
289
300
  const expectedExperimentalFeatures = '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>false</UseWinUI3></PropertyGroup></Project>';
290
301
  expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);
291
- // example packages.config:
302
+ // example packages.config:
292
303
  // <packages>
293
304
  // <package id="SuperPkg" version="42"/>
294
305
  // <package id="Microsoft.WinUI" version="3.0.0-preview4.210210.4" targetFramework="native"/>
@@ -299,6 +310,59 @@ test('ensureXAMLDialect - useWinUI3 not in react-native.config.js, useWinUI3=fal
299
310
  expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');
300
311
  done();
301
312
  });
313
+ test('ensureXAMLDialect - WinUI2xVersion specified in ExperimentalFeatures.props', async (done) => {
314
+ const folder = path_1.default.resolve('src/e2etest/projects/WithWinUI3');
315
+ const rnc = require(path_1.default.join(folder, 'react-native.config.js'));
316
+ const config = (0, projectConfig_1.projectConfigWindows)(folder, rnc.project.windows);
317
+ delete config.useWinUI3;
318
+ const al = new AutolinkTest({ windows: config }, {}, {
319
+ check: false,
320
+ logging: false,
321
+ });
322
+ al.experimentalFeaturesProps = `<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>false</UseWinUI3><WinUI2xVersion>2.7.0-test</WinUI2xVersion></PropertyGroup></Project>`;
323
+ al.packagesConfig = `<packages><package id="SuperPkg" version="42"/></packages>`;
324
+ const exd = await al.ensureXAMLDialect();
325
+ expect(exd).toBeTruthy();
326
+ const expectedExperimentalFeatures = '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>false</UseWinUI3><WinUI2xVersion>2.7.0-test</WinUI2xVersion></PropertyGroup></Project>';
327
+ expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);
328
+ // example packages.config:
329
+ // <packages>
330
+ // <package id="SuperPkg" version="42"/>
331
+ // <package id="Microsoft.UI.XAML" version="2.7.0-test" targetFramework="native"/>
332
+ // </packages>
333
+ //
334
+ expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');
335
+ expect(al.packagesConfig).toContain('2.7.0-test');
336
+ expect(al.packagesConfig).toContain('<package id="SuperPkg" version="42"/>');
337
+ expect(al.packagesConfig).not.toContain('Microsoft.WinUI');
338
+ done();
339
+ });
340
+ test('ensureXAMLDialect - WinUI3Version specified in ExperimentalFeatures.props', async (done) => {
341
+ const folder = path_1.default.resolve('src/e2etest/projects/WithWinUI3');
342
+ const rnc = require(path_1.default.join(folder, 'react-native.config.js'));
343
+ const config = (0, projectConfig_1.projectConfigWindows)(folder, rnc.project.windows);
344
+ const al = new AutolinkTest({ windows: config }, {}, {
345
+ check: false,
346
+ logging: false,
347
+ });
348
+ al.experimentalFeaturesProps = `<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>true</UseWinUI3><WinUI3Version>3.0.0-test</WinUI3Version></PropertyGroup></Project>`;
349
+ al.packagesConfig = `<packages><package id="SuperPkg" version="42"/></packages>`;
350
+ const exd = await al.ensureXAMLDialect();
351
+ expect(exd).toBeTruthy();
352
+ const expectedExperimentalFeatures = '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><UseWinUI3>true</UseWinUI3><WinUI3Version>3.0.0-test</WinUI3Version></PropertyGroup></Project>';
353
+ expect(al.experimentalFeaturesProps).toEqual(expectedExperimentalFeatures);
354
+ // example packages.config:
355
+ // <packages>
356
+ // <package id="SuperPkg" version="42"/>
357
+ // <package id="Microsoft.WinUI" version="3.0.0-test" targetFramework="native"/>
358
+ // </packages>
359
+ //
360
+ expect(al.packagesConfig).toContain('Microsoft.WinUI');
361
+ expect(al.packagesConfig).toContain('3.0.0-test');
362
+ expect(al.packagesConfig).toContain('<package id="SuperPkg" version="42"/>');
363
+ expect(al.packagesConfig).not.toContain('Microsoft.UI.Xaml');
364
+ done();
365
+ });
302
366
  test('Indirect autolink dependency', () => {
303
367
  const autolink = new AutolinkTest({ windows: { folder: __dirname, sourceDir: '.', solutionFile: 'foo.sln' } }, {
304
368
  superModule: {
@@ -317,7 +381,7 @@ test('Indirect autolink dependency', () => {
317
381
  {
318
382
  directDependency: false,
319
383
  projectFile: 'indirect.vcxproj',
320
- }
384
+ },
321
385
  ],
322
386
  },
323
387
  },
@@ -335,4 +399,21 @@ test('Indirect autolink dependency', () => {
335
399
  expect(replacements.cppIncludes).toMatch(/#include <Snoopy.h>/);
336
400
  expect(replacements.cppPackageProviders).toContain('packageProviders.Append(winrt::FamousAnimalCartoons())');
337
401
  });
402
+ test('autolinkOptions - validate options', () => {
403
+ for (const commandOption of autolink_1.autolinkOptions) {
404
+ // Validate names
405
+ expect(commandOption.name).not.toBeNull();
406
+ expect(commandOption.name.startsWith('--')).toBe(true);
407
+ expect(commandOption.name).toBe(commandOption.name.trim());
408
+ // Validate defaults
409
+ if (!commandOption.name.endsWith(' [string]') &&
410
+ !commandOption.name.endsWith(' [number]')) {
411
+ // Commander ignores defaults for flags, so leave undefined to prevent confusion
412
+ expect(commandOption.default).toBeUndefined();
413
+ }
414
+ // Validate description
415
+ expect(commandOption.description).not.toBeNull();
416
+ expect(commandOption.description).toBe(commandOption.description.trim());
417
+ }
418
+ });
338
419
  //# sourceMappingURL=autolink.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autolink.test.js","sourceRoot":"","sources":["../../src/e2etest/autolink.test.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport { projectConfigWindows } from '../config/projectConfig';\nimport {AutolinkWindows} from '../runWindows/utils/autolink';\nimport {DOMParser} from '@xmldom/xmldom';\nimport { 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 \n test('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 \n class AutolinkTest extends AutolinkWindows {\n public getWindowsProjectConfig() {\n return this.windowsAppConfig;\n }\n public packagesConfig = '';\n public experimentalFeaturesProps = '';\n protected getPackagesConfigXml(){\n return {path:'packages.config', content: new DOMParser().parseFromString(this.packagesConfig, 'application/xml')};\n }\n protected getExperimentalFeaturesPropsXml(){\n return {path: 'ExperimentalFeatures.props', content: new DOMParser().parseFromString(this.experimentalFeaturesProps, 'application/xml')};\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\n \n test('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 \n test('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 \n test('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 \n test('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 \n test('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:\n '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 \n test('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 \n test('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:\n '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 \n test('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 const rnc = require(path.join(folder, 'react-native.config.js'));\n \n const config = projectConfigWindows(folder, rnc.project.windows)!;\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 = '<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.WinUI\" version=\"3.0.0-preview3.201113.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WinUI');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).not.toContain('Microsoft.UI.Xaml');\n \n done();\n });\n\n test('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 = '<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.WinUI\" version=\"3.0.0-preview3.201113.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WinUI');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');\n \n done();\n });\n\n test('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 = '<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.WinUI\" version=\"3.0.0-preview3.201113.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WinUI');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).not.toContain('Microsoft.UI.Xaml');\n \n done();\n });\n \n test('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.WinUI\"/></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.WinUI\" version=\"3.0.0-preview4.210210.4\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WinUI');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');\n \n done();\n });\n \n test('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"]}
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 {projectConfigWindows} from '../config/projectConfig';\nimport {AutolinkWindows, autolinkOptions} from '../runWindows/utils/autolink';\nimport {DOMParser} from '@xmldom/xmldom';\nimport {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:\n '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:\n '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 const rnc = require(path.join(folder, 'react-native.config.js'));\n\n const config = projectConfigWindows(folder, rnc.project.windows)!;\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.WinUI\" version=\"3.0.0-preview3.201113.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WinUI');\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.WinUI\" version=\"3.0.0-preview3.201113.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WinUI');\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.WinUI\" version=\"3.0.0-preview3.201113.0\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.WinUI');\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.WinUI\"/></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.WinUI\" version=\"3.0.0-preview4.210210.4\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).not.toContain('Microsoft.WinUI');\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 - WinUI2xVersion specified 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><WinUI2xVersion>2.7.0-test</WinUI2xVersion></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><WinUI2xVersion>2.7.0-test</WinUI2xVersion></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.UI.XAML\" version=\"2.7.0-test\" targetFramework=\"native\"/>\n // </packages>\n //\n expect(al.packagesConfig).toContain('Microsoft.UI.Xaml');\n expect(al.packagesConfig).toContain('2.7.0-test');\n expect(al.packagesConfig).toContain('<package id=\"SuperPkg\" version=\"42\"/>');\n expect(al.packagesConfig).not.toContain('Microsoft.WinUI');\n\n done();\n});\n\ntest('ensureXAMLDialect - WinUI3Version specified 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\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><WinUI3Version>3.0.0-test</WinUI3Version></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><WinUI3Version>3.0.0-test</WinUI3Version></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.WinUI\" version=\"3.0.0-test\" targetFramework=\"native\"/>\n // </packages>\n //\n\n expect(al.packagesConfig).toContain('Microsoft.WinUI');\n expect(al.packagesConfig).toContain('3.0.0-test');\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('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:\n '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\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\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\n // Validate description\n expect(commandOption.description).not.toBeNull();\n expect(commandOption.description!).toBe(commandOption.description!.trim());\n }\n});\n"]}