@react-native/community-cli-plugin 0.76.0-rc.2 → 0.76.0-rc.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/dist/commands/start/OpenDebuggerKeyboardHandler.js +129 -0
- package/dist/commands/start/OpenDebuggerKeyboardHandler.js.flow +19 -0
- package/dist/commands/start/attachKeyHandlers.js +35 -11
- package/dist/commands/start/attachKeyHandlers.js.flow +2 -0
- package/dist/commands/start/runServer.js +9 -5
- package/dist/utils/createDevMiddlewareLogger.js +21 -0
- package/dist/utils/createDevMiddlewareLogger.js.flow +26 -0
- package/package.json +8 -7
- package/dist/utils/KeyPressHandler.js +0 -66
- package/dist/utils/KeyPressHandler.js.flow +0 -22
|
@@ -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,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
6
|
exports.default = attachKeyHandlers;
|
|
7
|
-
var _KeyPressHandler = require("../../utils/KeyPressHandler");
|
|
8
7
|
var _logger = require("../../utils/logger");
|
|
8
|
+
var _OpenDebuggerKeyboardHandler = _interopRequireDefault(
|
|
9
|
+
require("./OpenDebuggerKeyboardHandler")
|
|
10
|
+
);
|
|
9
11
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
10
12
|
var _execa = _interopRequireDefault(require("execa"));
|
|
11
|
-
var
|
|
13
|
+
var _invariant = _interopRequireDefault(require("invariant"));
|
|
14
|
+
var _readline = _interopRequireDefault(require("readline"));
|
|
15
|
+
var _tty = require("tty");
|
|
12
16
|
function _interopRequireDefault(e) {
|
|
13
17
|
return e && e.__esModule ? e : { default: e };
|
|
14
18
|
}
|
|
@@ -25,13 +29,20 @@ const throttle = (callback, timeout) => {
|
|
|
25
29
|
}
|
|
26
30
|
};
|
|
27
31
|
};
|
|
28
|
-
function attachKeyHandlers({
|
|
32
|
+
function attachKeyHandlers({
|
|
33
|
+
cliConfig,
|
|
34
|
+
devServerUrl,
|
|
35
|
+
messageSocket,
|
|
36
|
+
reporter,
|
|
37
|
+
}) {
|
|
29
38
|
if (process.stdin.isTTY !== true) {
|
|
30
39
|
_logger.logger.debug(
|
|
31
40
|
"Interactive mode is not supported in this environment"
|
|
32
41
|
);
|
|
33
42
|
return;
|
|
34
43
|
}
|
|
44
|
+
_readline.default.emitKeypressEvents(process.stdin);
|
|
45
|
+
setRawMode(true);
|
|
35
46
|
const execaOptions = {
|
|
36
47
|
env: {
|
|
37
48
|
FORCE_COLOR: _chalk.default.supportsColor ? "true" : "false",
|
|
@@ -41,8 +52,16 @@ function attachKeyHandlers({ cliConfig, devServerUrl, messageSocket }) {
|
|
|
41
52
|
_logger.logger.info("Reloading connected app(s)...");
|
|
42
53
|
messageSocket.broadcast("reload", null);
|
|
43
54
|
}, RELOAD_TIMEOUT);
|
|
44
|
-
const
|
|
45
|
-
|
|
55
|
+
const openDebuggerKeyboardHandler = new _OpenDebuggerKeyboardHandler.default({
|
|
56
|
+
reporter,
|
|
57
|
+
devServerUrl,
|
|
58
|
+
});
|
|
59
|
+
process.stdin.on("keypress", (str, key) => {
|
|
60
|
+
_logger.logger.debug(`Key pressed: ${key.sequence}`);
|
|
61
|
+
if (openDebuggerKeyboardHandler.maybeHandleTargetSelection(key.name)) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
switch (key.sequence) {
|
|
46
65
|
case "r":
|
|
47
66
|
reload();
|
|
48
67
|
break;
|
|
@@ -75,20 +94,18 @@ function attachKeyHandlers({ cliConfig, devServerUrl, messageSocket }) {
|
|
|
75
94
|
).stdout?.pipe(process.stdout);
|
|
76
95
|
break;
|
|
77
96
|
case "j":
|
|
78
|
-
|
|
79
|
-
method: "POST",
|
|
80
|
-
});
|
|
97
|
+
void openDebuggerKeyboardHandler.handleOpenDebugger();
|
|
81
98
|
break;
|
|
82
99
|
case CTRL_C:
|
|
83
100
|
case CTRL_D:
|
|
101
|
+
openDebuggerKeyboardHandler.dismiss();
|
|
84
102
|
_logger.logger.info("Stopping server");
|
|
85
|
-
|
|
103
|
+
setRawMode(false);
|
|
104
|
+
process.stdin.pause();
|
|
86
105
|
process.emit("SIGINT");
|
|
87
106
|
process.exit();
|
|
88
107
|
}
|
|
89
108
|
});
|
|
90
|
-
keyPressHandler.createInteractionListener();
|
|
91
|
-
keyPressHandler.startInterceptingKeyStrokes();
|
|
92
109
|
_logger.logger.log(
|
|
93
110
|
[
|
|
94
111
|
"",
|
|
@@ -101,3 +118,10 @@ function attachKeyHandlers({ cliConfig, devServerUrl, messageSocket }) {
|
|
|
101
118
|
].join("\n")
|
|
102
119
|
);
|
|
103
120
|
}
|
|
121
|
+
function setRawMode(enable) {
|
|
122
|
+
(0, _invariant.default)(
|
|
123
|
+
process.stdin instanceof _tty.ReadStream,
|
|
124
|
+
"process.stdin must be a readable stream to modify raw mode"
|
|
125
|
+
);
|
|
126
|
+
process.stdin.setRawMode(enable);
|
|
127
|
+
}
|
|
@@ -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,6 +4,9 @@ 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
|
);
|
|
@@ -93,6 +96,10 @@ async function runServer(_argv, ctx, args) {
|
|
|
93
96
|
require.resolve(plugin)
|
|
94
97
|
);
|
|
95
98
|
}
|
|
99
|
+
let reportEvent;
|
|
100
|
+
const terminal = new _metroCore.Terminal(process.stdout);
|
|
101
|
+
const ReporterImpl = getReporterImpl(args.customLogReporterPath);
|
|
102
|
+
const terminalReporter = new ReporterImpl(terminal);
|
|
96
103
|
const {
|
|
97
104
|
middleware: communityMiddleware,
|
|
98
105
|
websocketEndpoints: communityWebsocketEndpoints,
|
|
@@ -107,12 +114,8 @@ async function runServer(_argv, ctx, args) {
|
|
|
107
114
|
_devMiddleware.createDevMiddleware)({
|
|
108
115
|
projectRoot,
|
|
109
116
|
serverBaseUrl: devServerUrl,
|
|
110
|
-
logger:
|
|
117
|
+
logger: (0, _createDevMiddlewareLogger.default)(terminalReporter),
|
|
111
118
|
});
|
|
112
|
-
let reportEvent;
|
|
113
|
-
const terminal = new _metroCore.Terminal(process.stdout);
|
|
114
|
-
const ReporterImpl = getReporterImpl(args.customLogReporterPath);
|
|
115
|
-
const terminalReporter = new ReporterImpl(terminal);
|
|
116
119
|
metroConfig.reporter = {
|
|
117
120
|
update(event) {
|
|
118
121
|
terminalReporter.update(event);
|
|
@@ -125,6 +128,7 @@ async function runServer(_argv, ctx, args) {
|
|
|
125
128
|
cliConfig: ctx,
|
|
126
129
|
devServerUrl,
|
|
127
130
|
messageSocket: messageSocketEndpoint,
|
|
131
|
+
reporter: terminalReporter,
|
|
128
132
|
});
|
|
129
133
|
}
|
|
130
134
|
},
|
|
@@ -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
|
+
}>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native/community-cli-plugin",
|
|
3
|
-
"version": "0.76.0-rc.
|
|
3
|
+
"version": "0.76.0-rc.4",
|
|
4
4
|
"description": "Core CLI commands for React Native",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -22,18 +22,19 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-native/dev-middleware": "0.76.0-rc.
|
|
26
|
-
"@react-native/metro-babel-transformer": "0.76.0-rc.
|
|
25
|
+
"@react-native/dev-middleware": "0.76.0-rc.4",
|
|
26
|
+
"@react-native/metro-babel-transformer": "0.76.0-rc.4",
|
|
27
27
|
"chalk": "^4.0.0",
|
|
28
28
|
"execa": "^5.1.1",
|
|
29
|
-
"
|
|
30
|
-
"metro
|
|
31
|
-
"metro-
|
|
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
34
|
"readline": "^1.3.0"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
|
-
"metro-resolver": "^0.81.0-alpha.
|
|
37
|
+
"metro-resolver": "^0.81.0-alpha.2"
|
|
37
38
|
},
|
|
38
39
|
"peerDependencies": {
|
|
39
40
|
"@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
|
-
}
|