@react-native-windows/cli 0.65.3 → 0.66.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +264 -38
- package/CHANGELOG.md +116 -23
- package/lib-commonjs/config/configUtils.d.ts +22 -0
- package/lib-commonjs/config/configUtils.js +99 -18
- package/lib-commonjs/config/configUtils.js.map +1 -1
- package/lib-commonjs/config/dependencyConfig.js +81 -37
- package/lib-commonjs/config/dependencyConfig.js.map +1 -1
- package/lib-commonjs/config/projectConfig.d.ts +1 -0
- package/lib-commonjs/config/projectConfig.js +58 -9
- package/lib-commonjs/config/projectConfig.js.map +1 -1
- package/lib-commonjs/e2etest/autolink.test.js +13 -10
- package/lib-commonjs/e2etest/autolink.test.js.map +1 -1
- package/lib-commonjs/e2etest/dependencyConfig.test.js +73 -19
- package/lib-commonjs/e2etest/dependencyConfig.test.js.map +1 -1
- package/lib-commonjs/e2etest/projectConfig.test.js +25 -19
- package/lib-commonjs/e2etest/projectConfig.test.js.map +1 -1
- package/lib-commonjs/e2etest/projectConfig.utils.js +16 -12
- package/lib-commonjs/e2etest/projectConfig.utils.js.map +1 -1
- package/lib-commonjs/e2etest/runWindows.test.js.map +1 -1
- package/lib-commonjs/generator-common/index.js +35 -32
- package/lib-commonjs/generator-common/index.js.map +1 -1
- package/lib-commonjs/generator-windows/index.js +101 -83
- package/lib-commonjs/generator-windows/index.js.map +1 -1
- package/lib-commonjs/healthChecks.js +7 -3
- package/lib-commonjs/healthChecks.js.map +1 -1
- package/lib-commonjs/index.js +16 -8
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/runWindows/runWindows.js +45 -18
- package/lib-commonjs/runWindows/runWindows.js.map +1 -1
- package/lib-commonjs/runWindows/runWindowsOptions.js +0 -1
- package/lib-commonjs/runWindows/runWindowsOptions.js.map +1 -1
- package/lib-commonjs/runWindows/utils/autolink.js +77 -50
- package/lib-commonjs/runWindows/utils/autolink.js.map +1 -1
- package/lib-commonjs/runWindows/utils/build.js +12 -9
- package/lib-commonjs/runWindows/utils/build.js.map +1 -1
- package/lib-commonjs/runWindows/utils/checkRequirements.js +7 -4
- package/lib-commonjs/runWindows/utils/checkRequirements.js.map +1 -1
- package/lib-commonjs/runWindows/utils/commandWithProgress.d.ts +1 -1
- package/lib-commonjs/runWindows/utils/commandWithProgress.js +16 -7
- package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +1 -1
- package/lib-commonjs/runWindows/utils/deploy.js +54 -37
- package/lib-commonjs/runWindows/utils/deploy.js.map +1 -1
- package/lib-commonjs/runWindows/utils/info.js +5 -2
- package/lib-commonjs/runWindows/utils/info.js.map +1 -1
- package/lib-commonjs/runWindows/utils/msbuildtools.js +49 -27
- package/lib-commonjs/runWindows/utils/msbuildtools.js.map +1 -1
- package/lib-commonjs/runWindows/utils/version.js.map +1 -1
- package/lib-commonjs/runWindows/utils/vsInstalls.js +8 -5
- package/lib-commonjs/runWindows/utils/vsInstalls.js.map +1 -1
- package/lib-commonjs/runWindows/utils/vstools.js +16 -13
- package/lib-commonjs/runWindows/utils/vstools.js.map +1 -1
- package/lib-commonjs/runWindows/utils/winappdeploytool.js +7 -4
- package/lib-commonjs/runWindows/utils/winappdeploytool.js.map +1 -1
- package/package.json +13 -10
|
@@ -4,15 +4,18 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
* @format
|
|
6
6
|
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
7
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.getProjectGuid = exports.getProjectNamespace = exports.getProjectName = exports.importProjectExists = exports.findPropertyValue = exports.tryFindPropertyValue = exports.readProjectFile = exports.getProjectLanguage = exports.findAppProjectFiles = exports.findDependencyProjectFiles = exports.isRnwDependencyProject = exports.findSolutionFiles = exports.isRnwSolution = exports.findWindowsFolder = exports.findFiles = void 0;
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
11
|
+
exports.getExperimentalFeatures = exports.getProjectGuid = exports.getProjectNamespace = exports.getProjectName = exports.getProjectType = exports.getOutputType = exports.getConfigurationType = exports.importProjectExists = exports.findPropertyValue = exports.tryFindPropertyValue = exports.readProjectFile = exports.getProjectLanguage = exports.findAppProjectFiles = exports.findDependencyProjectFiles = exports.isRnwDependencyProject = exports.findSolutionFiles = exports.isRnwSolution = exports.findWindowsFolder = exports.findFiles = void 0;
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const glob_1 = __importDefault(require("glob"));
|
|
12
15
|
const xmldom_1 = require("@xmldom/xmldom");
|
|
13
|
-
const
|
|
16
|
+
const xpath_1 = __importDefault(require("xpath"));
|
|
14
17
|
const telemetry_1 = require("@react-native-windows/telemetry");
|
|
15
|
-
const msbuildSelect =
|
|
18
|
+
const msbuildSelect = xpath_1.default.useNamespaces({
|
|
16
19
|
msbuild: 'http://schemas.microsoft.com/developer/msbuild/2003',
|
|
17
20
|
});
|
|
18
21
|
/**
|
|
@@ -22,7 +25,7 @@ const msbuildSelect = xpath.useNamespaces({
|
|
|
22
25
|
* @return Return the array of relative file paths.
|
|
23
26
|
*/
|
|
24
27
|
function findFiles(folder, filenamePattern) {
|
|
25
|
-
const files =
|
|
28
|
+
const files = glob_1.default.sync(path_1.default.join('**', filenamePattern), {
|
|
26
29
|
cwd: folder,
|
|
27
30
|
ignore: [
|
|
28
31
|
'node_modules/**',
|
|
@@ -42,8 +45,8 @@ exports.findFiles = findFiles;
|
|
|
42
45
|
*/
|
|
43
46
|
function findWindowsFolder(folder) {
|
|
44
47
|
const winDir = 'windows';
|
|
45
|
-
const joinedDir =
|
|
46
|
-
if (
|
|
48
|
+
const joinedDir = path_1.default.join(folder, winDir);
|
|
49
|
+
if (fs_1.default.existsSync(joinedDir)) {
|
|
47
50
|
return joinedDir;
|
|
48
51
|
}
|
|
49
52
|
return null;
|
|
@@ -55,7 +58,7 @@ exports.findWindowsFolder = findWindowsFolder;
|
|
|
55
58
|
* @return Whether the path is to a RNW solution file.
|
|
56
59
|
*/
|
|
57
60
|
function isRnwSolution(filePath) {
|
|
58
|
-
return (
|
|
61
|
+
return (fs_1.default
|
|
59
62
|
.readFileSync(filePath)
|
|
60
63
|
.toString()
|
|
61
64
|
.search(/ReactNative/) > 0);
|
|
@@ -80,8 +83,8 @@ function findSolutionFiles(winFolder) {
|
|
|
80
83
|
const solutionFiles = [];
|
|
81
84
|
// Try to find any solution file that appears to be a React Native solution
|
|
82
85
|
for (const solutionFile of allSolutions) {
|
|
83
|
-
if (isRnwSolution(
|
|
84
|
-
solutionFiles.push(
|
|
86
|
+
if (isRnwSolution(path_1.default.join(winFolder, solutionFile))) {
|
|
87
|
+
solutionFiles.push(path_1.default.normalize(solutionFile));
|
|
85
88
|
}
|
|
86
89
|
}
|
|
87
90
|
return solutionFiles;
|
|
@@ -121,8 +124,14 @@ function findDependencyProjectFiles(winFolder) {
|
|
|
121
124
|
const dependencyProjectFiles = [];
|
|
122
125
|
// Try to find any project file that appears to be a dependency project
|
|
123
126
|
for (const projectFile of allProjects) {
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
// A project is marked as a RNW dependency iff either:
|
|
128
|
+
// - If the project has the standard native module imports, or
|
|
129
|
+
// - If we only have a single project (and it doesn't have the standard native module imports),
|
|
130
|
+
// pick it and hope for the best. This enables autolinking for modules that were written
|
|
131
|
+
// before the standard native module template existed.
|
|
132
|
+
if (allProjects.length === 1 ||
|
|
133
|
+
isRnwDependencyProject(path_1.default.join(winFolder, projectFile))) {
|
|
134
|
+
dependencyProjectFiles.push(path_1.default.normalize(projectFile));
|
|
126
135
|
}
|
|
127
136
|
}
|
|
128
137
|
return dependencyProjectFiles;
|
|
@@ -161,8 +170,8 @@ function findAppProjectFiles(winFolder) {
|
|
|
161
170
|
const appProjectFiles = [];
|
|
162
171
|
// Try to find any project file that appears to be an app project
|
|
163
172
|
for (const projectFile of allProjects) {
|
|
164
|
-
if (isRnwAppProject(
|
|
165
|
-
appProjectFiles.push(
|
|
173
|
+
if (isRnwAppProject(path_1.default.join(winFolder, projectFile))) {
|
|
174
|
+
appProjectFiles.push(path_1.default.normalize(projectFile));
|
|
166
175
|
}
|
|
167
176
|
}
|
|
168
177
|
return appProjectFiles;
|
|
@@ -189,7 +198,7 @@ exports.getProjectLanguage = getProjectLanguage;
|
|
|
189
198
|
* @return The project file contents.
|
|
190
199
|
*/
|
|
191
200
|
function readProjectFile(projectPath) {
|
|
192
|
-
const projectContents =
|
|
201
|
+
const projectContents = fs_1.default.readFileSync(projectPath, 'utf8').toString();
|
|
193
202
|
return new xmldom_1.DOMParser().parseFromString(projectContents, 'application/xml');
|
|
194
203
|
}
|
|
195
204
|
exports.readProjectFile = readProjectFile;
|
|
@@ -227,6 +236,63 @@ function importProjectExists(projectContents, projectName) {
|
|
|
227
236
|
return nodes.length > 0;
|
|
228
237
|
}
|
|
229
238
|
exports.importProjectExists = importProjectExists;
|
|
239
|
+
/**
|
|
240
|
+
* Gets the configuration type of the project from the project contents.
|
|
241
|
+
* @param projectContents The XML project contents.
|
|
242
|
+
* @return The project configuration type.
|
|
243
|
+
*/
|
|
244
|
+
function getConfigurationType(projectContents) {
|
|
245
|
+
var _a;
|
|
246
|
+
const configurationType = (_a = tryFindPropertyValue(projectContents, 'ConfigurationType')) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
247
|
+
switch (configurationType) {
|
|
248
|
+
case 'application':
|
|
249
|
+
case 'dynamiclibrary':
|
|
250
|
+
case 'generic':
|
|
251
|
+
case 'staticlibrary':
|
|
252
|
+
return configurationType;
|
|
253
|
+
default:
|
|
254
|
+
return 'unknown';
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports.getConfigurationType = getConfigurationType;
|
|
258
|
+
/**
|
|
259
|
+
* Gets the output type of the project from the project contents.
|
|
260
|
+
* @param projectContents The XML project contents.
|
|
261
|
+
* @return The project output type.
|
|
262
|
+
*/
|
|
263
|
+
function getOutputType(projectContents) {
|
|
264
|
+
var _a;
|
|
265
|
+
const outputType = (_a = tryFindPropertyValue(projectContents, 'OutputType')) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
266
|
+
switch (outputType) {
|
|
267
|
+
case 'appcontainerexe':
|
|
268
|
+
case 'exe':
|
|
269
|
+
case 'library':
|
|
270
|
+
case 'module':
|
|
271
|
+
case 'winexe':
|
|
272
|
+
case 'winmdobj':
|
|
273
|
+
return outputType;
|
|
274
|
+
default:
|
|
275
|
+
return 'unknown';
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
exports.getOutputType = getOutputType;
|
|
279
|
+
/**
|
|
280
|
+
* Gets the type of the project from the project contents.
|
|
281
|
+
* @param projectPath The project file path to check.
|
|
282
|
+
* @param projectContents The XML project contents.
|
|
283
|
+
* @return The project type.
|
|
284
|
+
*/
|
|
285
|
+
function getProjectType(projectPath, projectContents) {
|
|
286
|
+
switch (getProjectLanguage(projectPath)) {
|
|
287
|
+
case 'cpp':
|
|
288
|
+
return getConfigurationType(projectContents);
|
|
289
|
+
case 'cs':
|
|
290
|
+
return getOutputType(projectContents);
|
|
291
|
+
default:
|
|
292
|
+
return 'unknown';
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
exports.getProjectType = getProjectType;
|
|
230
296
|
/**
|
|
231
297
|
* Gets the name of the project from the project contents.
|
|
232
298
|
* @param projectPath The project file path to check.
|
|
@@ -235,7 +301,7 @@ exports.importProjectExists = importProjectExists;
|
|
|
235
301
|
*/
|
|
236
302
|
function getProjectName(projectPath, projectContents) {
|
|
237
303
|
const name = tryFindPropertyValue(projectContents, 'ProjectName') ||
|
|
238
|
-
|
|
304
|
+
path_1.default.parse(projectPath).name ||
|
|
239
305
|
'';
|
|
240
306
|
return name;
|
|
241
307
|
}
|
|
@@ -258,4 +324,19 @@ function getProjectGuid(projectContents) {
|
|
|
258
324
|
return tryFindPropertyValue(projectContents, 'ProjectGuid');
|
|
259
325
|
}
|
|
260
326
|
exports.getProjectGuid = getProjectGuid;
|
|
327
|
+
function getExperimentalFeatures(solutionDir) {
|
|
328
|
+
const propsFile = path_1.default.join(solutionDir, 'ExperimentalFeatures.props');
|
|
329
|
+
if (!fs_1.default.existsSync(propsFile)) {
|
|
330
|
+
return undefined;
|
|
331
|
+
}
|
|
332
|
+
const result = {};
|
|
333
|
+
const propsContents = readProjectFile(propsFile);
|
|
334
|
+
const nodes = msbuildSelect(`//msbuild:PropertyGroup/msbuild:*`, propsContents);
|
|
335
|
+
for (const node of nodes) {
|
|
336
|
+
const propertyNode = node;
|
|
337
|
+
result[propertyNode.nodeName] = propertyNode.textContent;
|
|
338
|
+
}
|
|
339
|
+
return result;
|
|
340
|
+
}
|
|
341
|
+
exports.getExperimentalFeatures = getExperimentalFeatures;
|
|
261
342
|
//# sourceMappingURL=configUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configUtils.js","sourceRoot":"","sources":["../../src/config/configUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,yBAAyB;AACzB,6BAA6B;AAC7B,6BAA6B;AAE7B,2CAAyC;AACzC,+BAA+B;AAC/B,+DAA2D;AAE3D,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACxC,OAAO,EAAE,qDAAqD;CAC/D,CAAC,CAAC;AAEH;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,MAAc,EAAE,eAAuB;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;QACxD,GAAG,EAAE,MAAM;QACX,MAAM,EAAE;YACN,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,uBAAuB;YACvB,gBAAgB;SACjB;KACF,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,8BAaC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC5B,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AARD,8CAQC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,CACL,EAAE;SACC,YAAY,CAAC,QAAQ,CAAC;SACtB,QAAQ,EAAE;SACV,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAC7B,CAAC;AACJ,CAAC;AAPD,sCAOC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,gDAAgD;IAChD,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,0CAA0C;QAC1C,OAAO,EAAE,CAAC;KACX;SAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QACpC,wDAAwD;QACxD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1B;IAED,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,2EAA2E;IAC3E,KAAK,MAAM,YAAY,IAAI,YAAY,EAAE;QACvC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE;YACrD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;SAClD;KACF;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAtBD,8CAsBC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,OAAO,mBAAmB,CACxB,eAAe,EACf,6CAA6C,CAC9C,CAAC;KACH;SAAM,IAAI,WAAW,KAAK,KAAK,EAAE;QAChC,OAAO,mBAAmB,CACxB,eAAe,EACf,0CAA0C,CAC3C,CAAC;KACH;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAjBD,wDAiBC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,SAAiB;IAC1D,gDAAgD;IAChD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,yCAAyC;QACzC,OAAO,EAAE,CAAC;KACX;IAED,MAAM,sBAAsB,GAAG,EAAE,CAAC;IAElC,uEAAuE;IACvE,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE;QACrC,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE;YAC7D,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;SAC1D;KACF;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAtBD,gEAsBC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,OAAO,mBAAmB,CACxB,eAAe,EACf,6CAA6C,CAC9C,CAAC;KACH;SAAM,IAAI,WAAW,KAAK,KAAK,EAAE;QAChC,OAAO,mBAAmB,CACxB,eAAe,EACf,0CAA0C,CAC3C,CAAC;KACH;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,SAAiB;IACnD,gDAAgD;IAChD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,yCAAyC;QACzC,OAAO,EAAE,CAAC;KACX;IAED,MAAM,eAAe,GAAG,EAAE,CAAC;IAE3B,iEAAiE;IACjE,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE;QACrC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE;YACtD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;SACnD;KACF;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAtBD,kDAsBC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpC,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC1C,OAAO,IAAI,CAAC;KACb;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AARD,gDAQC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,WAAmB;IACjD,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxE,OAAO,IAAI,kBAAS,EAAE,CAAC,eAAe,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAC7E,CAAC;AAHD,0CAGC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAClC,eAAqB,EACrB,YAAoB;IAEpB,MAAM,KAAK,GAAG,aAAa,CACzB,mCAAmC,YAAY,EAAE,EACjD,eAAe,CAChB,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,oBAAoB;QACpB,OAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAU,CAAC,WAAW,CAAC;KACtD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAfD,oDAeC;AAED,SAAgB,iBAAiB,CAC/B,eAAqB,EACrB,YAAoB,EACpB,QAAgB;IAEhB,MAAM,GAAG,GAAG,oBAAoB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,sBAAU,CAClB,qBAAqB,EACrB,0BAA0B,YAAY,SAAS,QAAQ,EAAE,EACzD,EAAC,YAAY,EAAE,YAAY,EAAC,CAC7B,CAAC;KACH;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAdD,8CAcC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,eAAqB,EACrB,WAAmB;IAEnB,MAAM,KAAK,GAAG,aAAa,CACzB,uCAAuC,WAAW,KAAK,EACvD,eAAe,CAChB,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC;AAVD,kDAUC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAC5B,WAAmB,EACnB,eAAqB;IAErB,MAAM,IAAI,GACR,oBAAoB,CAAC,eAAe,EAAE,aAAa,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI;QAC5B,EAAE,CAAC;IAEL,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,wCAUC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,eAAqB;IACvD,OAAO,oBAAoB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC;AAFD,kDAEC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,eAAqB;IAClD,OAAO,oBAAoB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;AAC9D,CAAC;AAFD,wCAEC"}
|
|
1
|
+
{"version":3,"file":"configUtils.js","sourceRoot":"","sources":["../../src/config/configUtils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AACxB,gDAAwB;AAExB,2CAAyC;AACzC,kDAA0B;AAC1B,+DAA2D;AAE3D,MAAM,aAAa,GAAG,eAAK,CAAC,aAAa,CAAC;IACxC,OAAO,EAAE,qDAAqD;CAC/D,CAAC,CAAC;AAEH;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,MAAc,EAAE,eAAuB;IAC/D,MAAM,KAAK,GAAG,cAAI,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;QACxD,GAAG,EAAE,MAAM;QACX,MAAM,EAAE;YACN,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,uBAAuB;YACvB,gBAAgB;SACjB;KACF,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,8BAaC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC5B,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AARD,8CAQC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,CACL,YAAE;SACC,YAAY,CAAC,QAAQ,CAAC;SACtB,QAAQ,EAAE;SACV,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAC7B,CAAC;AACJ,CAAC;AAPD,sCAOC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,gDAAgD;IAChD,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,0CAA0C;QAC1C,OAAO,EAAE,CAAC;KACX;SAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QACpC,wDAAwD;QACxD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1B;IAED,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,2EAA2E;IAC3E,KAAK,MAAM,YAAY,IAAI,YAAY,EAAE;QACvC,IAAI,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE;YACrD,aAAa,CAAC,IAAI,CAAC,cAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;SAClD;KACF;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAtBD,8CAsBC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,OAAO,mBAAmB,CACxB,eAAe,EACf,6CAA6C,CAC9C,CAAC;KACH;SAAM,IAAI,WAAW,KAAK,KAAK,EAAE;QAChC,OAAO,mBAAmB,CACxB,eAAe,EACf,0CAA0C,CAC3C,CAAC;KACH;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAjBD,wDAiBC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,SAAiB;IAC1D,gDAAgD;IAChD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,yCAAyC;QACzC,OAAO,EAAE,CAAC;KACX;IAED,MAAM,sBAAsB,GAAG,EAAE,CAAC;IAElC,uEAAuE;IACvE,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE;QACrC,sDAAsD;QACtD,8DAA8D;QAC9D,+FAA+F;QAC/F,wFAAwF;QACxF,sDAAsD;QACtD,IACE,WAAW,CAAC,MAAM,KAAK,CAAC;YACxB,sBAAsB,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EACzD;YACA,sBAAsB,CAAC,IAAI,CAAC,cAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;SAC1D;KACF;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC;AA9BD,gEA8BC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,OAAO,mBAAmB,CACxB,eAAe,EACf,6CAA6C,CAC9C,CAAC;KACH;SAAM,IAAI,WAAW,KAAK,KAAK,EAAE;QAChC,OAAO,mBAAmB,CACxB,eAAe,EACf,0CAA0C,CAC3C,CAAC;KACH;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,SAAiB;IACnD,gDAAgD;IAChD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,yCAAyC;QACzC,OAAO,EAAE,CAAC;KACX;IAED,MAAM,eAAe,GAAG,EAAE,CAAC;IAE3B,iEAAiE;IACjE,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE;QACrC,IAAI,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE;YACtD,eAAe,CAAC,IAAI,CAAC,cAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;SACnD;KACF;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAtBD,kDAsBC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpC,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC1C,OAAO,IAAI,CAAC;KACb;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AARD,gDAQC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,WAAmB;IACjD,MAAM,eAAe,GAAG,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxE,OAAO,IAAI,kBAAS,EAAE,CAAC,eAAe,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAC7E,CAAC;AAHD,0CAGC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAClC,eAAqB,EACrB,YAAoB;IAEpB,MAAM,KAAK,GAAG,aAAa,CACzB,mCAAmC,YAAY,EAAE,EACjD,eAAe,CAChB,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,oBAAoB;QACpB,OAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAU,CAAC,WAAW,CAAC;KACtD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAfD,oDAeC;AAED,SAAgB,iBAAiB,CAC/B,eAAqB,EACrB,YAAoB,EACpB,QAAgB;IAEhB,MAAM,GAAG,GAAG,oBAAoB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,sBAAU,CAClB,qBAAqB,EACrB,0BAA0B,YAAY,SAAS,QAAQ,EAAE,EACzD,EAAC,YAAY,EAAE,YAAY,EAAC,CAC7B,CAAC;KACH;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAdD,8CAcC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,eAAqB,EACrB,WAAmB;IAEnB,MAAM,KAAK,GAAG,aAAa,CACzB,uCAAuC,WAAW,KAAK,EACvD,eAAe,CAChB,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC;AAVD,kDAUC;AASD;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,eAAqB;;IACxD,MAAM,iBAAiB,SAAG,oBAAoB,CAC5C,eAAe,EACf,mBAAmB,CACpB,0CAAE,WAAW,EAAE,CAAC;IAEjB,QAAQ,iBAAiB,EAAE;QACzB,KAAK,aAAa,CAAC;QACnB,KAAK,gBAAgB,CAAC;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,eAAe;YAClB,OAAO,iBAAiB,CAAC;QAE3B;YACE,OAAO,SAAS,CAAC;KACpB;AACH,CAAC;AAhBD,oDAgBC;AAWD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,eAAqB;;IACjD,MAAM,UAAU,SAAG,oBAAoB,CACrC,eAAe,EACf,YAAY,CACb,0CAAE,WAAW,EAAE,CAAC;IAEjB,QAAQ,UAAU,EAAE;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,KAAK,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QAEpB;YACE,OAAO,SAAS,CAAC;KACpB;AACH,CAAC;AAlBD,sCAkBC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAC5B,WAAmB,EACnB,eAAqB;IAErB,QAAQ,kBAAkB,CAAC,WAAW,CAAC,EAAE;QACvC,KAAK,KAAK;YACR,OAAO,oBAAoB,CAAC,eAAe,CAAC,CAAC;QAE/C,KAAK,IAAI;YACP,OAAO,aAAa,CAAC,eAAe,CAAC,CAAC;QAExC;YACE,OAAO,SAAS,CAAC;KACpB;AACH,CAAC;AAdD,wCAcC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAC5B,WAAmB,EACnB,eAAqB;IAErB,MAAM,IAAI,GACR,oBAAoB,CAAC,eAAe,EAAE,aAAa,CAAC;QACpD,cAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI;QAC5B,EAAE,CAAC;IAEL,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,wCAUC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,eAAqB;IACvD,OAAO,oBAAoB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC;AAFD,kDAEC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,eAAqB;IAClD,OAAO,oBAAoB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;AAC9D,CAAC;AAFD,wCAEC;AAED,SAAgB,uBAAuB,CACrC,WAAmB;IAEnB,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAC;IAEvE,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC7B,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,aAAa,CACzB,mCAAmC,EACnC,aAAa,CACd,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,YAAY,GAAG,IAAY,CAAC;QAClC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC;KAC1D;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AApBD,0DAoBC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport glob from 'glob';\n\nimport {DOMParser} from '@xmldom/xmldom';\nimport xpath from 'xpath';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nconst msbuildSelect = xpath.useNamespaces({\n msbuild: 'http://schemas.microsoft.com/developer/msbuild/2003',\n});\n\n/**\n * Search for files matching the pattern under the target folder.\n * @param folder The absolute path to target folder.\n * @param filenamePattern The pattern to search for.\n * @return Return the array of relative file paths.\n */\nexport function findFiles(folder: string, filenamePattern: string): string[] {\n const files = glob.sync(path.join('**', filenamePattern), {\n cwd: folder,\n ignore: [\n 'node_modules/**',\n '**/Debug/**',\n '**/Release/**',\n '**/Generated Files/**',\n '**/packages/**',\n ],\n });\n\n return files;\n}\n\n/**\n * Search for the windows sub-folder under the target folder.\n * @param folder The absolute path to the target folder.\n * @return The absolute path to the windows folder, if it exists.\n */\nexport function findWindowsFolder(folder: string): string | null {\n const winDir = 'windows';\n const joinedDir = path.join(folder, winDir);\n if (fs.existsSync(joinedDir)) {\n return joinedDir;\n }\n\n return null;\n}\n\n/**\n * Checks if the target file path is a RNW solution file by checking if it contains the string \"ReactNative\".\n * @param filePath The absolute file path to check.\n * @return Whether the path is to a RNW solution file.\n */\nexport function isRnwSolution(filePath: string): boolean {\n return (\n fs\n .readFileSync(filePath)\n .toString()\n .search(/ReactNative/) > 0\n );\n}\n\n/**\n * Search for the RNW solution files under the target folder.\n * @param winFolder The absolute path to target folder.\n * @return Return the array of relative file paths.\n */\nexport function findSolutionFiles(winFolder: string): string[] {\n // First search for all potential solution files\n const allSolutions = findFiles(winFolder, '*.sln');\n\n if (allSolutions.length === 0) {\n // If there're no solution files, return 0\n return [];\n } else if (allSolutions.length === 1) {\n // If there is exactly one solution file, assume it's it\n return [allSolutions[0]];\n }\n\n const solutionFiles = [];\n\n // Try to find any solution file that appears to be a React Native solution\n for (const solutionFile of allSolutions) {\n if (isRnwSolution(path.join(winFolder, solutionFile))) {\n solutionFiles.push(path.normalize(solutionFile));\n }\n }\n\n return solutionFiles;\n}\n\n/**\n * Checks if the target file path is a RNW lib project file.\n * @param filePath The absolute file path to check.\n * @return Whether the path is to a RNW lib project file.\n */\nexport function isRnwDependencyProject(filePath: string): boolean {\n const projectContents = readProjectFile(filePath);\n\n const projectLang = getProjectLanguage(filePath);\n if (projectLang === 'cs') {\n return importProjectExists(\n projectContents,\n 'Microsoft.ReactNative.Uwp.CSharpLib.targets',\n );\n } else if (projectLang === 'cpp') {\n return importProjectExists(\n projectContents,\n 'Microsoft.ReactNative.Uwp.CppLib.targets',\n );\n }\n\n return false;\n}\n\n/**\n * Search for the RNW lib project files under the target folder.\n * @param winFolder The absolute path to target folder.\n * @return Return the array of relative file paths.\n */\nexport function findDependencyProjectFiles(winFolder: string): string[] {\n // First, search for all potential project files\n const allCppProj = findFiles(winFolder, '*.vcxproj');\n const allCsProj = findFiles(winFolder, '*.csproj');\n\n const allProjects = allCppProj.concat(allCsProj);\n\n if (allProjects.length === 0) {\n // If there're no project files, return 0\n return [];\n }\n\n const dependencyProjectFiles = [];\n\n // Try to find any project file that appears to be a dependency project\n for (const projectFile of allProjects) {\n // A project is marked as a RNW dependency iff either:\n // - If the project has the standard native module imports, or\n // - If we only have a single project (and it doesn't have the standard native module imports),\n // pick it and hope for the best. This enables autolinking for modules that were written\n // before the standard native module template existed.\n if (\n allProjects.length === 1 ||\n isRnwDependencyProject(path.join(winFolder, projectFile))\n ) {\n dependencyProjectFiles.push(path.normalize(projectFile));\n }\n }\n\n return dependencyProjectFiles;\n}\n\n/**\n * Checks if the target file path is a RNW app project file.\n * @param filePath The absolute file path to check.\n * @return Whether the path is to a RNW app project file.\n */\nfunction isRnwAppProject(filePath: string): boolean {\n const projectContents = readProjectFile(filePath);\n\n const projectLang = getProjectLanguage(filePath);\n if (projectLang === 'cs') {\n return importProjectExists(\n projectContents,\n 'Microsoft.ReactNative.Uwp.CSharpApp.targets',\n );\n } else if (projectLang === 'cpp') {\n return importProjectExists(\n projectContents,\n 'Microsoft.ReactNative.Uwp.CppApp.targets',\n );\n }\n\n return false;\n}\n\n/**\n * Search for the RNW app project files under the target folder.\n * @param winFolder The absolute path to target folder.\n * @return Return the array of relative file paths.\n */\nexport function findAppProjectFiles(winFolder: string): string[] {\n // First, search for all potential project files\n const allCppProj = findFiles(winFolder, '*.vcxproj');\n const allCsProj = findFiles(winFolder, '*.csproj');\n\n const allProjects = allCppProj.concat(allCsProj);\n\n if (allProjects.length === 0) {\n // If there're no project files, return 0\n return [];\n }\n\n const appProjectFiles = [];\n\n // Try to find any project file that appears to be an app project\n for (const projectFile of allProjects) {\n if (isRnwAppProject(path.join(winFolder, projectFile))) {\n appProjectFiles.push(path.normalize(projectFile));\n }\n }\n\n return appProjectFiles;\n}\n\n/**\n * Returns the programming language of the project file.\n * @param projectPath The project file path to check.\n * @return The language string: cpp, cs, or null if unknown.\n */\nexport function getProjectLanguage(projectPath: string): 'cpp' | 'cs' | null {\n if (projectPath.endsWith('.vcxproj')) {\n return 'cpp';\n } else if (projectPath.endsWith('.csproj')) {\n return 'cs';\n }\n\n return null;\n}\n\n/**\n * Reads in the contents of the target project file.\n * @param projectPath The target project file path.\n * @return The project file contents.\n */\nexport function readProjectFile(projectPath: string) {\n const projectContents = fs.readFileSync(projectPath, 'utf8').toString();\n return new DOMParser().parseFromString(projectContents, 'application/xml');\n}\n\n/**\n * Search for the given property in the project contents and return its value.\n * @param projectContents The XML project contents.\n * @param propertyName The property to look for.\n * @return The value of the tag if it exists.\n */\nexport function tryFindPropertyValue(\n projectContents: Node,\n propertyName: string,\n): string | null {\n const nodes = msbuildSelect(\n `//msbuild:PropertyGroup/msbuild:${propertyName}`,\n projectContents,\n );\n\n if (nodes.length > 0) {\n // Take the last one\n return (nodes[nodes.length - 1] as Node).textContent;\n }\n\n return null;\n}\n\nexport function findPropertyValue(\n projectContents: Node,\n propertyName: string,\n filePath: string,\n): string {\n const res = tryFindPropertyValue(projectContents, propertyName);\n if (!res) {\n throw new CodedError(\n 'NoPropertyInProject',\n `Couldn't find property ${propertyName} from ${filePath}`,\n {propertyName: propertyName},\n );\n }\n return res;\n}\n\n/**\n * Search for the given import project in the project contents and return if it exists.\n * @param projectContents The XML project contents.\n * @param projectName The project to look for.\n * @return If the target exists.\n */\nexport function importProjectExists(\n projectContents: Node,\n projectName: string,\n): boolean {\n const nodes = msbuildSelect(\n `//msbuild:Import[contains(@Project,'${projectName}')]`,\n projectContents,\n );\n\n return nodes.length > 0;\n}\n\nexport type ConfigurationType =\n | 'application'\n | 'dynamiclibrary'\n | 'generic'\n | 'staticlibrary'\n | 'unknown';\n\n/**\n * Gets the configuration type of the project from the project contents.\n * @param projectContents The XML project contents.\n * @return The project configuration type.\n */\nexport function getConfigurationType(projectContents: Node): ConfigurationType {\n const configurationType = tryFindPropertyValue(\n projectContents,\n 'ConfigurationType',\n )?.toLowerCase();\n\n switch (configurationType) {\n case 'application':\n case 'dynamiclibrary':\n case 'generic':\n case 'staticlibrary':\n return configurationType;\n\n default:\n return 'unknown';\n }\n}\n\nexport type OutputType =\n | 'appcontainerexe'\n | 'exe'\n | 'library'\n | 'module'\n | 'unknown'\n | 'winexe'\n | 'winmdobj';\n\n/**\n * Gets the output type of the project from the project contents.\n * @param projectContents The XML project contents.\n * @return The project output type.\n */\nexport function getOutputType(projectContents: Node): OutputType {\n const outputType = tryFindPropertyValue(\n projectContents,\n 'OutputType',\n )?.toLowerCase();\n\n switch (outputType) {\n case 'appcontainerexe':\n case 'exe':\n case 'library':\n case 'module':\n case 'winexe':\n case 'winmdobj':\n return outputType;\n\n default:\n return 'unknown';\n }\n}\n\n/**\n * Gets the type of the project from the project contents.\n * @param projectPath The project file path to check.\n * @param projectContents The XML project contents.\n * @return The project type.\n */\nexport function getProjectType(\n projectPath: string,\n projectContents: Node,\n): ConfigurationType | OutputType {\n switch (getProjectLanguage(projectPath)) {\n case 'cpp':\n return getConfigurationType(projectContents);\n\n case 'cs':\n return getOutputType(projectContents);\n\n default:\n return 'unknown';\n }\n}\n\n/**\n * Gets the name of the project from the project contents.\n * @param projectPath The project file path to check.\n * @param projectContents The XML project contents.\n * @return The project name.\n */\nexport function getProjectName(\n projectPath: string,\n projectContents: Node,\n): string {\n const name =\n tryFindPropertyValue(projectContents, 'ProjectName') ||\n path.parse(projectPath).name ||\n '';\n\n return name;\n}\n\n/**\n * Gets the namespace of the project from the project contents.\n * @param projectContents The XML project contents.\n * @return The project namespace.\n */\nexport function getProjectNamespace(projectContents: Node): string | null {\n return tryFindPropertyValue(projectContents, 'RootNamespace');\n}\n\n/**\n * Gets the guid of the project from the project contents.\n * @param projectContents The XML project contents.\n * @return The project guid.\n */\nexport function getProjectGuid(projectContents: Node): string | null {\n return tryFindPropertyValue(projectContents, 'ProjectGuid');\n}\n\nexport function getExperimentalFeatures(\n solutionDir: string,\n): Record<string, string> | undefined {\n const propsFile = path.join(solutionDir, 'ExperimentalFeatures.props');\n\n if (!fs.existsSync(propsFile)) {\n return undefined;\n }\n\n const result: Record<string, any> = {};\n const propsContents = readProjectFile(propsFile);\n const nodes = msbuildSelect(\n `//msbuild:PropertyGroup/msbuild:*`,\n propsContents,\n );\n for (const node of nodes) {\n const propertyNode = node as Node;\n result[propertyNode.nodeName] = propertyNode.textContent;\n }\n return result;\n}\n"]}
|
|
@@ -4,14 +4,37 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
* @format
|
|
6
6
|
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
7
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
30
|
exports.dependencyConfigWindows = void 0;
|
|
9
31
|
// Types in this file are inaccurate compared to usage in terms of falsiness.
|
|
10
32
|
// We should try to rewrite some of this to do automated schema validation to
|
|
11
33
|
// guarantee correct types
|
|
12
34
|
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
13
|
-
const
|
|
14
|
-
const
|
|
35
|
+
const os_1 = require("os");
|
|
36
|
+
const path_1 = __importDefault(require("path"));
|
|
37
|
+
const configUtils = __importStar(require("./configUtils"));
|
|
15
38
|
/**
|
|
16
39
|
* Gets the config of any RNW native modules under the target folder.
|
|
17
40
|
* @param userConfig A manually specified override config.
|
|
@@ -20,6 +43,9 @@ const configUtils = require("./configUtils");
|
|
|
20
43
|
// Disabled due to existing high cyclomatic complexity
|
|
21
44
|
// eslint-disable-next-line complexity
|
|
22
45
|
function dependencyConfigWindows(folder, userConfig = {}) {
|
|
46
|
+
if (os_1.platform() !== 'win32') {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
23
49
|
if (userConfig === null) {
|
|
24
50
|
return null;
|
|
25
51
|
}
|
|
@@ -45,13 +71,13 @@ function dependencyConfigWindows(folder, userConfig = {}) {
|
|
|
45
71
|
'Error: Source dir is required if projects are specified, but it is null in react-native.config.';
|
|
46
72
|
}
|
|
47
73
|
else {
|
|
48
|
-
sourceDir =
|
|
74
|
+
sourceDir = path_1.default.join(folder, userConfig.sourceDir);
|
|
49
75
|
}
|
|
50
76
|
}
|
|
51
77
|
else if (!usingManualProjectsOverride) {
|
|
52
78
|
// No manually provided projects, try to find sourceDir
|
|
53
79
|
if ('sourceDir' in userConfig && userConfig.sourceDir !== null) {
|
|
54
|
-
sourceDir =
|
|
80
|
+
sourceDir = path_1.default.join(folder, userConfig.sourceDir);
|
|
55
81
|
}
|
|
56
82
|
else {
|
|
57
83
|
sourceDir = configUtils.findWindowsFolder(folder);
|
|
@@ -78,22 +104,22 @@ function dependencyConfigWindows(folder, userConfig = {}) {
|
|
|
78
104
|
// there's nothing more to look for here, bail
|
|
79
105
|
return null;
|
|
80
106
|
}
|
|
81
|
-
result.sourceDir =
|
|
107
|
+
result.sourceDir = path_1.default.relative(folder, sourceDir);
|
|
82
108
|
const usingManualSolutionFile = 'solutionFile' in userConfig;
|
|
83
109
|
let solutionFile = null;
|
|
84
110
|
if (usingManualSolutionFile && userConfig.solutionFile !== null) {
|
|
85
111
|
// Manually provided solutionFile, so extract it
|
|
86
|
-
solutionFile =
|
|
112
|
+
solutionFile = path_1.default.join(sourceDir, userConfig.solutionFile);
|
|
87
113
|
}
|
|
88
114
|
else if (!usingManualSolutionFile) {
|
|
89
115
|
// No manually provided solutionFile, try to find it
|
|
90
116
|
const foundSolutions = configUtils.findSolutionFiles(sourceDir);
|
|
91
117
|
if (foundSolutions.length === 1) {
|
|
92
|
-
solutionFile =
|
|
118
|
+
solutionFile = path_1.default.join(sourceDir, foundSolutions[0]);
|
|
93
119
|
}
|
|
94
120
|
}
|
|
95
121
|
result.solutionFile =
|
|
96
|
-
solutionFile !== null ?
|
|
122
|
+
solutionFile !== null ? path_1.default.relative(sourceDir, solutionFile) : null;
|
|
97
123
|
if (usingManualProjectsOverride) {
|
|
98
124
|
// react-native.config used, fill out (auto) items for each provided project, verify (req) items are present
|
|
99
125
|
const alwaysRequired = [
|
|
@@ -112,8 +138,9 @@ function dependencyConfigWindows(folder, userConfig = {}) {
|
|
|
112
138
|
if (errorFound) {
|
|
113
139
|
break;
|
|
114
140
|
}
|
|
115
|
-
const projectFile =
|
|
141
|
+
const projectFile = path_1.default.join(sourceDir, project.projectFile);
|
|
116
142
|
const projectContents = configUtils.readProjectFile(projectFile);
|
|
143
|
+
project.projectFile = path_1.default.relative(sourceDir, projectFile);
|
|
117
144
|
// Calculating (auto) items
|
|
118
145
|
project.projectName = configUtils.getProjectName(projectFile, projectContents);
|
|
119
146
|
project.projectLang = configUtils.getProjectLanguage(projectFile);
|
|
@@ -140,36 +167,53 @@ function dependencyConfigWindows(folder, userConfig = {}) {
|
|
|
140
167
|
// No react-native.config, try to heuristically find any projects
|
|
141
168
|
const foundProjects = configUtils.findDependencyProjectFiles(sourceDir);
|
|
142
169
|
for (const foundProject of foundProjects) {
|
|
143
|
-
const projectFile =
|
|
144
|
-
const projectLang = configUtils.getProjectLanguage(projectFile);
|
|
170
|
+
const projectFile = path_1.default.join(sourceDir, foundProject);
|
|
145
171
|
const projectContents = configUtils.readProjectFile(projectFile);
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
172
|
+
const projectType = configUtils.getProjectType(projectFile, projectContents);
|
|
173
|
+
if (projectType === 'dynamiclibrary' || projectType === 'winmdobj') {
|
|
174
|
+
const projectLang = configUtils.getProjectLanguage(projectFile);
|
|
175
|
+
const projectName = configUtils.getProjectName(projectFile, projectContents);
|
|
176
|
+
const projectGuid = configUtils.getProjectGuid(projectContents);
|
|
177
|
+
const projectNamespace = configUtils.getProjectNamespace(projectContents);
|
|
178
|
+
const directDependency = true;
|
|
179
|
+
const cppHeaders = [];
|
|
180
|
+
const cppPackageProviders = [];
|
|
181
|
+
const csNamespaces = [];
|
|
182
|
+
const csPackageProviders = [];
|
|
183
|
+
if (projectNamespace !== null) {
|
|
184
|
+
const cppNamespace = projectNamespace.replace(/\./g, '::');
|
|
185
|
+
const csNamespace = projectNamespace.replace(/::/g, '.');
|
|
186
|
+
cppHeaders.push(`winrt/${csNamespace}.h`);
|
|
187
|
+
cppPackageProviders.push(`${cppNamespace}::ReactPackageProvider`);
|
|
188
|
+
csNamespaces.push(`${csNamespace}`);
|
|
189
|
+
csPackageProviders.push(`${csNamespace}.ReactPackageProvider`);
|
|
190
|
+
}
|
|
191
|
+
result.projects.push({
|
|
192
|
+
projectFile: path_1.default.relative(sourceDir, projectFile),
|
|
193
|
+
projectName,
|
|
194
|
+
projectLang,
|
|
195
|
+
projectGuid,
|
|
196
|
+
directDependency,
|
|
197
|
+
cppHeaders,
|
|
198
|
+
cppPackageProviders,
|
|
199
|
+
csNamespaces,
|
|
200
|
+
csPackageProviders,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
const projectPath = path_1.default.relative(sourceDir, projectFile);
|
|
205
|
+
result.projects.push({
|
|
206
|
+
projectFile: `Error: ${projectPath} is type '${projectType}'`,
|
|
207
|
+
directDependency: false,
|
|
208
|
+
projectName: '',
|
|
209
|
+
projectLang: null,
|
|
210
|
+
projectGuid: null,
|
|
211
|
+
cppHeaders: [],
|
|
212
|
+
cppPackageProviders: [],
|
|
213
|
+
csNamespaces: [],
|
|
214
|
+
csPackageProviders: [],
|
|
215
|
+
});
|
|
161
216
|
}
|
|
162
|
-
result.projects.push({
|
|
163
|
-
projectFile: path.relative(sourceDir, projectFile),
|
|
164
|
-
projectName,
|
|
165
|
-
projectLang,
|
|
166
|
-
projectGuid,
|
|
167
|
-
directDependency,
|
|
168
|
-
cppHeaders,
|
|
169
|
-
cppPackageProviders,
|
|
170
|
-
csNamespaces,
|
|
171
|
-
csPackageProviders,
|
|
172
|
-
});
|
|
173
217
|
}
|
|
174
218
|
}
|
|
175
219
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyConfig.js","sourceRoot":"","sources":["../../src/config/dependencyConfig.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6EAA6E;AAC7E,6EAA6E;AAC7E,0BAA0B;AAC1B,gEAAgE;AAEhE,6BAA6B;AAE7B,6CAA6C;AA+F7C;;;;GAIG;AACH,sDAAsD;AACtD,sCAAsC;AACtC,SAAgB,uBAAuB,CACrC,MAAc,EACd,aAAsD,EAAE;IAExD,IAAI,UAAU,KAAK,IAAI,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,2BAA2B,GAC/B,UAAU,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEjE,MAAM,gCAAgC,GACpC,eAAe,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAE3E,MAAM,MAAM,GAA4B;QACtC,MAAM;QACN,QAAQ,EAAE,2BAA2B,CAAC,CAAC,CAAC,UAAU,CAAC,QAAS,CAAC,CAAC,CAAC,EAAE;QACjE,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,gCAAgC;YAC7C,CAAC,CAAC,UAAU,CAAC,aAAc;YAC3B,CAAC,CAAC,EAAE;KACP,CAAC;IAEF,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,2BAA2B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7D,uDAAuD;QACvD,IAAI,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC,EAAE;YAChC,SAAS;gBACP,0GAA0G,CAAC;SAC9G;aAAM,IAAI,UAAU,CAAC,SAAS,KAAK,IAAI,EAAE;YACxC,SAAS;gBACP,iGAAiG,CAAC;SACrG;aAAM;YACL,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,SAAU,CAAC,CAAC;SACtD;KACF;SAAM,IAAI,CAAC,2BAA2B,EAAE;QACvC,uDAAuD;QACvD,IAAI,WAAW,IAAI,UAAU,IAAI,UAAU,CAAC,SAAS,KAAK,IAAI,EAAE;YAC9D,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,SAAU,CAAC,CAAC;SACtD;aAAM;YACL,SAAS,GAAG,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;SACnD;KACF;IAED,IAAI,SAAS,KAAK,IAAI,EAAE;QACtB,uCAAuC;QACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACnE,6CAA6C;YAC7C,OAAO,MAAM,CAAC;SACf;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,wEAAwE;YACxE,SAAS,GAAG,MAAM,CAAC;SACpB;KACF;SAAM,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC1C,oCAAoC;QACpC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,OAAO,MAAM,CAAC;KACf;IAED,IAAI,SAAS,KAAK,IAAI,EAAE;QACtB,sDAAsD;QACtD,8CAA8C;QAC9C,OAAO,IAAI,CAAC;KACb;IAED,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEpD,MAAM,uBAAuB,GAAG,cAAc,IAAI,UAAU,CAAC;IAE7D,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,IAAI,uBAAuB,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,EAAE;QAC/D,gDAAgD;QAChD,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,YAAa,CAAC,CAAC;KAC/D;SAAM,IAAI,CAAC,uBAAuB,EAAE;QACnC,oDAAoD;QACpD,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SACxD;KACF;IAED,MAAM,CAAC,YAAY;QACjB,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,IAAI,2BAA2B,EAAE;QAC/B,4GAA4G;QAE5G,MAAM,cAAc,GAAmC;YACrD,aAAa;YACb,kBAAkB;SACnB,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;YACrC,wBAAwB;YACxB,IAAI,UAAU,GAAG,KAAK,CAAC;YAEvB,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC5B,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE;oBACrB,OAAO,CACN,IAAI,CACM,GAAG,UAAU,IAAI,sDAAsD,CAAC;oBACpF,UAAU,GAAG,IAAI,CAAC;iBACnB;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,UAAU,EAAE;gBACd,MAAM;aACP;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAE9D,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAEjE,2BAA2B;YAC3B,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,cAAc,CAC9C,WAAW,EACX,eAAe,CAChB,CAAC;YACF,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAClE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAElE,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC5B,gCAAgC;gBAEhC,MAAM,gBAAgB,GAAG,WAAW,CAAC,mBAAmB,CACtD,eAAe,CAChB,CAAC;gBAEF,IAAI,gBAAgB,KAAK,IAAI,EAAE;oBAC7B,MAAM,YAAY,GAAG,gBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC5D,MAAM,WAAW,GAAG,gBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAE1D,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,CAAC;oBACtE,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI;wBAC3D,GAAG,YAAY,wBAAwB;qBACxC,CAAC;oBACF,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC;oBAClE,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI;wBACzD,GAAG,WAAW,uBAAuB;qBACtC,CAAC;iBACH;aACF;SACF;KACF;SAAM;QACL,iEAAiE;QAEjE,MAAM,aAAa,GAAG,WAAW,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAExE,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;YACxC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAEhE,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAEjE,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAC5C,WAAW,EACX,eAAe,CAChB,CAAC;YAEF,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAEhE,MAAM,gBAAgB,GAAG,WAAW,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAE1E,MAAM,gBAAgB,GAAG,IAAI,CAAC;YAE9B,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,MAAM,mBAAmB,GAAa,EAAE,CAAC;YACzC,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,MAAM,kBAAkB,GAAa,EAAE,CAAC;YAExC,IAAI,gBAAgB,KAAK,IAAI,EAAE;gBAC7B,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3D,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAEzD,UAAU,CAAC,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,CAAC;gBAC1C,mBAAmB,CAAC,IAAI,CAAC,GAAG,YAAY,wBAAwB,CAAC,CAAC;gBAClE,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC;gBACpC,kBAAkB,CAAC,IAAI,CAAC,GAAG,WAAW,uBAAuB,CAAC,CAAC;aAChE;YAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;gBAClD,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,gBAAgB;gBAChB,UAAU;gBACV,mBAAmB;gBACnB,YAAY;gBACZ,kBAAkB;aACnB,CAAC,CAAC;SACJ;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AApMD,0DAoMC"}
|
|
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"]}
|
|
@@ -4,27 +4,56 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
* @format
|
|
6
6
|
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
7
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
30
|
exports.projectConfigWindows = void 0;
|
|
9
31
|
// Types in this file are inaccurate compared to usage in terms of falsiness.
|
|
10
32
|
// We should try to rewrite some of this to do automated schema validation to
|
|
11
33
|
// guarantee correct types
|
|
12
34
|
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
13
|
-
const
|
|
14
|
-
const
|
|
35
|
+
const os_1 = require("os");
|
|
36
|
+
const path_1 = __importDefault(require("path"));
|
|
37
|
+
const configUtils = __importStar(require("./configUtils"));
|
|
15
38
|
/**
|
|
16
39
|
* Gets the config of any RNW apps under the target folder.
|
|
17
40
|
* @param folder The absolute path to the target folder.
|
|
18
41
|
* @param userConfig A manually specified override config.
|
|
19
42
|
* @return The config if any RNW apps exist.
|
|
20
43
|
*/
|
|
44
|
+
// Disabled due to existing high cyclomatic complexity
|
|
45
|
+
// eslint-disable-next-line complexity
|
|
21
46
|
function projectConfigWindows(folder, userConfig = {}) {
|
|
47
|
+
var _a;
|
|
48
|
+
if (os_1.platform() !== 'win32') {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
22
51
|
if (userConfig === null) {
|
|
23
52
|
return null;
|
|
24
53
|
}
|
|
25
54
|
const usingManualOverride = 'sourceDir' in userConfig;
|
|
26
55
|
const sourceDir = usingManualOverride
|
|
27
|
-
?
|
|
56
|
+
? path_1.default.join(folder, userConfig.sourceDir)
|
|
28
57
|
: configUtils.findWindowsFolder(folder);
|
|
29
58
|
if (sourceDir === null) {
|
|
30
59
|
// Nothing to look for here, bail
|
|
@@ -32,8 +61,9 @@ function projectConfigWindows(folder, userConfig = {}) {
|
|
|
32
61
|
}
|
|
33
62
|
const result = {
|
|
34
63
|
folder: folder,
|
|
35
|
-
sourceDir:
|
|
64
|
+
sourceDir: path_1.default.relative(folder, sourceDir),
|
|
36
65
|
};
|
|
66
|
+
let validSolution = false;
|
|
37
67
|
let validProject = false;
|
|
38
68
|
if (usingManualOverride) {
|
|
39
69
|
// Manual override, try to use it for solutionFile
|
|
@@ -46,7 +76,8 @@ function projectConfigWindows(folder, userConfig = {}) {
|
|
|
46
76
|
'Error: Solution file is null in react-native.config.';
|
|
47
77
|
}
|
|
48
78
|
else {
|
|
49
|
-
result.solutionFile = userConfig.solutionFile;
|
|
79
|
+
result.solutionFile = path_1.default.normalize(userConfig.solutionFile);
|
|
80
|
+
validSolution = true;
|
|
50
81
|
}
|
|
51
82
|
// Manual override, try to use it for project
|
|
52
83
|
if (!('project' in userConfig)) {
|
|
@@ -72,7 +103,7 @@ function projectConfigWindows(folder, userConfig = {}) {
|
|
|
72
103
|
}
|
|
73
104
|
else {
|
|
74
105
|
result.project = {
|
|
75
|
-
projectFile: userConfig.project.projectFile,
|
|
106
|
+
projectFile: path_1.default.normalize(userConfig.project.projectFile),
|
|
76
107
|
};
|
|
77
108
|
validProject = true;
|
|
78
109
|
}
|
|
@@ -93,7 +124,8 @@ function projectConfigWindows(folder, userConfig = {}) {
|
|
|
93
124
|
'Error: Too many app solution files found, please specify in react-native.config.';
|
|
94
125
|
}
|
|
95
126
|
else {
|
|
96
|
-
result.solutionFile = foundSolutions[0];
|
|
127
|
+
result.solutionFile = path_1.default.normalize(foundSolutions[0]);
|
|
128
|
+
validSolution = true;
|
|
97
129
|
}
|
|
98
130
|
// No manually provided project, try to find it
|
|
99
131
|
const foundProjects = configUtils.findAppProjectFiles(sourceDir);
|
|
@@ -109,18 +141,35 @@ function projectConfigWindows(folder, userConfig = {}) {
|
|
|
109
141
|
}
|
|
110
142
|
else {
|
|
111
143
|
result.project = {
|
|
112
|
-
projectFile: foundProjects[0],
|
|
144
|
+
projectFile: path_1.default.normalize(foundProjects[0]),
|
|
113
145
|
};
|
|
114
146
|
validProject = true;
|
|
115
147
|
}
|
|
116
148
|
}
|
|
149
|
+
if (validSolution) {
|
|
150
|
+
result.solutionFile = path_1.default.relative(sourceDir, path_1.default.join(sourceDir, result.solutionFile));
|
|
151
|
+
// Populating experimental features from ExperimentalFeatures.props
|
|
152
|
+
const experimentalFeatures = configUtils.getExperimentalFeatures(path_1.default.dirname(path_1.default.join(sourceDir, result.solutionFile)));
|
|
153
|
+
if (experimentalFeatures) {
|
|
154
|
+
result.experimentalFeatures = experimentalFeatures;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
117
157
|
if (validProject) {
|
|
118
|
-
const projectFile =
|
|
158
|
+
const projectFile = path_1.default.join(sourceDir, result.project.projectFile);
|
|
119
159
|
const projectContents = configUtils.readProjectFile(projectFile);
|
|
160
|
+
result.project.projectFile = path_1.default.relative(sourceDir, projectFile);
|
|
120
161
|
// Add missing (auto) items
|
|
121
162
|
result.project.projectName = configUtils.getProjectName(projectFile, projectContents);
|
|
122
163
|
result.project.projectLang = configUtils.getProjectLanguage(projectFile);
|
|
123
164
|
result.project.projectGuid = configUtils.getProjectGuid(projectContents);
|
|
165
|
+
// Since we moved the UseExperimentalNuget property from the project to the
|
|
166
|
+
// ExperimentalFeatures.props file, we should should double-check the project file
|
|
167
|
+
// in case it was made with an older template
|
|
168
|
+
const useExperimentalNuget = configUtils.tryFindPropertyValue(projectContents, 'UseExperimentalNuget');
|
|
169
|
+
if (useExperimentalNuget) {
|
|
170
|
+
result.experimentalFeatures = (_a = result.experimentalFeatures) !== null && _a !== void 0 ? _a : {};
|
|
171
|
+
result.experimentalFeatures.UseExperimentalNuget = useExperimentalNuget;
|
|
172
|
+
}
|
|
124
173
|
}
|
|
125
174
|
return result;
|
|
126
175
|
}
|