@react-native/community-cli-plugin 0.77.0-nightly-20240930-513e9669e → 0.77.0-nightly-20241002-d19a2178b
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/dist/commands/bundle/buildBundle.js +4 -5
- package/dist/commands/bundle/saveAssets.js +10 -8
- package/dist/commands/start/OpenDebuggerKeyboardHandler.js +129 -0
- package/dist/commands/start/OpenDebuggerKeyboardHandler.js.flow +19 -0
- package/dist/commands/start/attachKeyHandlers.js +86 -40
- package/dist/commands/start/attachKeyHandlers.js.flow +2 -0
- package/dist/commands/start/middleware.js +2 -2
- package/dist/commands/start/runServer.js +26 -15
- package/dist/utils/createDevMiddlewareLogger.js +21 -0
- package/dist/utils/createDevMiddlewareLogger.js.flow +26 -0
- package/dist/utils/loadMetroConfig.js +3 -3
- package/dist/utils/version.js +23 -23
- package/dist/utils/version.js.flow +4 -1
- package/package.json +11 -9
- package/dist/utils/KeyPressHandler.js +0 -66
- package/dist/utils/KeyPressHandler.js.flow +0 -22
- package/dist/utils/logger.js +0 -91
- package/dist/utils/logger.js.flow +0 -21
|
@@ -7,7 +7,6 @@ exports.unstable_buildBundleWithConfig = exports.default = void 0;
|
|
|
7
7
|
var _loadMetroConfig = _interopRequireDefault(
|
|
8
8
|
require("../../utils/loadMetroConfig")
|
|
9
9
|
);
|
|
10
|
-
var _logger = require("../../utils/logger");
|
|
11
10
|
var _parseKeyValueParamArray = _interopRequireDefault(
|
|
12
11
|
require("../../utils/parseKeyValueParamArray")
|
|
13
12
|
);
|
|
@@ -40,12 +39,12 @@ async function buildBundleWithConfig(
|
|
|
40
39
|
args.resolverOption ?? []
|
|
41
40
|
);
|
|
42
41
|
if (config.resolver.platforms.indexOf(args.platform) === -1) {
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
console.error(
|
|
43
|
+
`${_chalk.default.red("error")}: Invalid platform ${
|
|
45
44
|
args.platform ? `"${_chalk.default.bold(args.platform)}" ` : ""
|
|
46
45
|
}selected.`
|
|
47
46
|
);
|
|
48
|
-
|
|
47
|
+
console.info(
|
|
49
48
|
`Available platforms are: ${config.resolver.platforms
|
|
50
49
|
.map((x) => `"${_chalk.default.bold(x)}"`)
|
|
51
50
|
.join(
|
|
@@ -75,7 +74,7 @@ async function buildBundleWithConfig(
|
|
|
75
74
|
recursive: true,
|
|
76
75
|
mode: 0o755,
|
|
77
76
|
});
|
|
78
|
-
await bundleImpl.save(bundle, args,
|
|
77
|
+
await bundleImpl.save(bundle, args, console.info);
|
|
79
78
|
const outputAssets = await server.getAssets({
|
|
80
79
|
..._Server.default.DEFAULT_BUNDLE_OPTIONS,
|
|
81
80
|
...requestOpts,
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _logger = require("../../utils/logger");
|
|
8
7
|
var _assetCatalogIOS = require("./assetCatalogIOS");
|
|
9
8
|
var _filterPlatformAssetScales = _interopRequireDefault(
|
|
10
9
|
require("./filterPlatformAssetScales")
|
|
@@ -15,6 +14,7 @@ var _getAssetDestPathAndroid = _interopRequireDefault(
|
|
|
15
14
|
var _getAssetDestPathIOS = _interopRequireDefault(
|
|
16
15
|
require("./getAssetDestPathIOS")
|
|
17
16
|
);
|
|
17
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
18
18
|
var _fs = _interopRequireDefault(require("fs"));
|
|
19
19
|
var _path = _interopRequireDefault(require("path"));
|
|
20
20
|
function _interopRequireDefault(e) {
|
|
@@ -22,7 +22,7 @@ function _interopRequireDefault(e) {
|
|
|
22
22
|
}
|
|
23
23
|
async function saveAssets(assets, platform, assetsDest, assetCatalogDest) {
|
|
24
24
|
if (assetsDest == null) {
|
|
25
|
-
|
|
25
|
+
console.warn("Warning: Assets destination folder is not set, skipping...");
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
const filesToCopy = {};
|
|
@@ -52,12 +52,14 @@ async function saveAssets(assets, platform, assetsDest, assetCatalogDest) {
|
|
|
52
52
|
"RNAssets.xcassets"
|
|
53
53
|
);
|
|
54
54
|
if (!_fs.default.existsSync(catalogDir)) {
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
console.error(
|
|
56
|
+
`${_chalk.default.red(
|
|
57
|
+
"error"
|
|
58
|
+
)}: Could not find asset catalog 'RNAssets.xcassets' in ${assetCatalogDest}. Make sure to create it if it does not exist.`
|
|
57
59
|
);
|
|
58
60
|
return;
|
|
59
61
|
}
|
|
60
|
-
|
|
62
|
+
console.info("Adding images to asset catalog", catalogDir);
|
|
61
63
|
(0, _assetCatalogIOS.cleanAssetCatalog)(catalogDir);
|
|
62
64
|
for (const asset of assets) {
|
|
63
65
|
if ((0, _assetCatalogIOS.isCatalogAsset)(asset)) {
|
|
@@ -71,7 +73,7 @@ async function saveAssets(assets, platform, assetsDest, assetCatalogDest) {
|
|
|
71
73
|
addAssetToCopy(asset);
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
|
-
|
|
76
|
+
console.info("Done adding images to asset catalog");
|
|
75
77
|
} else {
|
|
76
78
|
assets.forEach(addAssetToCopy);
|
|
77
79
|
}
|
|
@@ -82,7 +84,7 @@ function copyAll(filesToCopy) {
|
|
|
82
84
|
if (queue.length === 0) {
|
|
83
85
|
return Promise.resolve();
|
|
84
86
|
}
|
|
85
|
-
|
|
87
|
+
console.info(`Copying ${queue.length} asset files`);
|
|
86
88
|
return new Promise((resolve, reject) => {
|
|
87
89
|
const copyNext = (error) => {
|
|
88
90
|
if (error) {
|
|
@@ -90,7 +92,7 @@ function copyAll(filesToCopy) {
|
|
|
90
92
|
return;
|
|
91
93
|
}
|
|
92
94
|
if (queue.length === 0) {
|
|
93
|
-
|
|
95
|
+
console.info("Done copying assets");
|
|
94
96
|
resolve();
|
|
95
97
|
} else {
|
|
96
98
|
const src = queue.shift();
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
+
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
9
|
+
function _interopRequireDefault(e) {
|
|
10
|
+
return e && e.__esModule ? e : { default: e };
|
|
11
|
+
}
|
|
12
|
+
class OpenDebuggerKeyboardHandler {
|
|
13
|
+
#devServerUrl;
|
|
14
|
+
#reporter;
|
|
15
|
+
#targetsShownForSelection = null;
|
|
16
|
+
constructor({ devServerUrl, reporter }) {
|
|
17
|
+
this.#devServerUrl = devServerUrl;
|
|
18
|
+
this.#reporter = reporter;
|
|
19
|
+
}
|
|
20
|
+
async #tryOpenDebuggerForTarget(target) {
|
|
21
|
+
this.#targetsShownForSelection = null;
|
|
22
|
+
this.#clearTerminalMenu();
|
|
23
|
+
try {
|
|
24
|
+
await (0, _nodeFetch.default)(
|
|
25
|
+
new URL(
|
|
26
|
+
"/open-debugger?target=" + encodeURIComponent(target.id),
|
|
27
|
+
this.#devServerUrl
|
|
28
|
+
).href,
|
|
29
|
+
{
|
|
30
|
+
method: "POST",
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
} catch (e) {
|
|
34
|
+
this.#log(
|
|
35
|
+
"error",
|
|
36
|
+
"Failed to open debugger for %s on %s debug targets: %s",
|
|
37
|
+
target.description,
|
|
38
|
+
target.deviceName,
|
|
39
|
+
e.message
|
|
40
|
+
);
|
|
41
|
+
this.#clearTerminalMenu();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async handleOpenDebugger() {
|
|
45
|
+
this.#setTerminalMenu("Fetching available debugging targets...");
|
|
46
|
+
this.#targetsShownForSelection = null;
|
|
47
|
+
try {
|
|
48
|
+
const res = await (0, _nodeFetch.default)(
|
|
49
|
+
this.#devServerUrl + "/json/list",
|
|
50
|
+
{
|
|
51
|
+
method: "POST",
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
if (res.status !== 200) {
|
|
55
|
+
throw new Error(`Unexpected status code: ${res.status}`);
|
|
56
|
+
}
|
|
57
|
+
const targets = await res.json();
|
|
58
|
+
if (!Array.isArray(targets)) {
|
|
59
|
+
throw new Error("Expected array.");
|
|
60
|
+
}
|
|
61
|
+
if (targets.length === 0) {
|
|
62
|
+
this.#log("warn", "No connected targets");
|
|
63
|
+
this.#clearTerminalMenu();
|
|
64
|
+
} else if (targets.length === 1) {
|
|
65
|
+
const target = targets[0];
|
|
66
|
+
void this.#tryOpenDebuggerForTarget(target);
|
|
67
|
+
} else {
|
|
68
|
+
this.#targetsShownForSelection = targets;
|
|
69
|
+
if (targets.length > 9) {
|
|
70
|
+
this.#log(
|
|
71
|
+
"warn",
|
|
72
|
+
"10 or more debug targets available, showing the first 9."
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
this.#setTerminalMenu(
|
|
76
|
+
`Multiple debug targets available, please select:\n ${targets
|
|
77
|
+
.slice(0, 9)
|
|
78
|
+
.map(
|
|
79
|
+
({ description, deviceName }, i) =>
|
|
80
|
+
`${_chalk.default.white.inverse(
|
|
81
|
+
` ${i + 1} `
|
|
82
|
+
)} - "${description}" on "${deviceName}"`
|
|
83
|
+
)
|
|
84
|
+
.join("\n ")}`
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
} catch (e) {
|
|
88
|
+
this.#log("error", `Failed to fetch debug targets: ${e.message}`);
|
|
89
|
+
this.#clearTerminalMenu();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
maybeHandleTargetSelection(keyName) {
|
|
93
|
+
if (keyName >= "1" && keyName <= "9") {
|
|
94
|
+
const targetIndex = Number(keyName) - 1;
|
|
95
|
+
if (
|
|
96
|
+
this.#targetsShownForSelection != null &&
|
|
97
|
+
targetIndex < this.#targetsShownForSelection.length
|
|
98
|
+
) {
|
|
99
|
+
const target = this.#targetsShownForSelection[targetIndex];
|
|
100
|
+
void this.#tryOpenDebuggerForTarget(target);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
dismiss() {
|
|
107
|
+
this.#clearTerminalMenu();
|
|
108
|
+
this.#targetsShownForSelection = null;
|
|
109
|
+
}
|
|
110
|
+
#log(level, ...data) {
|
|
111
|
+
this.#reporter.update({
|
|
112
|
+
type: "unstable_server_log",
|
|
113
|
+
level,
|
|
114
|
+
data,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
#setTerminalMenu(message) {
|
|
118
|
+
this.#reporter.update({
|
|
119
|
+
type: "unstable_server_menu_updated",
|
|
120
|
+
message,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
#clearTerminalMenu() {
|
|
124
|
+
this.#reporter.update({
|
|
125
|
+
type: "unstable_server_menu_cleared",
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.default = OpenDebuggerKeyboardHandler;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall react_native
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type TerminalReporter from "metro/src/lib/TerminalReporter";
|
|
13
|
+
|
|
14
|
+
declare export default class OpenDebuggerKeyboardHandler {
|
|
15
|
+
constructor({ devServerUrl: string, reporter: TerminalReporter }): void;
|
|
16
|
+
handleOpenDebugger(): Promise<void>;
|
|
17
|
+
maybeHandleTargetSelection(keyName: string): boolean;
|
|
18
|
+
dismiss(): void;
|
|
19
|
+
}
|
|
@@ -4,11 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
6
|
exports.default = attachKeyHandlers;
|
|
7
|
-
var
|
|
8
|
-
|
|
7
|
+
var _OpenDebuggerKeyboardHandler = _interopRequireDefault(
|
|
8
|
+
require("./OpenDebuggerKeyboardHandler")
|
|
9
|
+
);
|
|
9
10
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
10
|
-
var
|
|
11
|
-
var
|
|
11
|
+
var _child_process = require("child_process");
|
|
12
|
+
var _invariant = _interopRequireDefault(require("invariant"));
|
|
13
|
+
var _readline = _interopRequireDefault(require("readline"));
|
|
14
|
+
var _tty = require("tty");
|
|
12
15
|
function _interopRequireDefault(e) {
|
|
13
16
|
return e && e.__esModule ? e : { default: e };
|
|
14
17
|
}
|
|
@@ -25,79 +28,122 @@ const throttle = (callback, timeout) => {
|
|
|
25
28
|
}
|
|
26
29
|
};
|
|
27
30
|
};
|
|
28
|
-
|
|
31
|
+
const spawnOptions = {
|
|
32
|
+
env: {
|
|
33
|
+
...process.env,
|
|
34
|
+
FORCE_COLOR: _chalk.default.supportsColor ? "true" : "false",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
function attachKeyHandlers({
|
|
38
|
+
cliConfig,
|
|
39
|
+
devServerUrl,
|
|
40
|
+
messageSocket,
|
|
41
|
+
reporter,
|
|
42
|
+
}) {
|
|
29
43
|
if (process.stdin.isTTY !== true) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
reporter.update({
|
|
45
|
+
type: "unstable_server_log",
|
|
46
|
+
level: "info",
|
|
47
|
+
data: "Interactive mode is not supported in this environment",
|
|
48
|
+
});
|
|
33
49
|
return;
|
|
34
50
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
FORCE_COLOR: _chalk.default.supportsColor ? "true" : "false",
|
|
38
|
-
},
|
|
39
|
-
};
|
|
51
|
+
_readline.default.emitKeypressEvents(process.stdin);
|
|
52
|
+
setRawMode(true);
|
|
40
53
|
const reload = throttle(() => {
|
|
41
|
-
|
|
54
|
+
reporter.update({
|
|
55
|
+
type: "unstable_server_log",
|
|
56
|
+
level: "info",
|
|
57
|
+
data: "Reloading connected app(s)...",
|
|
58
|
+
});
|
|
42
59
|
messageSocket.broadcast("reload", null);
|
|
43
60
|
}, RELOAD_TIMEOUT);
|
|
44
|
-
const
|
|
45
|
-
|
|
61
|
+
const openDebuggerKeyboardHandler = new _OpenDebuggerKeyboardHandler.default({
|
|
62
|
+
reporter,
|
|
63
|
+
devServerUrl,
|
|
64
|
+
});
|
|
65
|
+
process.stdin.on("keypress", (str, key) => {
|
|
66
|
+
if (openDebuggerKeyboardHandler.maybeHandleTargetSelection(key.name)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
switch (key.sequence) {
|
|
46
70
|
case "r":
|
|
47
71
|
reload();
|
|
48
72
|
break;
|
|
49
73
|
case "d":
|
|
50
|
-
|
|
74
|
+
reporter.update({
|
|
75
|
+
type: "unstable_server_log",
|
|
76
|
+
level: "info",
|
|
77
|
+
data: "Opening Dev Menu...",
|
|
78
|
+
});
|
|
51
79
|
messageSocket.broadcast("devMenu", null);
|
|
52
80
|
break;
|
|
53
81
|
case "i":
|
|
54
|
-
|
|
55
|
-
|
|
82
|
+
reporter.update({
|
|
83
|
+
type: "unstable_server_log",
|
|
84
|
+
level: "info",
|
|
85
|
+
data: "Opening app on iOS...",
|
|
86
|
+
});
|
|
87
|
+
(0, _child_process.spawn)(
|
|
56
88
|
"npx",
|
|
57
89
|
[
|
|
58
90
|
"react-native",
|
|
59
91
|
"run-ios",
|
|
60
92
|
...(cliConfig.project.ios?.watchModeCommandParams ?? []),
|
|
61
93
|
],
|
|
62
|
-
|
|
94
|
+
spawnOptions
|
|
63
95
|
).stdout?.pipe(process.stdout);
|
|
64
96
|
break;
|
|
65
97
|
case "a":
|
|
66
|
-
|
|
67
|
-
|
|
98
|
+
reporter.update({
|
|
99
|
+
type: "unstable_server_log",
|
|
100
|
+
level: "info",
|
|
101
|
+
data: "Opening app on Android...",
|
|
102
|
+
});
|
|
103
|
+
(0, _child_process.spawn)(
|
|
68
104
|
"npx",
|
|
69
105
|
[
|
|
70
106
|
"react-native",
|
|
71
107
|
"run-android",
|
|
72
108
|
...(cliConfig.project.android?.watchModeCommandParams ?? []),
|
|
73
109
|
],
|
|
74
|
-
|
|
110
|
+
spawnOptions
|
|
75
111
|
).stdout?.pipe(process.stdout);
|
|
76
112
|
break;
|
|
77
113
|
case "j":
|
|
78
|
-
|
|
79
|
-
method: "POST",
|
|
80
|
-
});
|
|
114
|
+
void openDebuggerKeyboardHandler.handleOpenDebugger();
|
|
81
115
|
break;
|
|
82
116
|
case CTRL_C:
|
|
83
117
|
case CTRL_D:
|
|
84
|
-
|
|
85
|
-
|
|
118
|
+
openDebuggerKeyboardHandler.dismiss();
|
|
119
|
+
reporter.update({
|
|
120
|
+
type: "unstable_server_log",
|
|
121
|
+
level: "info",
|
|
122
|
+
data: "Stopping server",
|
|
123
|
+
});
|
|
124
|
+
setRawMode(false);
|
|
125
|
+
process.stdin.pause();
|
|
86
126
|
process.emit("SIGINT");
|
|
87
127
|
process.exit();
|
|
88
128
|
}
|
|
89
129
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
130
|
+
reporter.update({
|
|
131
|
+
type: "unstable_server_log",
|
|
132
|
+
level: "info",
|
|
133
|
+
data: `Key commands available:
|
|
134
|
+
|
|
135
|
+
${_chalk.default.bold.inverse(" i ")} - run on iOS
|
|
136
|
+
${_chalk.default.bold.inverse(" a ")} - run on Android
|
|
137
|
+
${_chalk.default.bold.inverse(" r ")} - reload app(s)
|
|
138
|
+
${_chalk.default.bold.inverse(" d ")} - open Dev Menu
|
|
139
|
+
${_chalk.default.bold.inverse(" j ")} - open DevTools
|
|
140
|
+
`,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function setRawMode(enable) {
|
|
144
|
+
(0, _invariant.default)(
|
|
145
|
+
process.stdin instanceof _tty.ReadStream,
|
|
146
|
+
"process.stdin must be a readable stream to modify raw mode"
|
|
102
147
|
);
|
|
148
|
+
process.stdin.setRawMode(enable);
|
|
103
149
|
}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import type { Config } from "@react-native-community/cli-types";
|
|
13
|
+
import type TerminalReporter from "metro/src/lib/TerminalReporter";
|
|
13
14
|
|
|
14
15
|
declare export default function attachKeyHandlers({
|
|
15
16
|
cliConfig: Config,
|
|
@@ -18,4 +19,5 @@ declare export default function attachKeyHandlers({
|
|
|
18
19
|
broadcast: (type: string, params?: Record<string, mixed> | null) => void,
|
|
19
20
|
...
|
|
20
21
|
}>,
|
|
22
|
+
reporter: TerminalReporter,
|
|
21
23
|
}): void;
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
6
|
exports.indexPageMiddleware = exports.createDevServerMiddleware = void 0;
|
|
7
|
-
|
|
7
|
+
const debug = require("debug")("ReactNative:CommunityCliPlugin");
|
|
8
8
|
const noopNextHandle = (req, res, next) => {
|
|
9
9
|
next();
|
|
10
10
|
};
|
|
@@ -32,7 +32,7 @@ try {
|
|
|
32
32
|
communityMiddlewareFallback.createDevServerMiddleware =
|
|
33
33
|
community.createDevServerMiddleware;
|
|
34
34
|
} catch {
|
|
35
|
-
|
|
35
|
+
debug(`⚠️ Unable to find @react-native-community/cli-server-api
|
|
36
36
|
Starting the server without the community middleware.`);
|
|
37
37
|
}
|
|
38
38
|
const createDevServerMiddleware = (exports.createDevServerMiddleware =
|
|
@@ -4,13 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
var _createDevMiddlewareLogger = _interopRequireDefault(
|
|
8
|
+
require("../../utils/createDevMiddlewareLogger")
|
|
9
|
+
);
|
|
7
10
|
var _isDevServerRunning = _interopRequireDefault(
|
|
8
11
|
require("../../utils/isDevServerRunning")
|
|
9
12
|
);
|
|
10
13
|
var _loadMetroConfig = _interopRequireDefault(
|
|
11
14
|
require("../../utils/loadMetroConfig")
|
|
12
15
|
);
|
|
13
|
-
var _logger = require("../../utils/logger");
|
|
14
16
|
var version = _interopRequireWildcard(require("../../utils/version"));
|
|
15
17
|
var _attachKeyHandlers = _interopRequireDefault(require("./attachKeyHandlers"));
|
|
16
18
|
var _cliServerApi = require("@react-native-community/cli-server-api");
|
|
@@ -68,31 +70,37 @@ async function runServer(_argv, ctx, args) {
|
|
|
68
70
|
hostname,
|
|
69
71
|
port,
|
|
70
72
|
});
|
|
71
|
-
|
|
73
|
+
console.info(
|
|
74
|
+
_chalk.default.blue(`\nWelcome to React Native v${ctx.reactNativeVersion}`)
|
|
75
|
+
);
|
|
72
76
|
const serverStatus = await (0, _isDevServerRunning.default)(
|
|
73
77
|
devServerUrl,
|
|
74
78
|
projectRoot
|
|
75
79
|
);
|
|
76
80
|
if (serverStatus === "matched_server_running") {
|
|
77
|
-
|
|
81
|
+
console.info(
|
|
78
82
|
`A dev server is already running for this project on port ${port}. Exiting.`
|
|
79
83
|
);
|
|
80
84
|
return;
|
|
81
85
|
} else if (serverStatus === "port_taken") {
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
console.error(
|
|
87
|
+
`${_chalk.default.red(
|
|
88
|
+
"error"
|
|
89
|
+
)}: Another process is running on port ${port}. Please terminate this ` +
|
|
84
90
|
'process and try again, or use another port with "--port".'
|
|
85
91
|
);
|
|
86
92
|
return;
|
|
87
93
|
}
|
|
88
|
-
|
|
89
|
-
`Starting dev server on port ${_chalk.default.bold(String(port))}...`
|
|
90
|
-
);
|
|
94
|
+
console.info(`Starting dev server on ${devServerUrl}\n`);
|
|
91
95
|
if (args.assetPlugins) {
|
|
92
96
|
metroConfig.transformer.assetPlugins = args.assetPlugins.map((plugin) =>
|
|
93
97
|
require.resolve(plugin)
|
|
94
98
|
);
|
|
95
99
|
}
|
|
100
|
+
let reportEvent;
|
|
101
|
+
const terminal = new _metroCore.Terminal(process.stdout);
|
|
102
|
+
const ReporterImpl = getReporterImpl(args.customLogReporterPath);
|
|
103
|
+
const terminalReporter = new ReporterImpl(terminal);
|
|
96
104
|
const {
|
|
97
105
|
middleware: communityMiddleware,
|
|
98
106
|
websocketEndpoints: communityWebsocketEndpoints,
|
|
@@ -107,12 +115,8 @@ async function runServer(_argv, ctx, args) {
|
|
|
107
115
|
_devMiddleware.createDevMiddleware)({
|
|
108
116
|
projectRoot,
|
|
109
117
|
serverBaseUrl: devServerUrl,
|
|
110
|
-
logger:
|
|
118
|
+
logger: (0, _createDevMiddlewareLogger.default)(terminalReporter),
|
|
111
119
|
});
|
|
112
|
-
let reportEvent;
|
|
113
|
-
const terminal = new _metroCore.Terminal(process.stdout);
|
|
114
|
-
const ReporterImpl = getReporterImpl(args.customLogReporterPath);
|
|
115
|
-
const terminalReporter = new ReporterImpl(terminal);
|
|
116
120
|
metroConfig.reporter = {
|
|
117
121
|
update(event) {
|
|
118
122
|
terminalReporter.update(event);
|
|
@@ -120,11 +124,18 @@ async function runServer(_argv, ctx, args) {
|
|
|
120
124
|
reportEvent(event);
|
|
121
125
|
}
|
|
122
126
|
if (args.interactive && event.type === "initialize_done") {
|
|
123
|
-
|
|
127
|
+
terminalReporter.update({
|
|
128
|
+
type: "unstable_server_log",
|
|
129
|
+
level: "info",
|
|
130
|
+
data: `Dev server ready. ${_chalk.default.dim(
|
|
131
|
+
"Press Ctrl+C to exit."
|
|
132
|
+
)}`,
|
|
133
|
+
});
|
|
124
134
|
(0, _attachKeyHandlers.default)({
|
|
125
135
|
cliConfig: ctx,
|
|
126
136
|
devServerUrl,
|
|
127
137
|
messageSocket: messageSocketEndpoint,
|
|
138
|
+
reporter: terminalReporter,
|
|
128
139
|
});
|
|
129
140
|
}
|
|
130
141
|
},
|
|
@@ -146,7 +157,7 @@ async function runServer(_argv, ctx, args) {
|
|
|
146
157
|
});
|
|
147
158
|
reportEvent = eventsSocketEndpoint.reportEvent;
|
|
148
159
|
serverInstance.keepAliveTimeout = 30000;
|
|
149
|
-
await version.logIfUpdateAvailable(ctx.root);
|
|
160
|
+
await version.logIfUpdateAvailable(ctx.root, terminalReporter);
|
|
150
161
|
}
|
|
151
162
|
function getReporterImpl(customLogReporterPath) {
|
|
152
163
|
if (customLogReporterPath == null) {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.default = createDevMiddlewareLogger;
|
|
7
|
+
function createDevMiddlewareLogger(reporter) {
|
|
8
|
+
return {
|
|
9
|
+
info: makeLogger(reporter, "info"),
|
|
10
|
+
warn: makeLogger(reporter, "warn"),
|
|
11
|
+
error: makeLogger(reporter, "error"),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function makeLogger(reporter, level) {
|
|
15
|
+
return (...data) =>
|
|
16
|
+
reporter.update({
|
|
17
|
+
type: "unstable_server_log",
|
|
18
|
+
level,
|
|
19
|
+
data,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall react_native
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type TerminalReporter from "metro/src/lib/TerminalReporter";
|
|
13
|
+
|
|
14
|
+
type LoggerFn = (...message: $ReadOnlyArray<string>) => void;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Create a dev-middleware logger object that will emit logs via Metro's
|
|
18
|
+
* terminal reporter.
|
|
19
|
+
*/
|
|
20
|
+
declare export default function createDevMiddlewareLogger(
|
|
21
|
+
reporter: TerminalReporter
|
|
22
|
+
): $ReadOnly<{
|
|
23
|
+
info: LoggerFn,
|
|
24
|
+
error: LoggerFn,
|
|
25
|
+
warn: LoggerFn,
|
|
26
|
+
}>;
|
|
@@ -5,13 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = loadMetroConfig;
|
|
7
7
|
var _errors = require("./errors");
|
|
8
|
-
var _logger = require("./logger");
|
|
9
8
|
var _metroPlatformResolver = require("./metroPlatformResolver");
|
|
10
9
|
var _metroConfig = require("metro-config");
|
|
11
10
|
var _path = _interopRequireDefault(require("path"));
|
|
12
11
|
function _interopRequireDefault(e) {
|
|
13
12
|
return e && e.__esModule ? e : { default: e };
|
|
14
13
|
}
|
|
14
|
+
const debug = require("debug")("ReactNative:CommunityCliPlugin");
|
|
15
15
|
function getOverrideConfig(ctx, config) {
|
|
16
16
|
const outOfTreePlatforms = Object.keys(ctx.platforms).filter(
|
|
17
17
|
(platform) => ctx.platforms[platform].npmPackageName
|
|
@@ -63,7 +63,7 @@ async function loadMetroConfig(ctx, options = {}) {
|
|
|
63
63
|
if (projectConfig.isEmpty) {
|
|
64
64
|
throw new _errors.CLIError(`No Metro config found in ${cwd}`);
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
debug(`Reading Metro config from ${projectConfig.filepath}`);
|
|
67
67
|
if (!global.__REACT_NATIVE_METRO_CONFIG_LOADED) {
|
|
68
68
|
for (const line of `
|
|
69
69
|
=================================================================================================
|
|
@@ -75,7 +75,7 @@ This warning will be removed in future (https://github.com/facebook/metro/issues
|
|
|
75
75
|
`
|
|
76
76
|
.trim()
|
|
77
77
|
.split("\n")) {
|
|
78
|
-
|
|
78
|
+
console.warn(line);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
const config = await (0, _metroConfig.loadConfig)({
|
package/dist/utils/version.js
CHANGED
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = getLatestRelease;
|
|
7
7
|
exports.logIfUpdateAvailable = logIfUpdateAvailable;
|
|
8
|
-
var _logger = require("./logger");
|
|
9
8
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
10
9
|
var _fs = require("fs");
|
|
11
10
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -13,33 +12,36 @@ var _semver = _interopRequireDefault(require("semver"));
|
|
|
13
12
|
function _interopRequireDefault(e) {
|
|
14
13
|
return e && e.__esModule ? e : { default: e };
|
|
15
14
|
}
|
|
15
|
+
const debug = require("debug")("ReactNative:CommunityCliPlugin");
|
|
16
16
|
function getReactNativeVersion(projectRoot) {
|
|
17
17
|
try {
|
|
18
18
|
const resolvedPath = require.resolve("react-native/package.json", {
|
|
19
19
|
paths: [projectRoot],
|
|
20
20
|
});
|
|
21
|
-
|
|
22
|
-
`Found 'react-native' from '${projectRoot}' -> '${resolvedPath}'`
|
|
23
|
-
);
|
|
21
|
+
debug(`Found 'react-native' from '${projectRoot}' -> '${resolvedPath}'`);
|
|
24
22
|
return JSON.parse((0, _fs.readFileSync)(resolvedPath, "utf8")).version;
|
|
25
23
|
} catch {
|
|
26
|
-
|
|
24
|
+
debug("Couldn't read the version of 'react-native'");
|
|
27
25
|
}
|
|
28
26
|
}
|
|
29
|
-
async function logIfUpdateAvailable(projectRoot) {
|
|
27
|
+
async function logIfUpdateAvailable(projectRoot, reporter) {
|
|
30
28
|
const versions = await latest(projectRoot);
|
|
31
29
|
if (!versions?.upgrade) {
|
|
32
30
|
return;
|
|
33
31
|
}
|
|
34
32
|
if (_semver.default.gt(versions.upgrade.stable, versions.current)) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
reporter.update({
|
|
34
|
+
type: "unstable_server_log",
|
|
35
|
+
level: "info",
|
|
36
|
+
data: `React Native v${
|
|
37
|
+
versions.upgrade.stable
|
|
38
|
+
} is now available (your project is running on v${versions.name}).
|
|
38
39
|
Changelog: ${_chalk.default.dim.underline(
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
versions.upgrade?.changelogUrl ?? "none"
|
|
41
|
+
)}
|
|
41
42
|
Diff: ${_chalk.default.dim.underline(versions.upgrade?.diffUrl ?? "none")}
|
|
42
|
-
|
|
43
|
+
`,
|
|
44
|
+
});
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
async function latest(projectRoot) {
|
|
@@ -63,11 +65,11 @@ async function latest(projectRoot) {
|
|
|
63
65
|
};
|
|
64
66
|
}
|
|
65
67
|
} catch (e) {
|
|
66
|
-
|
|
68
|
+
debug(
|
|
67
69
|
"Cannot detect current version of React Native, " +
|
|
68
70
|
"skipping check for a newer release"
|
|
69
71
|
);
|
|
70
|
-
|
|
72
|
+
debug(e);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
function isDiffPurgeEntry(data) {
|
|
@@ -78,20 +80,20 @@ function isDiffPurgeEntry(data) {
|
|
|
78
80
|
);
|
|
79
81
|
}
|
|
80
82
|
async function getLatestRelease(name, currentVersion) {
|
|
81
|
-
|
|
83
|
+
debug("Checking for a newer version of React Native");
|
|
82
84
|
try {
|
|
83
|
-
|
|
85
|
+
debug(`Current version: ${currentVersion}`);
|
|
84
86
|
if (["-canary", "-nightly"].some((s) => currentVersion.includes(s))) {
|
|
85
87
|
return;
|
|
86
88
|
}
|
|
87
|
-
|
|
89
|
+
debug("Checking for newer releases on GitHub");
|
|
88
90
|
const latestVersion = await getLatestRnDiffPurgeVersion(name);
|
|
89
91
|
if (latestVersion == null) {
|
|
90
|
-
|
|
92
|
+
debug("Failed to get latest release");
|
|
91
93
|
return;
|
|
92
94
|
}
|
|
93
95
|
const { stable, candidate } = latestVersion;
|
|
94
|
-
|
|
96
|
+
debug(`Latest release: ${stable} (${candidate ?? ""})`);
|
|
95
97
|
if (_semver.default.compare(stable, currentVersion) >= 0) {
|
|
96
98
|
return {
|
|
97
99
|
stable,
|
|
@@ -101,10 +103,8 @@ async function getLatestRelease(name, currentVersion) {
|
|
|
101
103
|
};
|
|
102
104
|
}
|
|
103
105
|
} catch (e) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
);
|
|
107
|
-
_logger.logger.debug(e);
|
|
106
|
+
debug("Something went wrong with remote version checking, moving on");
|
|
107
|
+
debug(e);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
function buildChangelogUrl(version) {
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* @oncall react_native
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import type TerminalReporter from "metro/src/lib/TerminalReporter";
|
|
13
|
+
|
|
12
14
|
type Release = {
|
|
13
15
|
// The current stable release
|
|
14
16
|
stable: string,
|
|
@@ -22,7 +24,8 @@ type Release = {
|
|
|
22
24
|
* Logs out a message if the user's version is behind a stable version of React Native
|
|
23
25
|
*/
|
|
24
26
|
declare export function logIfUpdateAvailable(
|
|
25
|
-
projectRoot: string
|
|
27
|
+
projectRoot: string,
|
|
28
|
+
reporter: TerminalReporter
|
|
26
29
|
): Promise<void>;
|
|
27
30
|
|
|
28
31
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native/community-cli-plugin",
|
|
3
|
-
"version": "0.77.0-nightly-
|
|
3
|
+
"version": "0.77.0-nightly-20241002-d19a2178b",
|
|
4
4
|
"description": "Core CLI commands for React Native",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -22,18 +22,20 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-native/dev-middleware": "0.77.0-nightly-
|
|
26
|
-
"@react-native/metro-babel-transformer": "0.77.0-nightly-
|
|
25
|
+
"@react-native/dev-middleware": "0.77.0-nightly-20241002-d19a2178b",
|
|
26
|
+
"@react-native/metro-babel-transformer": "0.77.0-nightly-20241002-d19a2178b",
|
|
27
27
|
"chalk": "^4.0.0",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"metro
|
|
31
|
-
"metro-
|
|
28
|
+
"debug": "^2.2.0",
|
|
29
|
+
"invariant": "^2.2.4",
|
|
30
|
+
"metro": "^0.81.0-alpha.2",
|
|
31
|
+
"metro-config": "^0.81.0-alpha.2",
|
|
32
|
+
"metro-core": "^0.81.0-alpha.2",
|
|
32
33
|
"node-fetch": "^2.2.0",
|
|
33
|
-
"readline": "^1.3.0"
|
|
34
|
+
"readline": "^1.3.0",
|
|
35
|
+
"semver": "^7.1.3"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
|
-
"metro-resolver": "^0.81.0-alpha.
|
|
38
|
+
"metro-resolver": "^0.81.0-alpha.2"
|
|
37
39
|
},
|
|
38
40
|
"peerDependencies": {
|
|
39
41
|
"@react-native-community/cli-server-api": "*"
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true,
|
|
5
|
-
});
|
|
6
|
-
exports.KeyPressHandler = void 0;
|
|
7
|
-
var _errors = require("./errors");
|
|
8
|
-
var _logger = require("./logger");
|
|
9
|
-
const CTRL_C = "\u0003";
|
|
10
|
-
class KeyPressHandler {
|
|
11
|
-
_isInterceptingKeyStrokes = false;
|
|
12
|
-
_isHandlingKeyPress = false;
|
|
13
|
-
constructor(onPress) {
|
|
14
|
-
this._onPress = onPress;
|
|
15
|
-
}
|
|
16
|
-
createInteractionListener() {
|
|
17
|
-
let wasIntercepting = false;
|
|
18
|
-
const listener = ({ pause }) => {
|
|
19
|
-
if (pause) {
|
|
20
|
-
wasIntercepting = this._isInterceptingKeyStrokes;
|
|
21
|
-
this.stopInterceptingKeyStrokes();
|
|
22
|
-
} else if (wasIntercepting) {
|
|
23
|
-
this.startInterceptingKeyStrokes();
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
return listener;
|
|
27
|
-
}
|
|
28
|
-
_handleKeypress = async (key) => {
|
|
29
|
-
if (this._isHandlingKeyPress && key !== CTRL_C) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
this._isHandlingKeyPress = true;
|
|
33
|
-
try {
|
|
34
|
-
_logger.logger.debug(`Key pressed: ${key}`);
|
|
35
|
-
await this._onPress(key);
|
|
36
|
-
} catch (error) {
|
|
37
|
-
return new _errors.CLIError(
|
|
38
|
-
"There was an error with the key press handler."
|
|
39
|
-
);
|
|
40
|
-
} finally {
|
|
41
|
-
this._isHandlingKeyPress = false;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
startInterceptingKeyStrokes() {
|
|
45
|
-
if (this._isInterceptingKeyStrokes) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
this._isInterceptingKeyStrokes = true;
|
|
49
|
-
const { stdin } = process;
|
|
50
|
-
stdin.setRawMode(true);
|
|
51
|
-
stdin.resume();
|
|
52
|
-
stdin.setEncoding("utf8");
|
|
53
|
-
stdin.on("data", this._handleKeypress);
|
|
54
|
-
}
|
|
55
|
-
stopInterceptingKeyStrokes() {
|
|
56
|
-
if (!this._isInterceptingKeyStrokes) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
this._isInterceptingKeyStrokes = false;
|
|
60
|
-
const { stdin } = process;
|
|
61
|
-
stdin.removeListener("data", this._handleKeypress);
|
|
62
|
-
stdin.setRawMode(false);
|
|
63
|
-
stdin.resume();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
exports.KeyPressHandler = KeyPressHandler;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
* @flow strict-local
|
|
8
|
-
* @format
|
|
9
|
-
* @oncall react_native
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
/** An abstract key stroke interceptor. */
|
|
13
|
-
declare export class KeyPressHandler {
|
|
14
|
-
_isInterceptingKeyStrokes: $FlowFixMe;
|
|
15
|
-
_isHandlingKeyPress: $FlowFixMe;
|
|
16
|
-
_onPress: (key: string) => Promise<void>;
|
|
17
|
-
constructor(onPress: (key: string) => Promise<void>): void;
|
|
18
|
-
createInteractionListener(): ({ pause: boolean, ... }) => void;
|
|
19
|
-
_handleKeypress: $FlowFixMe;
|
|
20
|
-
startInterceptingKeyStrokes(): void;
|
|
21
|
-
stopInterceptingKeyStrokes(): void;
|
|
22
|
-
}
|
package/dist/utils/logger.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true,
|
|
5
|
-
});
|
|
6
|
-
exports.logger = void 0;
|
|
7
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
-
function _interopRequireDefault(e) {
|
|
9
|
-
return e && e.__esModule ? e : { default: e };
|
|
10
|
-
}
|
|
11
|
-
const SEPARATOR = ", ";
|
|
12
|
-
let verbose = process.argv.includes("--verbose");
|
|
13
|
-
let disabled = false;
|
|
14
|
-
let hidden = false;
|
|
15
|
-
const formatMessages = (messages) =>
|
|
16
|
-
_chalk.default.reset(messages.join(SEPARATOR));
|
|
17
|
-
const success = (...messages) => {
|
|
18
|
-
if (!disabled) {
|
|
19
|
-
console.log(
|
|
20
|
-
`${_chalk.default.green.bold("success")} ${formatMessages(messages)}`
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const info = (...messages) => {
|
|
25
|
-
if (!disabled) {
|
|
26
|
-
console.log(
|
|
27
|
-
`${_chalk.default.cyan.bold("info")} ${formatMessages(messages)}`
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
const warn = (...messages) => {
|
|
32
|
-
if (!disabled) {
|
|
33
|
-
console.warn(
|
|
34
|
-
`${_chalk.default.yellow.bold("warn")} ${formatMessages(messages)}`
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const error = (...messages) => {
|
|
39
|
-
if (!disabled) {
|
|
40
|
-
console.error(
|
|
41
|
-
`${_chalk.default.red.bold("error")} ${formatMessages(messages)}`
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
const debug = (...messages) => {
|
|
46
|
-
if (verbose && !disabled) {
|
|
47
|
-
console.log(
|
|
48
|
-
`${_chalk.default.gray.bold("debug")} ${formatMessages(messages)}`
|
|
49
|
-
);
|
|
50
|
-
} else {
|
|
51
|
-
hidden = true;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
const log = (...messages) => {
|
|
55
|
-
if (!disabled) {
|
|
56
|
-
console.log(`${formatMessages(messages)}`);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const setVerbose = (level) => {
|
|
60
|
-
verbose = level;
|
|
61
|
-
};
|
|
62
|
-
const isVerbose = () => verbose;
|
|
63
|
-
const disable = () => {
|
|
64
|
-
disabled = true;
|
|
65
|
-
};
|
|
66
|
-
const enable = () => {
|
|
67
|
-
disabled = false;
|
|
68
|
-
};
|
|
69
|
-
const hasDebugMessages = () => hidden;
|
|
70
|
-
let communityLogger;
|
|
71
|
-
try {
|
|
72
|
-
const { logger } = require("@react-native-community/cli-tools");
|
|
73
|
-
logger.debug("Using @react-naive-community/cli-tools' logger");
|
|
74
|
-
communityLogger = logger;
|
|
75
|
-
} catch {}
|
|
76
|
-
const logger = (exports.logger = communityLogger ?? {
|
|
77
|
-
success,
|
|
78
|
-
info,
|
|
79
|
-
warn,
|
|
80
|
-
error,
|
|
81
|
-
debug,
|
|
82
|
-
log,
|
|
83
|
-
setVerbose,
|
|
84
|
-
isVerbose,
|
|
85
|
-
hasDebugMessages,
|
|
86
|
-
disable,
|
|
87
|
-
enable,
|
|
88
|
-
});
|
|
89
|
-
if (communityLogger == null) {
|
|
90
|
-
logger.debug("Using @react-native/communityu-cli-plugin's logger");
|
|
91
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
* @flow strict-local
|
|
8
|
-
* @format
|
|
9
|
-
* @oncall react_native
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
type Logger = $ReadOnly<{
|
|
13
|
-
debug: (...message: Array<string>) => void,
|
|
14
|
-
error: (...message: Array<string>) => void,
|
|
15
|
-
log: (...message: Array<string>) => void,
|
|
16
|
-
info: (...message: Array<string>) => void,
|
|
17
|
-
warn: (...message: Array<string>) => void,
|
|
18
|
-
...
|
|
19
|
-
}>;
|
|
20
|
-
|
|
21
|
-
declare export const logger: Logger;
|