@react-native-windows/cli 0.66.1 → 0.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +303 -22
- package/CHANGELOG.md +127 -14
- package/lib-commonjs/config/configUtils.js.map +1 -1
- package/lib-commonjs/config/dependencyConfig.js +2 -2
- package/lib-commonjs/config/dependencyConfig.js.map +1 -1
- package/lib-commonjs/config/projectConfig.js +2 -2
- package/lib-commonjs/config/projectConfig.js.map +1 -1
- package/lib-commonjs/e2etest/autolink.test.d.ts +5 -0
- package/lib-commonjs/e2etest/autolink.test.js +93 -12
- package/lib-commonjs/e2etest/autolink.test.js.map +1 -1
- package/lib-commonjs/e2etest/dependencyConfig.test.js +15 -15
- package/lib-commonjs/e2etest/dependencyConfig.test.js.map +1 -1
- package/lib-commonjs/e2etest/projectConfig.test.js +16 -16
- package/lib-commonjs/e2etest/projectConfig.test.js.map +1 -1
- package/lib-commonjs/e2etest/projectConfig.utils.js +4 -4
- package/lib-commonjs/e2etest/projectConfig.utils.js.map +1 -1
- package/lib-commonjs/e2etest/runWindows.test.js +21 -3
- package/lib-commonjs/e2etest/runWindows.test.js.map +1 -1
- package/lib-commonjs/generator-common/index.js +1 -1
- package/lib-commonjs/generator-common/index.js.map +1 -1
- package/lib-commonjs/generator-windows/index.js +24 -51
- package/lib-commonjs/generator-windows/index.js.map +1 -1
- package/lib-commonjs/healthChecks.js +22 -4
- package/lib-commonjs/healthChecks.js.map +1 -1
- package/lib-commonjs/index.js +3 -3
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/runWindows/runWindows.js +29 -26
- package/lib-commonjs/runWindows/runWindows.js.map +1 -1
- package/lib-commonjs/runWindows/runWindowsOptions.d.ts +8 -8
- package/lib-commonjs/runWindows/runWindowsOptions.js +1 -10
- package/lib-commonjs/runWindows/runWindowsOptions.js.map +1 -1
- package/lib-commonjs/runWindows/utils/autolink.d.ts +8 -5
- package/lib-commonjs/runWindows/utils/autolink.js +38 -30
- package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
- package/lib-commonjs/runWindows/utils/build.js +3 -3
- 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.d.ts +2 -1
- package/lib-commonjs/runWindows/utils/commandWithProgress.js +5 -4
- package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +1 -1
- package/lib-commonjs/runWindows/utils/deploy.d.ts +1 -1
- package/lib-commonjs/runWindows/utils/deploy.js +80 -29
- package/lib-commonjs/runWindows/utils/deploy.js.map +1 -1
- package/lib-commonjs/runWindows/utils/msbuildtools.js +11 -11
- package/lib-commonjs/runWindows/utils/msbuildtools.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/winappdeploytool.js +4 -4
- package/lib-commonjs/runWindows/utils/winappdeploytool.js.map +1 -1
- package/package.json +12 -9
|
@@ -42,10 +42,10 @@ const projects = [
|
|
|
42
42
|
projectGuidUpper: testProjectGuid,
|
|
43
43
|
projectGuidLower: testProjectGuid.toLowerCase(),
|
|
44
44
|
};
|
|
45
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cpp-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCppApp.sln'), replacements, null);
|
|
45
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cpp-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCppApp.sln'), replacements, null);
|
|
46
46
|
const projDir = path_1.default.join(windowsDir, 'SimpleCppApp');
|
|
47
47
|
await tryMkdir(projDir);
|
|
48
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cpp-app/proj/MyApp.vcxproj'), path_1.default.join(projDir, 'SimpleCppApp.vcxproj'), replacements, null);
|
|
48
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cpp-app/proj/MyApp.vcxproj'), path_1.default.join(projDir, 'SimpleCppApp.vcxproj'), replacements, null);
|
|
49
49
|
}),
|
|
50
50
|
// New C++ project based on the template
|
|
51
51
|
project('SimpleCppLib', async (folder) => {
|
|
@@ -58,10 +58,10 @@ const projects = [
|
|
|
58
58
|
projectGuidUpper: testProjectGuid,
|
|
59
59
|
projectGuidLower: testProjectGuid.toLowerCase(),
|
|
60
60
|
};
|
|
61
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cpp-lib/proj/MyLib.sln'), path_1.default.join(windowsDir, 'SimpleCppLib.sln'), replacements, null);
|
|
61
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cpp-lib/proj/MyLib.sln'), path_1.default.join(windowsDir, 'SimpleCppLib.sln'), replacements, null);
|
|
62
62
|
const projDir = path_1.default.join(windowsDir, 'SimpleCppLib');
|
|
63
63
|
await tryMkdir(projDir);
|
|
64
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cpp-lib/proj/MyLib.vcxproj'), path_1.default.join(projDir, 'SimpleCppLib.vcxproj'), replacements, null);
|
|
64
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cpp-lib/proj/MyLib.vcxproj'), path_1.default.join(projDir, 'SimpleCppLib.vcxproj'), replacements, null);
|
|
65
65
|
}),
|
|
66
66
|
// New C# app project based on the template
|
|
67
67
|
project('SimpleCSharpApp', async (folder) => {
|
|
@@ -74,10 +74,10 @@ const projects = [
|
|
|
74
74
|
projectGuidUpper: testProjectGuid,
|
|
75
75
|
projectGuidLower: testProjectGuid.toLowerCase(),
|
|
76
76
|
};
|
|
77
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cs-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCSharpApp.sln'), replacements, null);
|
|
77
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cs-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCSharpApp.sln'), replacements, null);
|
|
78
78
|
const projDir = path_1.default.join(windowsDir, 'SimpleCSharpApp');
|
|
79
79
|
await tryMkdir(projDir);
|
|
80
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cs-app/proj/MyApp.csproj'), path_1.default.join(projDir, 'SimpleCSharpApp.csproj'), replacements, null);
|
|
80
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cs-app/proj/MyApp.csproj'), path_1.default.join(projDir, 'SimpleCSharpApp.csproj'), replacements, null);
|
|
81
81
|
}),
|
|
82
82
|
// New C# project based on the template
|
|
83
83
|
project('SimpleCSharpLib', async (folder) => {
|
|
@@ -90,10 +90,10 @@ const projects = [
|
|
|
90
90
|
projectGuidUpper: testProjectGuid,
|
|
91
91
|
projectGuidLower: testProjectGuid.toLowerCase(),
|
|
92
92
|
};
|
|
93
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cs-lib/proj/MyLib.sln'), path_1.default.join(windowsDir, 'SimpleCSharpLib.sln'), replacements, null);
|
|
93
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cs-lib/proj/MyLib.sln'), path_1.default.join(windowsDir, 'SimpleCSharpLib.sln'), replacements, null);
|
|
94
94
|
const projDir = path_1.default.join(windowsDir, 'SimpleCSharpLib');
|
|
95
95
|
await tryMkdir(projDir);
|
|
96
|
-
await generator_common_1.copyAndReplace(path_1.default.join(templateRoot, 'cs-lib/proj/MyLib.csproj'), path_1.default.join(projDir, 'SimpleCSharpLib.csproj'), replacements, null);
|
|
96
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(templateRoot, 'cs-lib/proj/MyLib.csproj'), path_1.default.join(projDir, 'SimpleCSharpLib.csproj'), replacements, null);
|
|
97
97
|
}),
|
|
98
98
|
project('WithIndirectDependency'),
|
|
99
99
|
];
|
|
@@ -104,7 +104,7 @@ test.each(projects)('dependencyConfig - %s (userConfig is null)', async (name, s
|
|
|
104
104
|
await setup(folder);
|
|
105
105
|
}
|
|
106
106
|
const userConfig = null;
|
|
107
|
-
expect(dependencyConfig_1.dependencyConfigWindows(folder, userConfig)).toBeNull();
|
|
107
|
+
expect((0, dependencyConfig_1.dependencyConfigWindows)(folder, userConfig)).toBeNull();
|
|
108
108
|
});
|
|
109
109
|
// Tests the result given a windows project config in react-native.config.js
|
|
110
110
|
test.each(projects)('dependencyConfig - %s (Use react-native.config.js)', async (name, setup) => {
|
|
@@ -115,10 +115,10 @@ test.each(projects)('dependencyConfig - %s (Use react-native.config.js)', async
|
|
|
115
115
|
}
|
|
116
116
|
const userConfig = rnc.dependency.platforms.windows;
|
|
117
117
|
if (name === 'BlankLib') {
|
|
118
|
-
expect(dependencyConfig_1.dependencyConfigWindows(folder, userConfig)).toMatchSnapshot();
|
|
118
|
+
expect((0, dependencyConfig_1.dependencyConfigWindows)(folder, userConfig)).toMatchSnapshot();
|
|
119
119
|
}
|
|
120
120
|
else if (name.endsWith('App')) {
|
|
121
|
-
expect(dependencyConfig_1.dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({
|
|
121
|
+
expect((0, dependencyConfig_1.dependencyConfigWindows)(folder, userConfig)).toMatchSnapshot({
|
|
122
122
|
folder: expect.stringContaining(name),
|
|
123
123
|
projects: expect.arrayContaining([
|
|
124
124
|
expect.objectContaining({
|
|
@@ -128,7 +128,7 @@ test.each(projects)('dependencyConfig - %s (Use react-native.config.js)', async
|
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
130
|
else {
|
|
131
|
-
expect(dependencyConfig_1.dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({
|
|
131
|
+
expect((0, dependencyConfig_1.dependencyConfigWindows)(folder, userConfig)).toMatchSnapshot({
|
|
132
132
|
folder: expect.stringContaining(name),
|
|
133
133
|
});
|
|
134
134
|
}
|
|
@@ -141,10 +141,10 @@ test.each(projects)('dependencyConfig - %s (Ignore react-native.config.js)', asy
|
|
|
141
141
|
}
|
|
142
142
|
const userConfig = {};
|
|
143
143
|
if (name === 'BlankLib') {
|
|
144
|
-
expect(dependencyConfig_1.dependencyConfigWindows(folder, userConfig)).toMatchSnapshot();
|
|
144
|
+
expect((0, dependencyConfig_1.dependencyConfigWindows)(folder, userConfig)).toMatchSnapshot();
|
|
145
145
|
}
|
|
146
146
|
else if (name.endsWith('App')) {
|
|
147
|
-
expect(dependencyConfig_1.dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({
|
|
147
|
+
expect((0, dependencyConfig_1.dependencyConfigWindows)(folder, userConfig)).toMatchSnapshot({
|
|
148
148
|
folder: expect.stringContaining(name),
|
|
149
149
|
projects: expect.arrayContaining([
|
|
150
150
|
expect.objectContaining({
|
|
@@ -154,7 +154,7 @@ test.each(projects)('dependencyConfig - %s (Ignore react-native.config.js)', asy
|
|
|
154
154
|
});
|
|
155
155
|
}
|
|
156
156
|
else {
|
|
157
|
-
expect(dependencyConfig_1.dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({
|
|
157
|
+
expect((0, dependencyConfig_1.dependencyConfigWindows)(folder, userConfig)).toMatchSnapshot({
|
|
158
158
|
folder: expect.stringContaining(name),
|
|
159
159
|
});
|
|
160
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyConfig.test.js","sourceRoot":"","sources":["../../src/e2etest/dependencyConfig.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 'fs';\nimport path from 'path';\n\nimport {\n dependencyConfigWindows,\n WindowsDependencyConfig,\n} from '../config/dependencyConfig';\n\nimport {copyAndReplace} from '../generator-common';\n\nconst templateRoot = path.resolve('../../../vnext/template');\n\nconst testProjectGuid = '{416476D5-974A-4EE2-8145-4E331297247E}';\n\nasync function tryMkdir(dir: string): Promise<void> {\n try {\n await fs.promises.mkdir(dir, {recursive: true});\n } catch (err) {}\n}\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('BlankLib'),\n // Nothing but a windows folder\n project('MissingProjectFilesLib', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n }),\n // New C++ app 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('SimpleCppLib', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCppLib',\n namespace: 'SimpleCppLib',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-lib/proj/MyLib.sln'),\n path.join(windowsDir, 'SimpleCppLib.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCppLib');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-lib/proj/MyLib.vcxproj'),\n path.join(projDir, 'SimpleCppLib.vcxproj'),\n replacements,\n null,\n );\n }),\n // New C# app 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 // New C# project based on the template\n project('SimpleCSharpLib', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCSharpLib',\n namespace: 'SimpleCSharpLib',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-lib/proj/MyLib.sln'),\n path.join(windowsDir, 'SimpleCSharpLib.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCSharpLib');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-lib/proj/MyLib.csproj'),\n path.join(projDir, 'SimpleCSharpLib.csproj'),\n replacements,\n null,\n );\n }),\n project('WithIndirectDependency'),\n];\n\n// Tests that given userConfig is null, the result will always be null\ntest.each(projects)(\n 'dependencyConfig - %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(dependencyConfigWindows(folder, userConfig)).toBeNull();\n },\n);\n\n// Tests the result given a windows project config in react-native.config.js\ntest.each(projects)(\n 'dependencyConfig - %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<WindowsDependencyConfig> =\n rnc.dependency.platforms.windows;\n\n if (name === 'BlankLib') {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else if (name.endsWith('App')) {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n projects: expect.arrayContaining([\n expect.objectContaining({\n projectFile: expect.stringMatching(\n /Error: .*\\.(?:cs|vcx)proj is type '\\w+'/,\n ),\n }),\n ]),\n });\n } else {\n expect(dependencyConfigWindows(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 'dependencyConfig - %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<WindowsDependencyConfig> = {};\n\n if (name === 'BlankLib') {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else if (name.endsWith('App')) {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n projects: expect.arrayContaining([\n expect.objectContaining({\n projectFile: expect.stringMatching(\n /Error: .*\\.(?:cs|vcx)proj is type '\\w+'/,\n ),\n }),\n ]),\n });\n } else {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n });\n }\n },\n);\n"]}
|
|
1
|
+
{"version":3,"file":"dependencyConfig.test.js","sourceRoot":"","sources":["../../src/e2etest/dependencyConfig.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 'fs';\nimport path from 'path';\n\nimport {\n dependencyConfigWindows,\n WindowsDependencyConfig,\n} from '../config/dependencyConfig';\n\nimport {copyAndReplace} from '../generator-common';\n\nconst templateRoot = path.resolve('../../../vnext/template');\n\nconst testProjectGuid = '{416476D5-974A-4EE2-8145-4E331297247E}';\n\nasync function tryMkdir(dir: string): Promise<void> {\n try {\n await fs.promises.mkdir(dir, {recursive: true});\n } catch (err) {}\n}\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('BlankLib'),\n // Nothing but a windows folder\n project('MissingProjectFilesLib', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n }),\n // New C++ app 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('SimpleCppLib', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCppLib',\n namespace: 'SimpleCppLib',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-lib/proj/MyLib.sln'),\n path.join(windowsDir, 'SimpleCppLib.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCppLib');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cpp-lib/proj/MyLib.vcxproj'),\n path.join(projDir, 'SimpleCppLib.vcxproj'),\n replacements,\n null,\n );\n }),\n // New C# app 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 // New C# project based on the template\n project('SimpleCSharpLib', async (folder: string) => {\n const windowsDir = path.join(folder, 'windows');\n await tryMkdir(windowsDir);\n\n const replacements = {\n name: 'SimpleCSharpLib',\n namespace: 'SimpleCSharpLib',\n useMustache: true,\n projectGuidUpper: testProjectGuid,\n projectGuidLower: testProjectGuid.toLowerCase(),\n };\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-lib/proj/MyLib.sln'),\n path.join(windowsDir, 'SimpleCSharpLib.sln'),\n replacements,\n null,\n );\n\n const projDir = path.join(windowsDir, 'SimpleCSharpLib');\n await tryMkdir(projDir);\n\n await copyAndReplace(\n path.join(templateRoot, 'cs-lib/proj/MyLib.csproj'),\n path.join(projDir, 'SimpleCSharpLib.csproj'),\n replacements,\n null,\n );\n }),\n project('WithIndirectDependency'),\n];\n\n// Tests that given userConfig is null, the result will always be null\ntest.each(projects)(\n 'dependencyConfig - %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(dependencyConfigWindows(folder, userConfig)).toBeNull();\n },\n);\n\n// Tests the result given a windows project config in react-native.config.js\ntest.each(projects)(\n 'dependencyConfig - %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<WindowsDependencyConfig> =\n rnc.dependency.platforms.windows;\n\n if (name === 'BlankLib') {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else if (name.endsWith('App')) {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n projects: expect.arrayContaining([\n expect.objectContaining({\n projectFile: expect.stringMatching(\n /Error: .*\\.(?:cs|vcx)proj is type '\\w+'/,\n ),\n }),\n ]),\n });\n } else {\n expect(dependencyConfigWindows(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 'dependencyConfig - %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<WindowsDependencyConfig> = {};\n\n if (name === 'BlankLib') {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot();\n } else if (name.endsWith('App')) {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n projects: expect.arrayContaining([\n expect.objectContaining({\n projectFile: expect.stringMatching(\n /Error: .*\\.(?:cs|vcx)proj is type '\\w+'/,\n ),\n }),\n ]),\n });\n } else {\n expect(dependencyConfigWindows(folder, userConfig)).toMatchSnapshot({\n folder: expect.stringContaining(name),\n });\n }\n },\n);\n"]}
|
|
@@ -23,12 +23,12 @@ const projects = [
|
|
|
23
23
|
// Nothing but a windows folder
|
|
24
24
|
project('MissingProjectFilesApp', async (folder) => {
|
|
25
25
|
const windowsDir = path_1.default.join(folder, 'windows');
|
|
26
|
-
await projectConfig_utils_1.tryMkdir(windowsDir);
|
|
26
|
+
await (0, projectConfig_utils_1.tryMkdir)(windowsDir);
|
|
27
27
|
}),
|
|
28
28
|
// New C++ project based on the template
|
|
29
29
|
project('SimpleCppApp', async (folder) => {
|
|
30
30
|
const windowsDir = path_1.default.join(folder, 'windows');
|
|
31
|
-
await projectConfig_utils_1.tryMkdir(windowsDir);
|
|
31
|
+
await (0, projectConfig_utils_1.tryMkdir)(windowsDir);
|
|
32
32
|
const replacements = {
|
|
33
33
|
name: 'SimpleCppApp',
|
|
34
34
|
namespace: 'SimpleCppApp',
|
|
@@ -36,15 +36,15 @@ const projects = [
|
|
|
36
36
|
projectGuidUpper: projectConfig_utils_1.testProjectGuid,
|
|
37
37
|
projectGuidLower: projectConfig_utils_1.testProjectGuid.toLowerCase(),
|
|
38
38
|
};
|
|
39
|
-
await generator_common_1.copyAndReplace(path_1.default.join(projectConfig_utils_1.templateRoot, 'cpp-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCppApp.sln'), replacements, null);
|
|
39
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(projectConfig_utils_1.templateRoot, 'cpp-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCppApp.sln'), replacements, null);
|
|
40
40
|
const projDir = path_1.default.join(windowsDir, 'SimpleCppApp');
|
|
41
|
-
await projectConfig_utils_1.tryMkdir(projDir);
|
|
42
|
-
await generator_common_1.copyAndReplace(path_1.default.join(projectConfig_utils_1.templateRoot, 'cpp-app/proj/MyApp.vcxproj'), path_1.default.join(projDir, 'SimpleCppApp.vcxproj'), replacements, null);
|
|
41
|
+
await (0, projectConfig_utils_1.tryMkdir)(projDir);
|
|
42
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(projectConfig_utils_1.templateRoot, 'cpp-app/proj/MyApp.vcxproj'), path_1.default.join(projDir, 'SimpleCppApp.vcxproj'), replacements, null);
|
|
43
43
|
}),
|
|
44
44
|
// New C# project based on the template
|
|
45
45
|
project('SimpleCSharpApp', async (folder) => {
|
|
46
46
|
const windowsDir = path_1.default.join(folder, 'windows');
|
|
47
|
-
await projectConfig_utils_1.tryMkdir(windowsDir);
|
|
47
|
+
await (0, projectConfig_utils_1.tryMkdir)(windowsDir);
|
|
48
48
|
const replacements = {
|
|
49
49
|
name: 'SimpleCSharpApp',
|
|
50
50
|
namespace: 'SimpleCSharpApp',
|
|
@@ -52,13 +52,13 @@ const projects = [
|
|
|
52
52
|
projectGuidUpper: projectConfig_utils_1.testProjectGuid,
|
|
53
53
|
projectGuidLower: projectConfig_utils_1.testProjectGuid.toLowerCase(),
|
|
54
54
|
};
|
|
55
|
-
await generator_common_1.copyAndReplace(path_1.default.join(projectConfig_utils_1.templateRoot, 'cs-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCSharpApp.sln'), replacements, null);
|
|
55
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(projectConfig_utils_1.templateRoot, 'cs-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'SimpleCSharpApp.sln'), replacements, null);
|
|
56
56
|
const projDir = path_1.default.join(windowsDir, 'SimpleCSharpApp');
|
|
57
|
-
await projectConfig_utils_1.tryMkdir(projDir);
|
|
58
|
-
await generator_common_1.copyAndReplace(path_1.default.join(projectConfig_utils_1.templateRoot, 'cs-app/proj/MyApp.csproj'), path_1.default.join(projDir, 'SimpleCSharpApp.csproj'), replacements, null);
|
|
57
|
+
await (0, projectConfig_utils_1.tryMkdir)(projDir);
|
|
58
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(projectConfig_utils_1.templateRoot, 'cs-app/proj/MyApp.csproj'), path_1.default.join(projDir, 'SimpleCSharpApp.csproj'), replacements, null);
|
|
59
59
|
}),
|
|
60
60
|
project('WithWinUI3', async (folder) => {
|
|
61
|
-
await projectConfig_utils_1.ensureWinUI3Project(folder);
|
|
61
|
+
await (0, projectConfig_utils_1.ensureWinUI3Project)(folder);
|
|
62
62
|
}),
|
|
63
63
|
project('WithIndirectDependency'),
|
|
64
64
|
project('WithExperimentalFeaturesProps'),
|
|
@@ -72,7 +72,7 @@ test.each(projects)('projectConfig - %s (userConfig is null)', async (name, setu
|
|
|
72
72
|
await setup(folder);
|
|
73
73
|
}
|
|
74
74
|
const userConfig = null;
|
|
75
|
-
expect(projectConfig_1.projectConfigWindows(folder, userConfig)).toBeNull();
|
|
75
|
+
expect((0, projectConfig_1.projectConfigWindows)(folder, userConfig)).toBeNull();
|
|
76
76
|
});
|
|
77
77
|
// Tests the result given a windows project config in react-native.config.js
|
|
78
78
|
test.each(projects)('projectConfig - %s (Use react-native.config.js)', async (name, setup) => {
|
|
@@ -83,10 +83,10 @@ test.each(projects)('projectConfig - %s (Use react-native.config.js)', async (na
|
|
|
83
83
|
}
|
|
84
84
|
const userConfig = rnc.project.windows;
|
|
85
85
|
if (name === 'BlankApp') {
|
|
86
|
-
expect(projectConfig_1.projectConfigWindows(folder, userConfig)).toMatchSnapshot();
|
|
86
|
+
expect((0, projectConfig_1.projectConfigWindows)(folder, userConfig)).toMatchSnapshot();
|
|
87
87
|
}
|
|
88
88
|
else {
|
|
89
|
-
expect(projectConfig_1.projectConfigWindows(folder, userConfig)).toMatchSnapshot({
|
|
89
|
+
expect((0, projectConfig_1.projectConfigWindows)(folder, userConfig)).toMatchSnapshot({
|
|
90
90
|
folder: expect.stringContaining(name),
|
|
91
91
|
});
|
|
92
92
|
}
|
|
@@ -99,10 +99,10 @@ test.each(projects)('projectConfig - %s (Ignore react-native.config.js)', async
|
|
|
99
99
|
}
|
|
100
100
|
const userConfig = {};
|
|
101
101
|
if (name === 'BlankApp') {
|
|
102
|
-
expect(projectConfig_1.projectConfigWindows(folder, userConfig)).toMatchSnapshot();
|
|
102
|
+
expect((0, projectConfig_1.projectConfigWindows)(folder, userConfig)).toMatchSnapshot();
|
|
103
103
|
}
|
|
104
104
|
else {
|
|
105
|
-
expect(projectConfig_1.projectConfigWindows(folder, userConfig)).toMatchSnapshot({
|
|
105
|
+
expect((0, projectConfig_1.projectConfigWindows)(folder, userConfig)).toMatchSnapshot({
|
|
106
106
|
folder: expect.stringContaining(name),
|
|
107
107
|
});
|
|
108
108
|
}
|
|
@@ -110,7 +110,7 @@ test.each(projects)('projectConfig - %s (Ignore react-native.config.js)', async
|
|
|
110
110
|
test('useWinUI3=true in react-native.config.js, useWinUI3=false in ExperimentalFeatures.props', async () => {
|
|
111
111
|
const folder = path_1.default.resolve('src/e2etest/projects/WithWinUI3');
|
|
112
112
|
const rnc = require(path_1.default.join(folder, 'react-native.config.js'));
|
|
113
|
-
const config = projectConfig_1.projectConfigWindows(folder, rnc.project.windows);
|
|
113
|
+
const config = (0, projectConfig_1.projectConfigWindows)(folder, rnc.project.windows);
|
|
114
114
|
const al = new autolink_1.AutolinkWindows({ windows: config }, {}, {
|
|
115
115
|
check: false,
|
|
116
116
|
logging: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.test.js","sourceRoot":"","sources":["../../src/e2etest/projectConfig.test.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AAExB,2DAGiC;AAEjC,0DAAmD;AACnD,2DAA6D;AAC7D,+DAK+B;AAI/B,SAAS,OAAO,CACd,IAAY,EACZ,KAAyC;IAEzC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,QAAQ,GAAoB;IAChC,mDAAmD;IACnD,OAAO,CAAC,UAAU,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,wBAAwB,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,8BAAQ,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,wCAAwC;IACxC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,8BAAQ,CAAC,UAAU,CAAC,CAAC;QAE3B,MAAM,YAAY,GAAG;YACnB,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,cAAc;YACzB,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,qCAAe;YACjC,gBAAgB,EAAE,qCAAe,CAAC,WAAW,EAAE;SAChD,CAAC;QAEF,MAAM,iCAAc,CAClB,cAAI,CAAC,IAAI,CAAC,kCAAY,EAAE,wBAAwB,CAAC,EACjD,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EACzC,YAAY,EACZ,IAAI,CACL,CAAC;QAEF,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,8BAAQ,CAAC,OAAO,CAAC,CAAC;QAExB,MAAM,iCAAc,CAClB,cAAI,CAAC,IAAI,CAAC,kCAAY,EAAE,4BAA4B,CAAC,EACrD,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,EAC1C,YAAY,EACZ,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;IACF,uCAAuC;IACvC,OAAO,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;QAClD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,8BAAQ,CAAC,UAAU,CAAC,CAAC;QAE3B,MAAM,YAAY,GAAG;YACnB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,iBAAiB;YAC5B,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,qCAAe;YACjC,gBAAgB,EAAE,qCAAe,CAAC,WAAW,EAAE;SAChD,CAAC;QAEF,MAAM,iCAAc,CAClB,cAAI,CAAC,IAAI,CAAC,kCAAY,EAAE,uBAAuB,CAAC,EAChD,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAC5C,YAAY,EACZ,IAAI,CACL,CAAC;QAEF,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,8BAAQ,CAAC,OAAO,CAAC,CAAC;QAExB,MAAM,iCAAc,CAClB,cAAI,CAAC,IAAI,CAAC,kCAAY,EAAE,0BAA0B,CAAC,EACnD,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,EAC5C,YAAY,EACZ,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;QAC7C,MAAM,yCAAmB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,OAAO,CAAC,wBAAwB,CAAC;IACjC,OAAO,CAAC,+BAA+B,CAAC;IACxC,OAAO,CAAC,0BAA0B,CAAC;IACnC,OAAO,CAAC,sCAAsC,CAAC;CAChD,CAAC;AAEF,sEAAsE;AACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CACjB,yCAAyC,EACzC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACpB,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;KACrB;IAED,MAAM,UAAU,GAAG,IAAI,CAAC;IAExB,MAAM,CAAC,oCAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9D,CAAC,CACF,CAAC;AAEF,4EAA4E;AAC5E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CACjB,iDAAiD,EACjD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACpB,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAEjE,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;KACrB;IAED,MAAM,UAAU,GAAkC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IAEtE,IAAI,IAAI,KAAK,UAAU,EAAE;QACvB,MAAM,CAAC,oCAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;KACpE;SAAM;QACL,MAAM,CAAC,oCAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;YAC/D,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;SACtC,CAAC,CAAC;KACJ;AACH,CAAC,CACF,CAAC;AAEF,oFAAoF;AACpF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CACjB,oDAAoD,EACpD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACpB,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;KACrB;IAED,MAAM,UAAU,GAAkC,EAAE,CAAC;IAErD,IAAI,IAAI,KAAK,UAAU,EAAE;QACvB,MAAM,CAAC,oCAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;KACpE;SAAM;QACL,MAAM,CAAC,oCAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;YAC/D,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;SACtC,CAAC,CAAC;KACJ;AACH,CAAC,CACF,CAAC;AAEF,IAAI,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;IACzG,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,oCAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAE,CAAC;IAElE,MAAM,EAAE,GAAG,IAAI,0BAAe,CAC5B,EAAC,OAAO,EAAE,MAAM,EAAC,EACjB,EAAE,EACF;QACE,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;KACf,CACF,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;IAEzB,MAAM,cAAc,GAAG,CACrB,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CACxB,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oCAAoC,CAAC,CACxD,CACF,CAAC,QAAQ,EAAE,CAAC;IAEb,MAAM,oBAAoB,GAAG,CAC3B,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CACxB,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oCAAoC,CAAC,CACxD,CACF,CAAC,QAAQ,EAAE,CAAC;IAEb,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAE5D,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;AACpE,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from 'fs';\nimport path from 'path';\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.promises.readFile(\n path.join(folder, 'windows/WithWinUI3/packages.config'),\n )\n ).toString();\n\n const experimentalFeatures = (\n await fs.promises.readFile(\n path.join(folder, 'windows/ExperimentalFeatures.props'),\n )\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 '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.promises.readFile(\n path.join(folder, 'windows/WithWinUI3/packages.config'),\n )\n ).toString();\n\n const experimentalFeatures = (\n await fs.promises.readFile(\n path.join(folder, 'windows/ExperimentalFeatures.props'),\n )\n ).toString();\n\n expect(packagesConfig.replace(/\\r/g, '')).toMatchSnapshot();\n\n expect(experimentalFeatures.replace(/\\r/g, '')).toMatchSnapshot();\n});\n"]}
|
|
@@ -52,12 +52,12 @@ async function ensureWinUI3Project(folder) {
|
|
|
52
52
|
},
|
|
53
53
|
],
|
|
54
54
|
};
|
|
55
|
-
await generator_common_1.copyAndReplace(path_1.default.join(exports.templateRoot, 'cpp-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'WithWinUI3.sln'), replacements, null);
|
|
55
|
+
await (0, generator_common_1.copyAndReplace)(path_1.default.join(exports.templateRoot, 'cpp-app/proj/MyApp.sln'), path_1.default.join(windowsDir, 'WithWinUI3.sln'), replacements, null);
|
|
56
56
|
const projDir = path_1.default.join(windowsDir, 'WithWinUI3');
|
|
57
57
|
await tryMkdir(projDir);
|
|
58
|
-
await 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 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
|
-
await generator_common_1.copyAndReplace(path_1.default.join(exports.templateRoot, 'shared-app/proj/ExperimentalFeatures.props'), path_1.default.join(windowsDir, 'ExperimentalFeatures.props'), replacements, null);
|
|
58
|
+
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
|
+
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
61
|
}
|
|
62
62
|
exports.ensureWinUI3Project = ensureWinUI3Project;
|
|
63
63
|
//# sourceMappingURL=projectConfig.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.utils.js","sourceRoot":"","sources":["../../src/e2etest/projectConfig.utils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,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,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KACjD;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,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KACxD;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;gBAChB,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,IAAI;aACjB;YACD;gBACE,EAAE,EAAE,mBAAmB;gBACvB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,KAAK;aAClB;YACD;gBACE,EAAE,EAAE,iBAAiB;gBACrB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,KAAK;aAClB;SACF;KACF,CAAC;IAEF,MAAM,iCAAc,
|
|
1
|
+
{"version":3,"file":"projectConfig.utils.js","sourceRoot":"","sources":["../../src/e2etest/projectConfig.utils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,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,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KACjD;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,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KACxD;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;gBAChB,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,IAAI;aACjB;YACD;gBACE,EAAE,EAAE,mBAAmB;gBACvB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,KAAK;aAClB;YACD;gBACE,EAAE,EAAE,iBAAiB;gBACrB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,KAAK;aAClB;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,8BAA8B,CAAC,EACvD,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EACrC,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;AApED,kDAoEC","sourcesContent":["import fs from '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.promises.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.promises.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 hasProps: false,\n hasTargets: true,\n },\n {\n id: 'Microsoft.UI.Xaml',\n version: '2.3.4.5',\n hasProps: false,\n hasTargets: false,\n },\n {\n id: 'Microsoft.WinUI',\n version: '3.2.1.0',\n hasProps: false,\n hasTargets: false,\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, 'cpp-app/proj/packages.config'),\n path.join(projDir, 'packages.config'),\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"]}
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
const runWindows_1 = require("../runWindows/runWindows");
|
|
9
|
+
const runWindowsOptions_1 = require("../runWindows/runWindowsOptions");
|
|
9
10
|
test('getAnonymizedProjectName - Project Exists', async () => {
|
|
10
|
-
const fooName = await runWindows_1.getAnonymizedProjectName(`${__dirname}/projects/FooPackage`);
|
|
11
|
-
const barName = await runWindows_1.getAnonymizedProjectName(`${__dirname}/projects/BarPackage`);
|
|
11
|
+
const fooName = await (0, runWindows_1.getAnonymizedProjectName)(`${__dirname}/projects/FooPackage`);
|
|
12
|
+
const barName = await (0, runWindows_1.getAnonymizedProjectName)(`${__dirname}/projects/BarPackage`);
|
|
12
13
|
expect(typeof fooName).toBe('string');
|
|
13
14
|
expect(typeof barName).toBe('string');
|
|
14
15
|
expect(fooName.length).toBeGreaterThan(0);
|
|
@@ -16,7 +17,24 @@ test('getAnonymizedProjectName - Project Exists', async () => {
|
|
|
16
17
|
expect(fooName).not.toBe(barName);
|
|
17
18
|
});
|
|
18
19
|
test('getAnonymizedProjectName - Project Doesnt Exist', async () => {
|
|
19
|
-
const emptyPackageName = await runWindows_1.getAnonymizedProjectName(`${__dirname}/projects/BlankApp`);
|
|
20
|
+
const emptyPackageName = await (0, runWindows_1.getAnonymizedProjectName)(`${__dirname}/projects/BlankApp`);
|
|
20
21
|
expect(emptyPackageName).toBeNull();
|
|
21
22
|
});
|
|
23
|
+
test('runWindowsOptions - validate options', () => {
|
|
24
|
+
for (const commandOption of runWindowsOptions_1.runWindowsOptions) {
|
|
25
|
+
// Validate names
|
|
26
|
+
expect(commandOption.name).not.toBeNull();
|
|
27
|
+
expect(commandOption.name.startsWith('--')).toBe(true);
|
|
28
|
+
expect(commandOption.name).toBe(commandOption.name.trim());
|
|
29
|
+
// Validate defaults
|
|
30
|
+
if (!commandOption.name.endsWith(' [string]') &&
|
|
31
|
+
!commandOption.name.endsWith(' [number]')) {
|
|
32
|
+
// Commander ignores defaults for flags, so leave undefined to prevent confusion
|
|
33
|
+
expect(commandOption.default).toBeUndefined();
|
|
34
|
+
}
|
|
35
|
+
// Validate description
|
|
36
|
+
expect(commandOption.description).not.toBeNull();
|
|
37
|
+
expect(commandOption.description).toBe(commandOption.description.trim());
|
|
38
|
+
}
|
|
39
|
+
});
|
|
22
40
|
//# sourceMappingURL=runWindows.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runWindows.test.js","sourceRoot":"","sources":["../../src/e2etest/runWindows.test.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAEH,yDAAkE;AAElE,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,OAAO,GAAG,MAAM,qCAAwB,
|
|
1
|
+
{"version":3,"file":"runWindows.test.js","sourceRoot":"","sources":["../../src/e2etest/runWindows.test.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAEH,yDAAkE;AAClE,uEAAkE;AAElE,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,OAAO,GAAG,MAAM,IAAA,qCAAwB,EAC5C,GAAG,SAAS,sBAAsB,CACnC,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,IAAA,qCAAwB,EAC5C,GAAG,SAAS,sBAAsB,CACnC,CAAC;IAEF,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEtC,MAAM,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAE3C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;IACjE,MAAM,gBAAgB,GAAG,MAAM,IAAA,qCAAwB,EACrD,GAAG,SAAS,oBAAoB,CACjC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,KAAK,MAAM,aAAa,IAAI,qCAAiB,EAAE;QAC7C,iBAAiB;QACjB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3D,oBAAoB;QACpB,IACE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EACzC;YACA,gFAAgF;YAChF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;SAC/C;QAED,uBAAuB;QACvB,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,WAAY,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAY,CAAC,IAAI,EAAE,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n * @format\n */\n\nimport {getAnonymizedProjectName} from '../runWindows/runWindows';\nimport {runWindowsOptions} from '../runWindows/runWindowsOptions';\n\ntest('getAnonymizedProjectName - Project Exists', async () => {\n const fooName = await getAnonymizedProjectName(\n `${__dirname}/projects/FooPackage`,\n );\n const barName = await getAnonymizedProjectName(\n `${__dirname}/projects/BarPackage`,\n );\n\n expect(typeof fooName).toBe('string');\n expect(typeof barName).toBe('string');\n\n expect(fooName!.length).toBeGreaterThan(0);\n expect(barName!.length).toBeGreaterThan(0);\n\n expect(fooName).not.toBe(barName);\n});\n\ntest('getAnonymizedProjectName - Project Doesnt Exist', async () => {\n const emptyPackageName = await getAnonymizedProjectName(\n `${__dirname}/projects/BlankApp`,\n );\n expect(emptyPackageName).toBeNull();\n});\n\ntest('runWindowsOptions - validate options', () => {\n for (const commandOption of runWindowsOptions) {\n // Validate names\n expect(commandOption.name).not.toBeNull();\n expect(commandOption.name.startsWith('--')).toBe(true);\n expect(commandOption.name).toBe(commandOption.name.trim());\n\n // Validate defaults\n if (\n !commandOption.name.endsWith(' [string]') &&\n !commandOption.name.endsWith(' [number]')\n ) {\n // Commander ignores defaults for flags, so leave undefined to prevent confusion\n expect(commandOption.default).toBeUndefined();\n }\n\n // Validate description\n expect(commandOption.description).not.toBeNull();\n expect(commandOption.description!).toBe(commandOption.description!.trim());\n }\n});\n"]}
|
|
@@ -225,7 +225,7 @@ async function upgradeFileContentChangedCallback(absoluteSrcFilePath, relativeDe
|
|
|
225
225
|
`has changed in the new version.\nDo you want to keep your ${relativeDestPath} or replace it with the ` +
|
|
226
226
|
'latest version?\nMake sure you have any changes you made to this file saved somewhere.\n' +
|
|
227
227
|
`You can see the new version here: ${absoluteSrcFilePath}`);
|
|
228
|
-
const { shouldReplace } = await prompts_1.default([
|
|
228
|
+
const { shouldReplace } = await (0, prompts_1.default)([
|
|
229
229
|
{
|
|
230
230
|
name: 'shouldReplace',
|
|
231
231
|
type: 'confirm',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator-common/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,4CAAoB;AACpB,kDAA0B;AAC1B,sDAA8B;AAC9B,gDAAwB;AACxB,wDAAgC;AAChC,+DAA2D;AAW3D,SAAS,IAAI,CAAC,OAAe;IAC3B,IAAI,CAAC,YAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QACxC,OAAO,CAAC,OAAO,CAAC,CAAC;KAClB;IAED,MAAM,KAAK,GAAG,YAAE;SACb,WAAW,CAAC,OAAO,CAAC;SACpB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAC7B,OAAe,EACf,YAA0B;IAE1B,IAAI,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,4DAA4D;QAC5D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC3C,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;gBACzC,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;aACrE;SACF;KACF;SAAM;QACL,wDAAwD;QACxD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC3C,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;gBACzC,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aAC9D;SACF;KACF;IAED,IAAI,YAAY,CAAC,WAAW,EAAE;QAC5B,OAAO,GAAG,kBAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC,YAAY,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACjE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;KACJ;SAAM;QACL,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAjCD,0CAiCC;AAED,6DAA6D;AAC7D,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AASvD;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,QAAgB,EAChB,YAA0B,EAC1B,sBAAqD;IAErD,IAAI,YAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QACvC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC5B,YAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;SACxB;QACD,gBAAgB;QAChB,OAAO;KACR;IAED,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACxC,cAAc;QACd,IAAI,eAAe,GAAG,WAAW,CAAC;QAClC,IAAI,sBAAsB,EAAE;YAC1B,MAAM,gBAAgB,GAAG,YAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,cAAc,GAAiC,WAAW,CAAC;YAC/D,IAAI;gBACF,MAAM,iBAAiB,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACpD,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAC7D,cAAc,GAAG,SAAS,CAAC;iBAC5B;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACzB,cAAc,GAAG,KAAK,CAAC;iBACxB;qBAAM;oBACL,MAAM,GAAG,CAAC;iBACX;aACF;YACD,eAAe,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;SAC1E;QACD,IAAI,eAAe,KAAK,WAAW,EAAE;YACnC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;gBACtC,IAAI,GAAG,EAAE;oBACP,MAAM,GAAG,CAAC;iBACX;YACH,CAAC,CAAC,CAAC;SACJ;KACF;SAAM;QACL,YAAY;QACZ,MAAM,cAAc,GAAG,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;QACjD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEvD,IAAI,eAAe,GAAG,WAAW,CAAC;QAClC,IAAI,sBAAsB,EAAE;YAC1B,iDAAiD;YACjD,IAAI,cAAc,GAAiC,WAAW,CAAC;YAC/D,IAAI;gBACF,MAAM,WAAW,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACtD,IAAI,OAAO,KAAK,WAAW,EAAE;oBAC3B,+CAA+C;oBAC/C,cAAc,GAAG,SAAS,CAAC;iBAC5B;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACzB,cAAc,GAAG,KAAK,CAAC;iBACxB;qBAAM;oBACL,MAAM,GAAG,CAAC;iBACX;aACF;YACD,eAAe,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;SAC1E;QACD,IAAI,eAAe,KAAK,WAAW,EAAE;YACnC,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE;gBAClC,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;SACJ;KACF;AACH,CAAC;AAzED,wCAyEC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,OAAe,EACf,QAAgB,EAChB,EAAyB;IAEzB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,cAAc,GAAG,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IACjD,MAAM,UAAU,GAAG,YAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,YAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE;QACjD,IAAI,EAAE,cAAc;KACrB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;QAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAC3B,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7B,SAAS,IAAI,CAAC,GAAW;QACvB,IAAI,CAAC,QAAQ,EAAE;YACb,EAAE,CAAC,GAAG,CAAC,CAAC;YACR,QAAQ,GAAG,IAAI,CAAC;SACjB;IACH,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,QAAgB;IACxC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC5B,YAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACxB;AACH,CAAC;AAJD,8BAIC;AAEM,KAAK,UAAU,iCAAiC,CACrD,OAAe,EACf,QAAgB,EAChB,gBAAwB,EACxB,YAAqC,EACrC,eAAyB;IAEzB,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG,EAAE,CAAC;KACnB;IACD,MAAM,sBAAsB,GAA2B,eAAe;QACpE,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,CACpB,qCAAqC,CACnC,OAAO,EACP,gBAAgB,EAChB,cAAc,CACf;QACL,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,CACpB,iCAAiC,CAC/B,OAAO,EACP,gBAAgB,EAChB,cAAc,CACf,CAAC;IAER,MAAM,cAAc,CAClB,OAAO,EACP,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EACrC,YAAY,EACZ,sBAAsB,CACvB,CAAC;AACJ,CAAC;AA9BD,8EA8BC;AAEM,KAAK,UAAU,iBAAiB,CACrC,OAAe,EACf,QAAgB,EAChB,eAAuB,EACvB,YAA0B,EAC1B,eAAwB;IAExB,KAAK,MAAM,mBAAmB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;QAC/C,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC7D,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,iCAAiC,CACrC,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,eAAe,CAChB,CAAC;KACH;AACH,CAAC;AAlBD,8CAkBC;AAED,KAAK,UAAU,qCAAqC,CAClD,mBAA2B,EAC3B,gBAAwB,EACxB,cAA4C;IAE5C,IAAI,cAAc,KAAK,KAAK,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;QACxD,OAAO,WAAW,CAAC;KACpB;IACD,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,OAAO,CAAC,GAAG,CACT,GAAG,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,gBAAgB,IAAI,eAAK,CAAC,MAAM,CAC1D,eAAe,CAChB,EAAE,CACJ,CAAC;QACF,OAAO,WAAW,CAAC;KACpB;IACD,IAAI,cAAc,KAAK,WAAW,EAAE;QAClC,OAAO,MAAM,CAAC;KACf;IACD,MAAM,IAAI,sBAAU,CAClB,aAAa,EACb,+BAA+B,gBAAgB,KAAK,cAAc,EAAE,CACrE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iCAAiC,CAC9C,mBAA2B,EAC3B,gBAAwB,EACxB,cAA4C;IAE5C,IAAI,cAAc,KAAK,KAAK,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;QACxD,OAAO,WAAW,CAAC;KACpB;IACD,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,OAAO,CAAC,GAAG,CACT,GAAG,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG;YAChC,6DAA6D,gBAAgB,0BAA0B;YACvG,0FAA0F;YAC1F,qCAAqC,mBAAmB,EAAE,CAC7D,CAAC;QAEF,MAAM,EAAC,aAAa,EAAC,GAAG,MAAM,iBAAO,CAAC;YACpC;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,0BAA0B,gBAAgB,GAAG;gBACtD,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;KAC7C;IACD,IAAI,cAAc,KAAK,WAAW,EAAE;QAClC,OAAO,MAAM,CAAC;KACf;IACD,MAAM,IAAI,sBAAU,CAClB,aAAa,EACb,+BAA+B,gBAAgB,KAAK,cAAc,EAAE,CACrE,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '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.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.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 '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"]}
|