@rnx-kit/cli 0.12.1 → 0.12.4
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.md +20 -0
- package/README.md +21 -21
- package/coverage/clover.xml +158 -131
- package/coverage/coverage-final.json +2 -2
- package/coverage/lcov-report/index.html +20 -20
- package/coverage/lcov-report/src/bundle/index.html +1 -1
- package/coverage/lcov-report/src/bundle/kit-config.ts.html +13 -13
- package/coverage/lcov-report/src/bundle/metro.ts.html +2 -2
- package/coverage/lcov-report/src/bundle/overrides.ts.html +4 -4
- package/coverage/lcov-report/src/copy-assets.ts.html +480 -111
- package/coverage/lcov-report/src/index.html +21 -21
- package/coverage/lcov-report/src/metro-config.ts.html +4 -4
- package/coverage/lcov-report/src/typescript/index.html +1 -1
- package/coverage/lcov-report/src/typescript/project-cache.ts.html +1 -1
- package/coverage/lcov.info +289 -242
- package/lib/bundle/metro.js +1 -1
- package/lib/bundle/metro.js.map +1 -1
- package/lib/bundle/overrides.d.ts +1 -1
- package/lib/bundle/overrides.d.ts.map +1 -1
- package/lib/bundle/overrides.js +2 -2
- package/lib/bundle/overrides.js.map +1 -1
- package/lib/bundle.d.ts +1 -0
- package/lib/bundle.d.ts.map +1 -1
- package/lib/bundle.js +8 -0
- package/lib/bundle.js.map +1 -1
- package/lib/clean.d.ts.map +1 -1
- package/lib/clean.js +40 -18
- package/lib/clean.js.map +1 -1
- package/lib/copy-assets.d.ts +10 -1
- package/lib/copy-assets.d.ts.map +1 -1
- package/lib/copy-assets.js +111 -32
- package/lib/copy-assets.js.map +1 -1
- package/lib/metro-config.d.ts +2 -2
- package/lib/metro-config.d.ts.map +1 -1
- package/lib/metro-config.js +3 -3
- package/lib/metro-config.js.map +1 -1
- package/lib/start.d.ts.map +1 -1
- package/lib/start.js +28 -9
- package/lib/start.js.map +1 -1
- package/lib/test.js +3 -6
- package/lib/test.js.map +1 -1
- package/package.json +1 -1
- package/react-native.config.js +6 -1
- package/src/bundle/metro.ts +1 -1
- package/src/bundle/overrides.ts +3 -3
- package/src/bundle.ts +13 -1
- package/src/clean.ts +6 -7
- package/src/copy-assets.ts +169 -46
- package/src/metro-config.ts +3 -3
- package/src/start.ts +49 -9
- package/src/test.ts +3 -3
- package/test/__mocks__/child_process.js +5 -0
- package/test/__mocks__/fs-extra.js +2 -0
- package/test/__mocks__/fs.js +19 -0
- package/test/bundle/kit-config.test.ts +23 -1
- package/test/bundle/metro.test.ts +1 -1
- package/test/bundle/overrides.test.ts +3 -13
- package/test/copy-assets/assembleAarBundle.test.ts +306 -0
- package/test/{copy-assets.test.ts → copy-assets/copyAssets.test.ts} +3 -13
- package/test/copy-assets/helpers.ts +13 -0
package/lib/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,0DAIgC;AAChC,kDAA0B;AAI1B,4CAAoB;AACpB,gDAAwB;AACxB,oDAA4B;AAC5B,wDAAgC;AAChC,iDAAsD;AACtD,mDAAwD;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
|
package/lib/test.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.rnxTestCommand = exports.rnxTest = void 0;
|
|
4
|
+
const tools_node_1 = require("@rnx-kit/tools-node");
|
|
7
5
|
const platform_1 = require("@rnx-kit/tools-react-native/platform");
|
|
8
6
|
const jest_cli_1 = require("jest-cli");
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
7
|
const COMMAND_NAME = "rnx-test";
|
|
11
8
|
function rnxTest(_argv, _config, { platform }) {
|
|
12
9
|
const commandIndex = process.argv.indexOf(COMMAND_NAME);
|
|
@@ -34,8 +31,8 @@ function jestOptions() {
|
|
|
34
31
|
//
|
|
35
32
|
// To work around this, resolve `jest-cli` first, then use the resolved path
|
|
36
33
|
// to import `./build/cli/args`.
|
|
37
|
-
const jestPath =
|
|
38
|
-
const { options } = require(`${
|
|
34
|
+
const jestPath = (0, tools_node_1.findPackageDependencyDir)("jest-cli") || "jest-cli";
|
|
35
|
+
const { options } = require(`${jestPath}/build/cli/args`);
|
|
39
36
|
return Object.keys(options).map((option) => {
|
|
40
37
|
const { default: defaultValue, description, type } = options[option];
|
|
41
38
|
return {
|
package/lib/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;AACA,oDAA+D;AAC/D,mEAAqE;AACrE,uCAA0C;AAiB1C,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,SAAgB,OAAO,CACrB,KAAe,EACf,OAAkB,EAClB,EAAE,QAAQ,EAAQ;IAElB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,YAAY,GAAG,CAAC,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;KACtD;IAED,4EAA4E;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAElD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,aAAa,GAAG,CAAC,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;KACxD;IAED,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC;IAC7C,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAxBD,0BAwBC;AAED,SAAS,WAAW;IAClB,oDAAoD;IACpD,EAAE;IACF,oEAAoE;IACpE,wCAAwC;IACxC,EAAE;IACF,4EAA4E;IAC5E,gCAAgC;IAChC,MAAM,QAAQ,GAAG,IAAA,qCAAwB,EAAC,UAAU,CAAC,IAAI,UAAU,CAAC;IACpE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,QAAQ,iBAAiB,CAAC,CAAC;IAE1D,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO;YACL,IAAI,EAAE,KAAK,MAAM,KAAK,IAAI,GAAG;YAC7B,WAAW;YACX,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAEY,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,mCAAmC;IAChD,IAAI,EAAE,OAAO;IACb,OAAO,EAAE;QACP;YACE,IAAI,EAAE,8CAA8C;YACpD,WAAW,EAAE,oBAAoB;YACjC,KAAK,EAAE,wBAAa;SACrB;QACD,GAAG,WAAW,EAAE;KACjB;CACF,CAAC"}
|
package/package.json
CHANGED
package/react-native.config.js
CHANGED
|
@@ -69,7 +69,12 @@ module.exports = {
|
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
name: "--experimental-tree-shake [boolean]",
|
|
72
|
-
description: "
|
|
72
|
+
description: "Deprecated. Use --tree-shake [boolean] instead.",
|
|
73
|
+
parse: parseBoolean,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "--tree-shake [boolean]",
|
|
77
|
+
description: "Enable tree shaking.",
|
|
73
78
|
parse: parseBoolean,
|
|
74
79
|
},
|
|
75
80
|
{
|
package/src/bundle/metro.ts
CHANGED
|
@@ -75,7 +75,7 @@ export async function metroBundle(
|
|
|
75
75
|
bundleConfig.detectCyclicDependencies,
|
|
76
76
|
bundleConfig.detectDuplicateDependencies,
|
|
77
77
|
bundleConfig.typescriptValidation ? typescriptValidationOptions : false,
|
|
78
|
-
bundleConfig.
|
|
78
|
+
bundleConfig.treeShake
|
|
79
79
|
);
|
|
80
80
|
|
|
81
81
|
const metroBundleArgs = createMetroBundleArgs(bundleConfig);
|
package/src/bundle/overrides.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type KitBundleConfigOverrides = {
|
|
|
10
10
|
bundleEncoding?: BundleArgs["bundleEncoding"];
|
|
11
11
|
sourcemapOutput?: string;
|
|
12
12
|
sourcemapSourcesRoot?: string;
|
|
13
|
-
|
|
13
|
+
treeShake?: boolean;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -33,7 +33,7 @@ export function applyKitBundleConfigOverrides(
|
|
|
33
33
|
"bundleEncoding",
|
|
34
34
|
"sourcemapOutput",
|
|
35
35
|
"sourcemapSourcesRoot",
|
|
36
|
-
"
|
|
36
|
+
"treeShake",
|
|
37
37
|
],
|
|
38
38
|
[
|
|
39
39
|
"entryPath",
|
|
@@ -43,7 +43,7 @@ export function applyKitBundleConfigOverrides(
|
|
|
43
43
|
"bundleEncoding",
|
|
44
44
|
"sourcemapOutput",
|
|
45
45
|
"sourcemapSourcesRoot",
|
|
46
|
-
"
|
|
46
|
+
"treeShake",
|
|
47
47
|
]
|
|
48
48
|
);
|
|
49
49
|
if (overridesToApply) {
|
package/src/bundle.ts
CHANGED
|
@@ -17,7 +17,8 @@ export type CLIBundleOptions = {
|
|
|
17
17
|
bundleEncoding?: BundleArgs["bundleEncoding"];
|
|
18
18
|
dev: boolean;
|
|
19
19
|
minify?: boolean;
|
|
20
|
-
experimentalTreeShake?: boolean;
|
|
20
|
+
experimentalTreeShake?: boolean; // Deprecated
|
|
21
|
+
treeShake?: boolean;
|
|
21
22
|
maxWorkers?: number;
|
|
22
23
|
sourcemapOutput?: string;
|
|
23
24
|
sourcemapSourcesRoot?: string;
|
|
@@ -30,6 +31,17 @@ export async function rnxBundle(
|
|
|
30
31
|
cliConfig: CLIConfig,
|
|
31
32
|
cliOptions: CLIBundleOptions
|
|
32
33
|
): Promise<void> {
|
|
34
|
+
// experimentalTreeShake is deprecated. Only use it when treeShake is not specified.
|
|
35
|
+
if (cliOptions.experimentalTreeShake !== undefined) {
|
|
36
|
+
console.warn(
|
|
37
|
+
"Warning: The command-line parameter '--experimental-tree-shake' is deprecated. Use `--tree-shake` instead."
|
|
38
|
+
);
|
|
39
|
+
if (cliOptions.treeShake === undefined) {
|
|
40
|
+
cliOptions.treeShake = cliOptions.experimentalTreeShake;
|
|
41
|
+
}
|
|
42
|
+
delete cliOptions.experimentalTreeShake;
|
|
43
|
+
}
|
|
44
|
+
|
|
33
45
|
const metroConfig = await loadMetroConfig(cliConfig, cliOptions);
|
|
34
46
|
|
|
35
47
|
const kitBundleConfigs = getKitBundleConfigs(
|
package/src/clean.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { Config as CLIConfig } from "@react-native-community/cli-types";
|
|
2
2
|
import { spawn } from "child_process";
|
|
3
|
-
import
|
|
4
|
-
import fs from "fs/promises";
|
|
3
|
+
import * as fs from "fs-extra";
|
|
5
4
|
import ora from "ora";
|
|
6
|
-
import os from "os";
|
|
7
|
-
import path from "path";
|
|
5
|
+
import * as os from "os";
|
|
6
|
+
import * as path from "path";
|
|
8
7
|
|
|
9
8
|
type Args = {
|
|
10
9
|
include?: string;
|
|
@@ -27,7 +26,7 @@ export async function rnxClean(
|
|
|
27
26
|
cliOptions: Args
|
|
28
27
|
): Promise<void> {
|
|
29
28
|
const projectRoot = cliOptions.projectRoot ?? process.cwd();
|
|
30
|
-
if (!
|
|
29
|
+
if (!fs.existsSync(projectRoot)) {
|
|
31
30
|
throw new Error(`Invalid path provided! ${projectRoot}`);
|
|
32
31
|
}
|
|
33
32
|
|
|
@@ -152,7 +151,7 @@ export async function rnxClean(
|
|
|
152
151
|
}
|
|
153
152
|
|
|
154
153
|
function cleanDir(path: string): Promise<void> {
|
|
155
|
-
if (!
|
|
154
|
+
if (!fs.existsSync(path)) {
|
|
156
155
|
return Promise.resolve();
|
|
157
156
|
}
|
|
158
157
|
|
|
@@ -163,7 +162,7 @@ function findPath(startPath: string, files: string[]): string | undefined {
|
|
|
163
162
|
// TODO: Find project files via `@react-native-community/cli`
|
|
164
163
|
for (const file of files) {
|
|
165
164
|
const filename = path.resolve(startPath, file);
|
|
166
|
-
if (
|
|
165
|
+
if (fs.existsSync(filename)) {
|
|
167
166
|
return filename;
|
|
168
167
|
}
|
|
169
168
|
}
|
package/src/copy-assets.ts
CHANGED
|
@@ -2,7 +2,11 @@ import type { Config as CLIConfig } from "@react-native-community/cli-types";
|
|
|
2
2
|
import { error, info, warn } from "@rnx-kit/console";
|
|
3
3
|
import { isNonEmptyArray } from "@rnx-kit/tools-language/array";
|
|
4
4
|
import type { PackageManifest } from "@rnx-kit/tools-node/package";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
findPackageDependencyDir,
|
|
7
|
+
findPackageDir,
|
|
8
|
+
readPackage,
|
|
9
|
+
} from "@rnx-kit/tools-node/package";
|
|
6
10
|
import type { AllPlatforms } from "@rnx-kit/tools-react-native";
|
|
7
11
|
import { parsePlatform } from "@rnx-kit/tools-react-native";
|
|
8
12
|
import { spawnSync } from "child_process";
|
|
@@ -11,9 +15,17 @@ import * as os from "os";
|
|
|
11
15
|
import * as path from "path";
|
|
12
16
|
|
|
13
17
|
export type AndroidArchive = {
|
|
14
|
-
targetName
|
|
18
|
+
targetName?: string;
|
|
15
19
|
version?: string;
|
|
16
20
|
output?: string;
|
|
21
|
+
android?: {
|
|
22
|
+
androidPluginVersion?: string;
|
|
23
|
+
compileSdkVersion?: number;
|
|
24
|
+
defaultConfig?: {
|
|
25
|
+
minSdkVersion?: number;
|
|
26
|
+
targetSdkVersion?: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
17
29
|
};
|
|
18
30
|
|
|
19
31
|
export type NativeAssets = {
|
|
@@ -44,6 +56,15 @@ export type AssetsConfig = {
|
|
|
44
56
|
getAssets?: (context: Context) => Promise<NativeAssets>;
|
|
45
57
|
};
|
|
46
58
|
|
|
59
|
+
const defaultAndroidConfig: Required<Required<AndroidArchive>["android"]> = {
|
|
60
|
+
androidPluginVersion: "7.1.3",
|
|
61
|
+
compileSdkVersion: 31,
|
|
62
|
+
defaultConfig: {
|
|
63
|
+
minSdkVersion: 23,
|
|
64
|
+
targetSdkVersion: 29,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
47
68
|
function ensureOption(options: Options, opt: string, flag = opt) {
|
|
48
69
|
if (options[opt] == null) {
|
|
49
70
|
error(`Missing required option: --${flag}`);
|
|
@@ -61,6 +82,12 @@ function findGradleProject(projectRoot: string): string | undefined {
|
|
|
61
82
|
return undefined;
|
|
62
83
|
}
|
|
63
84
|
|
|
85
|
+
function gradleTargetName(packageName: string): string {
|
|
86
|
+
return (
|
|
87
|
+
packageName.startsWith("@") ? packageName.slice(1) : packageName
|
|
88
|
+
).replace(/[^\w\-.]+/g, "_");
|
|
89
|
+
}
|
|
90
|
+
|
|
64
91
|
function isAssetsConfig(config: unknown): config is AssetsConfig {
|
|
65
92
|
return typeof config === "object" && config !== null && "getAssets" in config;
|
|
66
93
|
}
|
|
@@ -70,7 +97,12 @@ function keysOf(record: Record<string, unknown> | undefined): string[] {
|
|
|
70
97
|
}
|
|
71
98
|
|
|
72
99
|
export function versionOf(pkgName: string): string {
|
|
73
|
-
const
|
|
100
|
+
const packageDir = findPackageDependencyDir(pkgName);
|
|
101
|
+
if (!packageDir) {
|
|
102
|
+
throw new Error(`Could not find module '${pkgName}'`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const { version } = readPackage(packageDir);
|
|
74
106
|
return version;
|
|
75
107
|
}
|
|
76
108
|
|
|
@@ -79,13 +111,19 @@ function getAndroidPaths(
|
|
|
79
111
|
packageName: string,
|
|
80
112
|
{ targetName, version, output }: AndroidArchive
|
|
81
113
|
) {
|
|
82
|
-
const projectRoot =
|
|
83
|
-
|
|
84
|
-
|
|
114
|
+
const projectRoot = findPackageDependencyDir(packageName);
|
|
115
|
+
if (!projectRoot) {
|
|
116
|
+
throw new Error(`Could not find module '${packageName}'`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const gradleFriendlyName = targetName || gradleTargetName(packageName);
|
|
120
|
+
const aarVersion = version || versionOf(packageName);
|
|
85
121
|
|
|
86
122
|
switch (packageName) {
|
|
87
123
|
case "hermes-engine":
|
|
88
124
|
return {
|
|
125
|
+
targetName: gradleFriendlyName,
|
|
126
|
+
version: aarVersion,
|
|
89
127
|
projectRoot,
|
|
90
128
|
output: path.join(projectRoot, "android", "hermes-release.aar"),
|
|
91
129
|
destination: path.join(
|
|
@@ -97,6 +135,8 @@ function getAndroidPaths(
|
|
|
97
135
|
|
|
98
136
|
case "react-native":
|
|
99
137
|
return {
|
|
138
|
+
targetName: gradleFriendlyName,
|
|
139
|
+
version: aarVersion,
|
|
100
140
|
projectRoot,
|
|
101
141
|
output: path.join(projectRoot, "android"),
|
|
102
142
|
destination: path.join(
|
|
@@ -109,6 +149,8 @@ function getAndroidPaths(
|
|
|
109
149
|
default: {
|
|
110
150
|
const androidProject = findGradleProject(projectRoot);
|
|
111
151
|
return {
|
|
152
|
+
targetName: gradleFriendlyName,
|
|
153
|
+
version: aarVersion,
|
|
112
154
|
projectRoot,
|
|
113
155
|
androidProject,
|
|
114
156
|
output:
|
|
@@ -119,19 +161,19 @@ function getAndroidPaths(
|
|
|
119
161
|
"build",
|
|
120
162
|
"outputs",
|
|
121
163
|
"aar",
|
|
122
|
-
`${
|
|
164
|
+
`${gradleFriendlyName}-release.aar`
|
|
123
165
|
)),
|
|
124
166
|
destination: path.join(
|
|
125
167
|
context.options.assetsDest,
|
|
126
168
|
"aar",
|
|
127
|
-
`${
|
|
169
|
+
`${gradleFriendlyName}-${aarVersion}.aar`
|
|
128
170
|
),
|
|
129
171
|
};
|
|
130
172
|
}
|
|
131
173
|
}
|
|
132
174
|
}
|
|
133
175
|
|
|
134
|
-
async function assembleAarBundle(
|
|
176
|
+
export async function assembleAarBundle(
|
|
135
177
|
context: Context,
|
|
136
178
|
packageName: string,
|
|
137
179
|
{ aar }: NativeAssets
|
|
@@ -149,55 +191,136 @@ async function assembleAarBundle(
|
|
|
149
191
|
return;
|
|
150
192
|
}
|
|
151
193
|
|
|
152
|
-
const { androidProject, output } = getAndroidPaths(
|
|
194
|
+
const { targetName, version, androidProject, output } = getAndroidPaths(
|
|
195
|
+
context,
|
|
196
|
+
packageName,
|
|
197
|
+
aar
|
|
198
|
+
);
|
|
153
199
|
if (!androidProject || !output) {
|
|
154
200
|
warn(`Skipped \`${packageName}\`: cannot find \`build.gradle\``);
|
|
155
201
|
return;
|
|
156
202
|
}
|
|
157
203
|
|
|
158
|
-
const {
|
|
204
|
+
const { env: customEnv, dependencies, android } = aar;
|
|
205
|
+
const env = {
|
|
206
|
+
NODE_MODULES_PATH: path.join(process.cwd(), "node_modules"),
|
|
207
|
+
REACT_NATIVE_VERSION: versionOf("react-native"),
|
|
208
|
+
...process.env,
|
|
209
|
+
...customEnv,
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const outputDir = path.join(context.options.assetsDest, "aar");
|
|
213
|
+
await fs.ensureDir(outputDir);
|
|
214
|
+
|
|
215
|
+
const dest = path.join(outputDir, `${targetName}-${version}.aar`);
|
|
216
|
+
|
|
159
217
|
const targets = [`:${targetName}:assembleRelease`];
|
|
160
|
-
const targetsToCopy: [string, string][] = [];
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
218
|
+
const targetsToCopy: [string, string][] = [[output, dest]];
|
|
219
|
+
|
|
220
|
+
const settings = path.join(androidProject, "settings.gradle");
|
|
221
|
+
if (fs.existsSync(settings)) {
|
|
222
|
+
if (dependencies) {
|
|
223
|
+
for (const [dependencyName, aar] of Object.entries(dependencies)) {
|
|
224
|
+
const { targetName, output, destination } = getAndroidPaths(
|
|
225
|
+
context,
|
|
226
|
+
dependencyName,
|
|
227
|
+
aar
|
|
228
|
+
);
|
|
229
|
+
if (output) {
|
|
230
|
+
if (!fs.existsSync(output)) {
|
|
231
|
+
targets.push(`:${targetName}:assembleRelease`);
|
|
232
|
+
targetsToCopy.push([output, destination]);
|
|
233
|
+
} else if (!fs.existsSync(destination)) {
|
|
234
|
+
targetsToCopy.push([output, destination]);
|
|
235
|
+
}
|
|
174
236
|
}
|
|
175
237
|
}
|
|
176
238
|
}
|
|
177
|
-
}
|
|
178
239
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
REACT_NATIVE_VERSION: versionOf("react-native"),
|
|
187
|
-
...process.env,
|
|
188
|
-
...env,
|
|
189
|
-
},
|
|
190
|
-
});
|
|
240
|
+
// Run only one Gradle task at a time
|
|
241
|
+
spawnSync(gradlew, targets, { cwd: androidProject, stdio: "inherit", env });
|
|
242
|
+
} else {
|
|
243
|
+
const reactNativePath = findPackageDependencyDir("react-native");
|
|
244
|
+
if (!reactNativePath) {
|
|
245
|
+
throw new Error("Could not find 'react-native'");
|
|
246
|
+
}
|
|
191
247
|
|
|
192
|
-
|
|
193
|
-
|
|
248
|
+
const buildDir = path.join(
|
|
249
|
+
process.cwd(),
|
|
250
|
+
"node_modules",
|
|
251
|
+
".rnx-gradle-build",
|
|
252
|
+
targetName
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
const compileSdkVersion =
|
|
256
|
+
android?.compileSdkVersion ?? defaultAndroidConfig.compileSdkVersion;
|
|
257
|
+
const minSdkVersion =
|
|
258
|
+
android?.defaultConfig?.minSdkVersion ??
|
|
259
|
+
defaultAndroidConfig.defaultConfig.minSdkVersion;
|
|
260
|
+
const targetSdkVersion =
|
|
261
|
+
android?.defaultConfig?.targetSdkVersion ??
|
|
262
|
+
defaultAndroidConfig.defaultConfig.targetSdkVersion;
|
|
263
|
+
const androidPluginVersion =
|
|
264
|
+
android?.androidPluginVersion ??
|
|
265
|
+
defaultAndroidConfig.androidPluginVersion;
|
|
266
|
+
const buildRelativeReactNativePath = path.relative(
|
|
267
|
+
buildDir,
|
|
268
|
+
reactNativePath
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
const buildGradle = [
|
|
272
|
+
"buildscript {",
|
|
273
|
+
" ext {",
|
|
274
|
+
` compileSdkVersion = ${compileSdkVersion}`,
|
|
275
|
+
` minSdkVersion = ${minSdkVersion}`,
|
|
276
|
+
` targetSdkVersion = ${targetSdkVersion}`,
|
|
277
|
+
` androidPluginVersion = "${androidPluginVersion}"`,
|
|
278
|
+
" }",
|
|
279
|
+
"",
|
|
280
|
+
" repositories {",
|
|
281
|
+
" mavenCentral()",
|
|
282
|
+
" google()",
|
|
283
|
+
" }",
|
|
284
|
+
"",
|
|
285
|
+
" dependencies {",
|
|
286
|
+
' classpath("com.android.tools.build:gradle:${project.ext.androidPluginVersion}")',
|
|
287
|
+
" }",
|
|
288
|
+
"}",
|
|
289
|
+
"",
|
|
290
|
+
"allprojects {",
|
|
291
|
+
" repositories {",
|
|
292
|
+
" maven {",
|
|
293
|
+
" // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm",
|
|
294
|
+
` url("\${rootDir}/${buildRelativeReactNativePath}/android")`,
|
|
295
|
+
" }",
|
|
296
|
+
" mavenCentral()",
|
|
297
|
+
" google()",
|
|
298
|
+
" }",
|
|
299
|
+
"}",
|
|
300
|
+
"",
|
|
301
|
+
].join("\n");
|
|
302
|
+
|
|
303
|
+
const gradleProperties = "android.useAndroidX=true\n";
|
|
304
|
+
|
|
305
|
+
const settingsGradle = [
|
|
306
|
+
`include(":${targetName}")`,
|
|
307
|
+
`project(":${targetName}").projectDir = file("${androidProject}")`,
|
|
308
|
+
"",
|
|
309
|
+
].join("\n");
|
|
310
|
+
|
|
311
|
+
await fs.ensureDir(buildDir);
|
|
312
|
+
await fs.writeFile(path.join(buildDir, "build.gradle"), buildGradle);
|
|
313
|
+
await fs.writeFile(
|
|
314
|
+
path.join(buildDir, "gradle.properties"),
|
|
315
|
+
gradleProperties
|
|
316
|
+
);
|
|
317
|
+
await fs.writeFile(path.join(buildDir, "settings.gradle"), settingsGradle);
|
|
318
|
+
|
|
319
|
+
// Run only one Gradle task at a time
|
|
320
|
+
spawnSync(gradlew, targets, { cwd: buildDir, stdio: "inherit", env });
|
|
321
|
+
}
|
|
194
322
|
|
|
195
|
-
|
|
196
|
-
const dest = path.join(destination, `${targetName}-${aarVersion}.aar`);
|
|
197
|
-
await Promise.all([
|
|
198
|
-
fs.copy(output, dest),
|
|
199
|
-
...targetsToCopy.map(([src, dest]) => fs.copy(src, dest)),
|
|
200
|
-
]);
|
|
323
|
+
await Promise.all(targetsToCopy.map(([src, dest]) => fs.copy(src, dest)));
|
|
201
324
|
}
|
|
202
325
|
|
|
203
326
|
async function copyFiles(files: unknown, destination: string): Promise<void> {
|
package/src/metro-config.ts
CHANGED
|
@@ -109,14 +109,14 @@ const emptySerializerHook = (_graph: Graph, _delta: DeltaResult): void => {
|
|
|
109
109
|
* @param detectCyclicDependencies When true, cyclic dependency checking is enabled with a default set of options. Otherwise the object allows for fine-grained control over the detection process.
|
|
110
110
|
* @param detectDuplicateDependencies When true, duplicate dependency checking is enabled with a default set of options. Otherwise, the object allows for fine-grained control over the detection process.
|
|
111
111
|
* @param typescriptValidation When true, TypeScript type-checking is enabled with a default set of options. Otherwise, the object allows for fine-grained control over the type-checking process.
|
|
112
|
-
* @param
|
|
112
|
+
* @param treeShake When true, tree shaking is enabled.
|
|
113
113
|
*/
|
|
114
114
|
export function customizeMetroConfig(
|
|
115
115
|
metroConfigReadonly: InputConfigT,
|
|
116
116
|
detectCyclicDependencies: boolean | CyclicDetectorOptions,
|
|
117
117
|
detectDuplicateDependencies: boolean | DuplicateDetectorOptions,
|
|
118
118
|
typescriptValidation: boolean | TypeScriptValidationOptions,
|
|
119
|
-
|
|
119
|
+
treeShake: boolean
|
|
120
120
|
): void {
|
|
121
121
|
// We will be making changes to the Metro configuration. Coerce from a
|
|
122
122
|
// type with readonly props to a type where the props are writeable.
|
|
@@ -134,7 +134,7 @@ export function customizeMetroConfig(
|
|
|
134
134
|
plugins.push(CyclicDependencies());
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
if (
|
|
137
|
+
if (treeShake) {
|
|
138
138
|
metroConfig.serializer.customSerializer = MetroSerializerEsbuild(plugins);
|
|
139
139
|
Object.assign(metroConfig.transformer, esbuildTransformerConfig);
|
|
140
140
|
} else if (plugins.length > 0) {
|
package/src/start.ts
CHANGED
|
@@ -17,6 +17,19 @@ import { customizeMetroConfig } from "./metro-config";
|
|
|
17
17
|
import { getKitServerConfig } from "./serve/kit-config";
|
|
18
18
|
import type { TypeScriptValidationOptions } from "./types";
|
|
19
19
|
|
|
20
|
+
type DevServerMiddleware = ReturnType<
|
|
21
|
+
typeof CliServerApi["createDevServerMiddleware"]
|
|
22
|
+
>;
|
|
23
|
+
|
|
24
|
+
type DevServer = ReturnType<DevServerMiddleware["attachToServer"]>;
|
|
25
|
+
|
|
26
|
+
type DevServerMiddleware7 = Pick<DevServerMiddleware, "middleware"> & {
|
|
27
|
+
websocketEndpoints: unknown;
|
|
28
|
+
debuggerProxyEndpoint: DevServer["debuggerProxy"];
|
|
29
|
+
messageSocketEndpoint: DevServer["messageSocket"];
|
|
30
|
+
eventsSocketEndpoint: DevServer["eventsSocket"];
|
|
31
|
+
};
|
|
32
|
+
|
|
20
33
|
export type CLIStartOptions = {
|
|
21
34
|
host: string;
|
|
22
35
|
port: number;
|
|
@@ -44,6 +57,12 @@ function friendlyRequire<T>(module: string): T {
|
|
|
44
57
|
}
|
|
45
58
|
}
|
|
46
59
|
|
|
60
|
+
function hasWebsocketEndpoints(
|
|
61
|
+
devServer: DevServerMiddleware | DevServerMiddleware7
|
|
62
|
+
): devServer is DevServerMiddleware7 {
|
|
63
|
+
return !("attachToServer" in devServer);
|
|
64
|
+
}
|
|
65
|
+
|
|
47
66
|
export async function rnxStart(
|
|
48
67
|
_argv: Array<string>,
|
|
49
68
|
cliConfig: CLIConfig,
|
|
@@ -131,16 +150,17 @@ export async function rnxStart(
|
|
|
131
150
|
serverConfig.detectCyclicDependencies,
|
|
132
151
|
serverConfig.detectDuplicateDependencies,
|
|
133
152
|
serverConfig.typescriptValidation ? typescriptValidationOptions : false,
|
|
134
|
-
serverConfig.
|
|
153
|
+
serverConfig.treeShake
|
|
135
154
|
);
|
|
136
155
|
|
|
137
156
|
// create middleware -- a collection of plugins which handle incoming
|
|
138
157
|
// http(s) requests, routing them to static pages or JS functions.
|
|
139
|
-
const
|
|
158
|
+
const devServer = createDevServerMiddleware({
|
|
140
159
|
host: cliOptions.host,
|
|
141
160
|
port: metroConfig.server.port,
|
|
142
161
|
watchFolders: metroConfig.watchFolders,
|
|
143
162
|
});
|
|
163
|
+
const middleware = devServer.middleware;
|
|
144
164
|
middleware.use(indexPageMiddleware);
|
|
145
165
|
|
|
146
166
|
// merge the Metro config middleware with our middleware
|
|
@@ -158,17 +178,37 @@ export async function rnxStart(
|
|
|
158
178
|
);
|
|
159
179
|
};
|
|
160
180
|
|
|
181
|
+
// `createDevServerMiddleware` changed its return type in
|
|
182
|
+
// https://github.com/react-native-community/cli/pull/1560
|
|
183
|
+
let websocketEndpoints: unknown = undefined;
|
|
184
|
+
let messageSocketEndpoint: DevServer["messageSocket"];
|
|
185
|
+
|
|
186
|
+
if (hasWebsocketEndpoints(devServer)) {
|
|
187
|
+
websocketEndpoints = devServer.websocketEndpoints;
|
|
188
|
+
messageSocketEndpoint = devServer.messageSocketEndpoint;
|
|
189
|
+
|
|
190
|
+
// bind our `reportEvent` delegate to the Metro server
|
|
191
|
+
reportEventDelegate = devServer.eventsSocketEndpoint.reportEvent;
|
|
192
|
+
}
|
|
193
|
+
|
|
161
194
|
// start the Metro server
|
|
162
|
-
const
|
|
195
|
+
const serverOptions = {
|
|
163
196
|
host: cliOptions.host,
|
|
164
197
|
secure: cliOptions.https,
|
|
165
198
|
secureCert: cliOptions.cert,
|
|
166
199
|
secureKey: cliOptions.key,
|
|
167
|
-
|
|
168
|
-
|
|
200
|
+
websocketEndpoints,
|
|
201
|
+
};
|
|
202
|
+
const serverInstance = await startServer(metroConfig, serverOptions);
|
|
203
|
+
|
|
204
|
+
if (!hasWebsocketEndpoints(devServer)) {
|
|
205
|
+
const { messageSocket, eventsSocket } =
|
|
206
|
+
devServer.attachToServer(serverInstance);
|
|
207
|
+
messageSocketEndpoint = messageSocket;
|
|
169
208
|
|
|
170
|
-
|
|
171
|
-
|
|
209
|
+
// bind our `reportEvent` delegate to the Metro server
|
|
210
|
+
reportEventDelegate = eventsSocket.reportEvent;
|
|
211
|
+
}
|
|
172
212
|
|
|
173
213
|
// In Node 8, the default keep-alive for an HTTP connection is 5 seconds. In
|
|
174
214
|
// early versions of Node 8, this was implemented in a buggy way which caused
|
|
@@ -217,12 +257,12 @@ export async function rnxStart(
|
|
|
217
257
|
|
|
218
258
|
case "d":
|
|
219
259
|
terminal.log(chalk.green("Opening developer menu..."));
|
|
220
|
-
|
|
260
|
+
messageSocketEndpoint.broadcast("devMenu", undefined);
|
|
221
261
|
break;
|
|
222
262
|
|
|
223
263
|
case "r":
|
|
224
264
|
terminal.log(chalk.green("Reloading app..."));
|
|
225
|
-
|
|
265
|
+
messageSocketEndpoint.broadcast("reload", undefined);
|
|
226
266
|
break;
|
|
227
267
|
}
|
|
228
268
|
}
|
package/src/test.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Config as CLIConfig } from "@react-native-community/cli-types";
|
|
2
|
+
import { findPackageDependencyDir } from "@rnx-kit/tools-node";
|
|
2
3
|
import { parsePlatform } from "@rnx-kit/tools-react-native/platform";
|
|
3
4
|
import { run as runJest } from "jest-cli";
|
|
4
|
-
import path from "path";
|
|
5
5
|
|
|
6
6
|
type Args = {
|
|
7
7
|
platform: "android" | "ios" | "macos" | "windows" | "win32";
|
|
@@ -54,8 +54,8 @@ function jestOptions(): Options[] {
|
|
|
54
54
|
//
|
|
55
55
|
// To work around this, resolve `jest-cli` first, then use the resolved path
|
|
56
56
|
// to import `./build/cli/args`.
|
|
57
|
-
const jestPath =
|
|
58
|
-
const { options } = require(`${
|
|
57
|
+
const jestPath = findPackageDependencyDir("jest-cli") || "jest-cli";
|
|
58
|
+
const { options } = require(`${jestPath}/build/cli/args`);
|
|
59
59
|
|
|
60
60
|
return Object.keys(options).map((option) => {
|
|
61
61
|
const { default: defaultValue, description, type } = options[option];
|