@react-native-windows/cli 0.0.0-canary.102 → 0.0.0-canary.106
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib-commonjs/config/dependencyConfig.js +1 -1
- package/lib-commonjs/config/dependencyConfig.js.map +1 -1
- package/lib-commonjs/e2etest/autolink.test.js.map +1 -1
- package/lib-commonjs/e2etest/projectConfig.test.js +0 -2
- package/lib-commonjs/e2etest/projectConfig.test.js.map +1 -1
- package/lib-commonjs/e2etest/projectConfig.utils.js +0 -7
- package/lib-commonjs/e2etest/projectConfig.utils.js.map +1 -1
- package/lib-commonjs/generator-common/index.js +6 -6
- package/lib-commonjs/generator-common/index.js.map +1 -1
- package/lib-commonjs/generator-windows/index.js +6 -24
- package/lib-commonjs/generator-windows/index.js.map +1 -1
- package/lib-commonjs/runWindows/runWindows.js +9 -1
- package/lib-commonjs/runWindows/runWindows.js.map +1 -1
- package/lib-commonjs/runWindows/runWindowsOptions.js +1 -1
- package/lib-commonjs/runWindows/runWindowsOptions.js.map +1 -1
- package/lib-commonjs/runWindows/utils/autolink.js +21 -22
- package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
- package/lib-commonjs/runWindows/utils/build.d.ts +1 -0
- package/lib-commonjs/runWindows/utils/build.js +32 -2
- package/lib-commonjs/runWindows/utils/build.js.map +1 -1
- package/lib-commonjs/runWindows/utils/checkRequirements.js +1 -1
- package/lib-commonjs/runWindows/utils/checkRequirements.js.map +1 -1
- package/lib-commonjs/runWindows/utils/commandWithProgress.js +4 -4
- package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +1 -1
- package/lib-commonjs/runWindows/utils/deploy.js +7 -7
- package/lib-commonjs/runWindows/utils/deploy.js.map +1 -1
- package/lib-commonjs/runWindows/utils/msbuildtools.js +5 -8
- package/lib-commonjs/runWindows/utils/msbuildtools.js.map +1 -1
- package/lib-commonjs/runWindows/utils/version.js +1 -1
- package/lib-commonjs/runWindows/utils/version.js.map +1 -1
- package/lib-commonjs/runWindows/utils/vsInstalls.js +1 -1
- package/lib-commonjs/runWindows/utils/vsInstalls.js.map +1 -1
- package/lib-commonjs/runWindows/utils/vstools.js +3 -3
- package/lib-commonjs/runWindows/utils/vstools.js.map +1 -1
- package/lib-commonjs/runWindows/utils/winappdeploytool.js +2 -2
- package/lib-commonjs/runWindows/utils/winappdeploytool.js.map +1 -1
- package/package.json +9 -9
|
@@ -129,7 +129,7 @@ function dependencyConfigWindows(folder, userConfig = {}) {
|
|
|
129
129
|
for (const project of result.projects) {
|
|
130
130
|
// Verifying (req) items
|
|
131
131
|
let errorFound = false;
|
|
132
|
-
alwaysRequired.forEach(item => {
|
|
132
|
+
alwaysRequired.forEach((item) => {
|
|
133
133
|
if (!(item in project)) {
|
|
134
134
|
project[item] = `Error: ${item} is required for each project in react-native.config`;
|
|
135
135
|
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 = 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 =\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 (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 =\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';\n\nimport {projectConfigWindows} from '../config/projectConfig';\nimport {\n AutolinkWindows,\n autolinkOptions,\n AutoLinkOptions,\n} 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\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\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 // 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';\n\nimport {projectConfigWindows} from '../config/projectConfig';\nimport {\n AutolinkWindows,\n autolinkOptions,\n AutoLinkOptions,\n} 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: '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 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: '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\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 // 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"]}
|
|
@@ -117,9 +117,7 @@ test('useWinUI3=true in react-native.config.js, useWinUI3=false in ExperimentalF
|
|
|
117
117
|
});
|
|
118
118
|
const exd = await al.ensureXAMLDialect();
|
|
119
119
|
expect(exd).toBeTruthy();
|
|
120
|
-
const packagesConfig = (await fs_1.default.readFile(path_1.default.join(folder, 'windows/WithWinUI3/packages.config'))).toString();
|
|
121
120
|
const experimentalFeatures = (await fs_1.default.readFile(path_1.default.join(folder, 'windows/ExperimentalFeatures.props'))).toString();
|
|
122
|
-
expect(packagesConfig.replace(/\r/g, '')).toMatchSnapshot();
|
|
123
121
|
expect(experimentalFeatures.replace(/\r/g, '')).toMatchSnapshot();
|
|
124
122
|
});
|
|
125
123
|
//# sourceMappingURL=projectConfig.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.test.js","sourceRoot":"","sources":["../../src/e2etest/projectConfig.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\n\nimport {\n projectConfigWindows,\n WindowsProjectConfig,\n} from '../config/projectConfig';\n\nimport {copyAndReplace} from '../generator-common';\nimport {AutolinkWindows} from '../runWindows/utils/autolink';\nimport {\n ensureWinUI3Project,\n templateRoot,\n testProjectGuid,\n tryMkdir,\n} from './projectConfig.utils';\n\ntype TargetProject = [string, ((folder: string) => Promise<void>)?];\n\nfunction project(\n name: string,\n setup?: (folder: string) => Promise<void>,\n): TargetProject {\n return [name, setup];\n}\n\nconst projects: TargetProject[] = [\n // Nothing but a react-native.config.js, with nulls\n project('BlankApp'),\n // Nothing but a windows folder\n project('MissingProjectFilesApp', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n }),\n // New C++ project based on the template\n project('SimpleCppApp', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCppApp',\n namespace: 'SimpleCppApp',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-app/proj/MyApp.sln'),\n path.join(windowsDir, 'SimpleCppApp.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCppApp');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-app/proj/MyApp.vcxproj'),\n path.join(projDir, 'SimpleCppApp.vcxproj'),\n replacements,\n null,\n );\n }),\n // New C# project based on the template\n project('SimpleCSharpApp', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCSharpApp',\n namespace: 'SimpleCSharpApp',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-app/proj/MyApp.sln'),\n path.join(windowsDir, 'SimpleCSharpApp.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCSharpApp');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-app/proj/MyApp.csproj'),\n path.join(projDir, 'SimpleCSharpApp.csproj'),\n replacements,\n null,\n );\n }),\n project('WithWinUI3', async (folder: string) => {\n await ensureWinUI3Project(folder);\n }),\n project('WithIndirectDependency'),\n project('WithExperimentalFeaturesProps'),\n project('WithUseExperimentalNuget'),\n project('WithUseExperimentalNugetSetInProject'),\n];\n\n// Tests that given userConfig is null, the result will always be null\ntest.each(projects)(\n 'projectConfig - %s (userConfig is null)',\n async (name, setup) => {\n const folder = path.resolve('src/e2etest/projects/', name);\n\n if (setup !== undefined) {\n await setup(folder);\n }\n\n const userConfig = null;\n\n expect(projectConfigWindows(folder, userConfig)).toBeNull();\n },\n);\n\n// Tests the result given a windows project config in react-native.config.js\ntest.each(projects)(\n 'projectConfig - %s (Use react-native.config.js)',\n async (name, setup) => {\n const folder = path.resolve('src/e2etest/projects/', name);\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n if (setup !== undefined) {\n await setup(folder);\n }\n\n const userConfig: Partial<WindowsProjectConfig> = rnc.project.windows;\n\n if (name === 'BlankApp') {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n });\n }\n },\n);\n\n// Tests the result of ignoring the windows project config in react-native.config.js\ntest.each(projects)(\n 'projectConfig - %s (Ignore react-native.config.js)',\n async (name, setup) => {\n const folder = path.resolve('src/e2etest/projects/', name);\n\n if (setup !== undefined) {\n await setup(folder);\n }\n\n const userConfig: Partial<WindowsProjectConfig> = {};\n\n if (name === 'BlankApp') {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n });\n }\n },\n);\n\ntest('useWinUI3=true in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async () => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n\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 AutolinkWindows(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const packagesConfig = (\n await fs.readFile(path.join(folder, 'windows/WithWinUI3/packages.config'))\n ).toString();\n\n const experimentalFeatures = (\n await fs.readFile(path.join(folder, 'windows/ExperimentalFeatures.props'))\n ).toString();\n\n expect(packagesConfig.replace(/\\r/g, '')).toMatchSnapshot();\n\n expect(experimentalFeatures.replace(/\\r/g, '')).toMatchSnapshot();\n});\n"]}
|
|
1
|
+
{"version":3,"file":"projectConfig.test.js","sourceRoot":"","sources":["../../src/e2etest/projectConfig.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\n\nimport {\n projectConfigWindows,\n WindowsProjectConfig,\n} from '../config/projectConfig';\n\nimport {copyAndReplace} from '../generator-common';\nimport {AutolinkWindows} from '../runWindows/utils/autolink';\nimport {\n ensureWinUI3Project,\n templateRoot,\n testProjectGuid,\n tryMkdir,\n} from './projectConfig.utils';\n\ntype TargetProject = [string, ((folder: string) => Promise<void>)?];\n\nfunction project(\n name: string,\n setup?: (folder: string) => Promise<void>,\n): TargetProject {\n return [name, setup];\n}\n\nconst projects: TargetProject[] = [\n // Nothing but a react-native.config.js, with nulls\n project('BlankApp'),\n // Nothing but a windows folder\n project('MissingProjectFilesApp', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n }),\n // New C++ project based on the template\n project('SimpleCppApp', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCppApp',\n namespace: 'SimpleCppApp',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-app/proj/MyApp.sln'),\n path.join(windowsDir, 'SimpleCppApp.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCppApp');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-app/proj/MyApp.vcxproj'),\n path.join(projDir, 'SimpleCppApp.vcxproj'),\n replacements,\n null,\n );\n }),\n // New C# project based on the template\n project('SimpleCSharpApp', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCSharpApp',\n namespace: 'SimpleCSharpApp',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-app/proj/MyApp.sln'),\n path.join(windowsDir, 'SimpleCSharpApp.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCSharpApp');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-app/proj/MyApp.csproj'),\n path.join(projDir, 'SimpleCSharpApp.csproj'),\n replacements,\n null,\n );\n }),\n project('WithWinUI3', async (folder: string) => {\n await ensureWinUI3Project(folder);\n }),\n project('WithIndirectDependency'),\n project('WithExperimentalFeaturesProps'),\n project('WithUseExperimentalNuget'),\n project('WithUseExperimentalNugetSetInProject'),\n];\n\n// Tests that given userConfig is null, the result will always be null\ntest.each(projects)(\n 'projectConfig - %s (userConfig is null)',\n async (name, setup) => {\n const folder = path.resolve('src/e2etest/projects/', name);\n\n if (setup !== undefined) {\n await setup(folder);\n }\n\n const userConfig = null;\n\n expect(projectConfigWindows(folder, userConfig)).toBeNull();\n },\n);\n\n// Tests the result given a windows project config in react-native.config.js\ntest.each(projects)(\n 'projectConfig - %s (Use react-native.config.js)',\n async (name, setup) => {\n const folder = path.resolve('src/e2etest/projects/', name);\n const rnc = require(path.join(folder, 'react-native.config.js'));\n\n if (setup !== undefined) {\n await setup(folder);\n }\n\n const userConfig: Partial<WindowsProjectConfig> = rnc.project.windows;\n\n if (name === 'BlankApp') {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n });\n }\n },\n);\n\n// Tests the result of ignoring the windows project config in react-native.config.js\ntest.each(projects)(\n 'projectConfig - %s (Ignore react-native.config.js)',\n async (name, setup) => {\n const folder = path.resolve('src/e2etest/projects/', name);\n\n if (setup !== undefined) {\n await setup(folder);\n }\n\n const userConfig: Partial<WindowsProjectConfig> = {};\n\n if (name === 'BlankApp') {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else {\n expect(projectConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n });\n }\n },\n);\n\ntest('useWinUI3=true in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async () => {\n const folder = path.resolve('src/e2etest/projects/WithWinUI3');\n\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 AutolinkWindows(\n {windows: config},\n {},\n {\n check: false,\n logging: false,\n },\n );\n\n const exd = await al.ensureXAMLDialect();\n expect(exd).toBeTruthy();\n\n const experimentalFeatures = (\n await fs.readFile(path.join(folder, 'windows/ExperimentalFeatures.props'))\n ).toString();\n\n expect(experimentalFeatures.replace(/\\r/g, '')).toMatchSnapshot();\n});\n"]}
|
|
@@ -35,20 +35,14 @@ async function ensureWinUI3Project(folder) {
|
|
|
35
35
|
{
|
|
36
36
|
id: 'Microsoft.ReactNative.Cxx',
|
|
37
37
|
version: '1.0.0',
|
|
38
|
-
hasProps: false,
|
|
39
|
-
hasTargets: true,
|
|
40
38
|
},
|
|
41
39
|
{
|
|
42
40
|
id: 'Microsoft.UI.Xaml',
|
|
43
41
|
version: '2.3.4.5',
|
|
44
|
-
hasProps: false,
|
|
45
|
-
hasTargets: false,
|
|
46
42
|
},
|
|
47
43
|
{
|
|
48
44
|
id: 'Microsoft.WinUI',
|
|
49
45
|
version: '3.2.1.0',
|
|
50
|
-
hasProps: false,
|
|
51
|
-
hasTargets: false,
|
|
52
46
|
},
|
|
53
47
|
],
|
|
54
48
|
};
|
|
@@ -56,7 +50,6 @@ async function ensureWinUI3Project(folder) {
|
|
|
56
50
|
const projDir = path_1.default.join(windowsDir, 'WithWinUI3');
|
|
57
51
|
await tryMkdir(projDir);
|
|
58
52
|
await (0, generator_common_1.copyAndReplace)(path_1.default.join(exports.templateRoot, 'cpp-app/proj/MyApp.vcxproj'), path_1.default.join(projDir, 'WithWinUI3.vcxproj'), replacements, null);
|
|
59
|
-
await (0, generator_common_1.copyAndReplace)(path_1.default.join(exports.templateRoot, 'cpp-app/proj/packages.config'), path_1.default.join(projDir, 'packages.config'), replacements, null);
|
|
60
53
|
await (0, generator_common_1.copyAndReplace)(path_1.default.join(exports.templateRoot, 'shared-app/proj/ExperimentalFeatures.props'), path_1.default.join(windowsDir, 'ExperimentalFeatures.props'), replacements, null);
|
|
61
54
|
}
|
|
62
55
|
exports.ensureWinUI3Project = ensureWinUI3Project;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.utils.js","sourceRoot":"","sources":["../../src/e2etest/projectConfig.utils.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyC;AACzC,gDAAwB;AACxB,0DAAqD;AAExC,QAAA,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAEvD,QAAA,eAAe,GAAG,wCAAwC,CAAC;AAEjE,KAAK,UAAU,QAAQ,CAAC,GAAW;IACxC,IAAI;QACF,MAAM,YAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KACxC;IAAC,OAAO,GAAG,EAAE,GAAE;AAClB,CAAC;AAJD,4BAIC;AAEM,KAAK,UAAU,mBAAmB,CAAC,MAAc;IACtD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7B,MAAM,YAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KAC/C;IACD,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE3B,MAAM,YAAY,GAAG;QACnB,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,uBAAe;QACjC,gBAAgB,EAAE,uBAAe,CAAC,WAAW,EAAE;QAC/C,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,oBAAoB,EAAE,KAAK;QAC3B,8BAA8B,EAAE;YAC9B;gBACE,EAAE,EAAE,2BAA2B;gBAC/B,OAAO,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"projectConfig.utils.js","sourceRoot":"","sources":["../../src/e2etest/projectConfig.utils.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyC;AACzC,gDAAwB;AACxB,0DAAqD;AAExC,QAAA,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAEvD,QAAA,eAAe,GAAG,wCAAwC,CAAC;AAEjE,KAAK,UAAU,QAAQ,CAAC,GAAW;IACxC,IAAI;QACF,MAAM,YAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KACxC;IAAC,OAAO,GAAG,EAAE,GAAE;AAClB,CAAC;AAJD,4BAIC;AAEM,KAAK,UAAU,mBAAmB,CAAC,MAAc;IACtD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7B,MAAM,YAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KAC/C;IACD,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE3B,MAAM,YAAY,GAAG;QACnB,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,uBAAe;QACjC,gBAAgB,EAAE,uBAAe,CAAC,WAAW,EAAE;QAC/C,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,oBAAoB,EAAE,KAAK;QAC3B,8BAA8B,EAAE;YAC9B;gBACE,EAAE,EAAE,2BAA2B;gBAC/B,OAAO,EAAE,OAAO;aACjB;YACD;gBACE,EAAE,EAAE,mBAAmB;gBACvB,OAAO,EAAE,SAAS;aACnB;YACD;gBACE,EAAE,EAAE,iBAAiB;gBACrB,OAAO,EAAE,SAAS;aACnB;SACF;KACF,CAAC;IAEF,MAAM,IAAA,iCAAc,EAClB,cAAI,CAAC,IAAI,CAAC,oBAAY,EAAE,wBAAwB,CAAC,EACjD,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EACvC,YAAY,EACZ,IAAI,CACL,CAAC;IAEF,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAExB,MAAM,IAAA,iCAAc,EAClB,cAAI,CAAC,IAAI,CAAC,oBAAY,EAAE,4BAA4B,CAAC,EACrD,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,EACxC,YAAY,EACZ,IAAI,CACL,CAAC;IAEF,MAAM,IAAA,iCAAc,EAClB,cAAI,CAAC,IAAI,CAAC,oBAAY,EAAE,4CAA4C,CAAC,EACrE,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,4BAA4B,CAAC,EACnD,YAAY,EACZ,IAAI,CACL,CAAC;AACJ,CAAC;AAvDD,kDAuDC","sourcesContent":["import fs from '@react-native-windows/fs'\nimport path from 'path';\nimport { copyAndReplace } from '../generator-common';\n\nexport const templateRoot = path.resolve('../../../vnext/template');\n\nexport const testProjectGuid = '{416476D5-974A-4EE2-8145-4E331297247E}';\n\nexport async function tryMkdir(dir: string): Promise<void> {\n try {\n await fs.mkdir(dir, {recursive: true});\n } catch (err) {}\n}\n\nexport async function ensureWinUI3Project(folder: string) {\n const windowsDir = path.join(folder, 'windows');\n if (fs.existsSync(windowsDir)) {\n await fs.rmdir(windowsDir, {recursive: true});\n }\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'WithWinUI3',\n namespace: 'WithWinUI3',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n useWinUI3: false,\n useHermes: false,\n useExperimentalNuget: false,\n packagesConfigCppNugetPackages: [\n {\n id: 'Microsoft.ReactNative.Cxx',\n version: '1.0.0',\n },\n {\n id: 'Microsoft.UI.Xaml',\n version: '2.3.4.5',\n },\n {\n id: 'Microsoft.WinUI',\n version: '3.2.1.0',\n },\n ],\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-app/proj/MyApp.sln'),\n path.join(windowsDir, 'WithWinUI3.sln'),\n replacements,\n null\n );\n\n const projDir = path.join(windowsDir, 'WithWinUI3');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-app/proj/MyApp.vcxproj'),\n path.join(projDir, 'WithWinUI3.vcxproj'),\n replacements,\n null\n );\n\n await copyAndReplace(\n path.join(templateRoot, 'shared-app/proj/ExperimentalFeatures.props'),\n path.join(windowsDir, 'ExperimentalFeatures.props'),\n replacements,\n null\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"]}
|