@teardown/cli 1.2.31 → 1.2.33
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/package.json +7 -4
- package/dist/commands/dev/dev.d.ts +0 -22
- package/dist/commands/dev/dev.js +0 -55
- package/dist/commands/init/init-teardown.d.ts +0 -9
- package/dist/commands/init/init-teardown.js +0 -26
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -20
- package/dist/modules/dev/dev-menu/keyboard-handler.d.ts +0 -21
- package/dist/modules/dev/dev-menu/keyboard-handler.js +0 -138
- package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.d.ts +0 -18
- package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.js +0 -105
- package/dist/modules/dev/dev-server/cdp/cdp.adapter.d.ts +0 -6
- package/dist/modules/dev/dev-server/cdp/cdp.adapter.js +0 -12
- package/dist/modules/dev/dev-server/cdp/index.d.ts +0 -2
- package/dist/modules/dev/dev-server/cdp/index.js +0 -18
- package/dist/modules/dev/dev-server/cdp/types.d.ts +0 -107
- package/dist/modules/dev/dev-server/cdp/types.js +0 -2
- package/dist/modules/dev/dev-server/dev-server-checker.d.ts +0 -22
- package/dist/modules/dev/dev-server/dev-server-checker.js +0 -72
- package/dist/modules/dev/dev-server/dev-server.d.ts +0 -74
- package/dist/modules/dev/dev-server/dev-server.js +0 -269
- package/dist/modules/dev/dev-server/inspector/device.d.ts +0 -46
- package/dist/modules/dev/dev-server/inspector/device.event-reporter.d.ts +0 -37
- package/dist/modules/dev/dev-server/inspector/device.event-reporter.js +0 -165
- package/dist/modules/dev/dev-server/inspector/device.js +0 -577
- package/dist/modules/dev/dev-server/inspector/inspector.d.ts +0 -27
- package/dist/modules/dev/dev-server/inspector/inspector.js +0 -204
- package/dist/modules/dev/dev-server/inspector/types.d.ts +0 -156
- package/dist/modules/dev/dev-server/inspector/types.js +0 -2
- package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.d.ts +0 -14
- package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.js +0 -61
- package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.d.ts +0 -19
- package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.js +0 -64
- package/dist/modules/dev/dev-server/plugins/devtools.plugin.d.ts +0 -10
- package/dist/modules/dev/dev-server/plugins/devtools.plugin.js +0 -50
- package/dist/modules/dev/dev-server/plugins/favicon.plugin.d.ts +0 -1
- package/dist/modules/dev/dev-server/plugins/favicon.plugin.js +0 -19
- package/dist/modules/dev/dev-server/plugins/multipart.plugin.d.ts +0 -1
- package/dist/modules/dev/dev-server/plugins/multipart.plugin.js +0 -62
- package/dist/modules/dev/dev-server/plugins/systrace.plugin.d.ts +0 -1
- package/dist/modules/dev/dev-server/plugins/systrace.plugin.js +0 -28
- package/dist/modules/dev/dev-server/plugins/types.d.ts +0 -11
- package/dist/modules/dev/dev-server/plugins/types.js +0 -2
- package/dist/modules/dev/dev-server/plugins/wss/index.d.ts +0 -3
- package/dist/modules/dev/dev-server/plugins/wss/index.js +0 -19
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.d.ts +0 -37
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.js +0 -66
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.d.ts +0 -63
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.js +0 -128
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.d.ts +0 -32
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.js +0 -75
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.d.ts +0 -75
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.js +0 -198
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.d.ts +0 -44
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.js +0 -120
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.d.ts +0 -139
- package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.js +0 -357
- package/dist/modules/dev/dev-server/plugins/wss/types.d.ts +0 -6
- package/dist/modules/dev/dev-server/plugins/wss/types.js +0 -2
- package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.d.ts +0 -32
- package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.js +0 -57
- package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.d.ts +0 -13
- package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.js +0 -26
- package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.d.ts +0 -39
- package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.js +0 -46
- package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.d.ts +0 -47
- package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.js +0 -55
- package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.d.ts +0 -14
- package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.js +0 -36
- package/dist/modules/dev/dev-server/sybmolicate/types.d.ts +0 -64
- package/dist/modules/dev/dev-server/sybmolicate/types.js +0 -2
- package/dist/modules/dev/terminal/base.terminal.reporter.d.ts +0 -25
- package/dist/modules/dev/terminal/base.terminal.reporter.js +0 -78
- package/dist/modules/dev/terminal/terminal.reporter.d.ts +0 -14
- package/dist/modules/dev/terminal/terminal.reporter.js +0 -76
- package/dist/modules/dev/types.d.ts +0 -20
- package/dist/modules/dev/types.js +0 -2
- package/dist/modules/dev/utils/log.d.ts +0 -23
- package/dist/modules/dev/utils/log.js +0 -73
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DevServerChecker = exports.DevServerStatusEnum = exports.DevServerStatusResultEnum = void 0;
|
|
7
|
-
const bun_1 = require("bun");
|
|
8
|
-
const node_net_1 = __importDefault(require("node:net"));
|
|
9
|
-
var DevServerStatusResultEnum;
|
|
10
|
-
(function (DevServerStatusResultEnum) {
|
|
11
|
-
DevServerStatusResultEnum["PACKAGER_STATUS_RUNNING"] = "packager-status:running";
|
|
12
|
-
})(DevServerStatusResultEnum || (exports.DevServerStatusResultEnum = DevServerStatusResultEnum = {}));
|
|
13
|
-
var DevServerStatusEnum;
|
|
14
|
-
(function (DevServerStatusEnum) {
|
|
15
|
-
DevServerStatusEnum["NOT_RUNNING"] = "not_running";
|
|
16
|
-
DevServerStatusEnum["MATCHED_SERVER_RUNNING"] = "matched_server_running";
|
|
17
|
-
DevServerStatusEnum["PORT_TAKEN"] = "port_taken";
|
|
18
|
-
DevServerStatusEnum["UNKNOWN"] = "unknown";
|
|
19
|
-
})(DevServerStatusEnum || (exports.DevServerStatusEnum = DevServerStatusEnum = {}));
|
|
20
|
-
class DevServerChecker {
|
|
21
|
-
options;
|
|
22
|
-
constructor(options) {
|
|
23
|
-
this.options = options;
|
|
24
|
-
}
|
|
25
|
-
getUrl() {
|
|
26
|
-
const devServerStatusPath = this.options.devServerStatusPath ?? "/status";
|
|
27
|
-
return `${this.options.host}:${this.options.port}${devServerStatusPath}`;
|
|
28
|
-
}
|
|
29
|
-
async getServerStatus() {
|
|
30
|
-
try {
|
|
31
|
-
if (!(await this.isPortInUse(this.options.host, this.options.port))) {
|
|
32
|
-
return DevServerStatusEnum.NOT_RUNNING;
|
|
33
|
-
}
|
|
34
|
-
const statusResponse = await (0, bun_1.fetch)(this.getUrl());
|
|
35
|
-
const body = await statusResponse.text();
|
|
36
|
-
if (body !== DevServerStatusResultEnum.PACKAGER_STATUS_RUNNING) {
|
|
37
|
-
return DevServerStatusEnum.PORT_TAKEN;
|
|
38
|
-
}
|
|
39
|
-
const projectRoot = statusResponse.headers.get("X-React-Native-Project-Root");
|
|
40
|
-
if (projectRoot !== this.options.projectRoot) {
|
|
41
|
-
return DevServerStatusEnum.PORT_TAKEN;
|
|
42
|
-
}
|
|
43
|
-
return DevServerStatusEnum.MATCHED_SERVER_RUNNING;
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
console.error(error);
|
|
47
|
-
return DevServerStatusEnum.UNKNOWN;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async isPortInUse(hostname, port) {
|
|
51
|
-
return new Promise((resolve) => {
|
|
52
|
-
const server = node_net_1.default.createServer();
|
|
53
|
-
server.once("error", (e) => {
|
|
54
|
-
console.log("Server error:", e);
|
|
55
|
-
server.close();
|
|
56
|
-
if (e.code === "EADDRINUSE") {
|
|
57
|
-
resolve(true);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
// For any other errors, assume port is not in use
|
|
61
|
-
resolve(false);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
server.once("listening", () => {
|
|
65
|
-
server.close();
|
|
66
|
-
resolve(false);
|
|
67
|
-
});
|
|
68
|
-
server.listen(port, hostname);
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
exports.DevServerChecker = DevServerChecker;
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { type FastifyInstance } from "fastify";
|
|
2
|
-
import type { TerminalReportableEvent } from "metro/src/lib/TerminalReporter";
|
|
3
|
-
import { KeyboardHandlerManager } from "../dev-menu/keyboard-handler";
|
|
4
|
-
import { TeardownTerminalReporter } from "../terminal/terminal.reporter";
|
|
5
|
-
import { Inspector } from "./inspector/inspector";
|
|
6
|
-
import { WebSocketApiServer } from "./plugins/wss/servers/web-socket-api.server";
|
|
7
|
-
import { WebSocketEventsServer } from "./plugins/wss/servers/web-socket-events.server";
|
|
8
|
-
import { WebSocketMessageServer } from "./plugins/wss/servers/web-socket-message.server";
|
|
9
|
-
export type DevServerOptions = {
|
|
10
|
-
projectRoot: string;
|
|
11
|
-
host: string;
|
|
12
|
-
port: number;
|
|
13
|
-
logRequests: boolean;
|
|
14
|
-
https?: {
|
|
15
|
-
key: string;
|
|
16
|
-
cert: string;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
export declare class DevServer {
|
|
20
|
-
readonly config: DevServerOptions;
|
|
21
|
-
terminalReporter: TeardownTerminalReporter;
|
|
22
|
-
private stream;
|
|
23
|
-
private instance;
|
|
24
|
-
apiServer: WebSocketApiServer;
|
|
25
|
-
messageServer: WebSocketMessageServer;
|
|
26
|
-
eventsServer: WebSocketEventsServer;
|
|
27
|
-
keyboardHandler: KeyboardHandlerManager;
|
|
28
|
-
inspector: Inspector;
|
|
29
|
-
constructor(config: DevServerOptions);
|
|
30
|
-
onWrite(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): Promise<void>;
|
|
31
|
-
getDevServerUrl(): string;
|
|
32
|
-
onInitializeDone(): void;
|
|
33
|
-
reportMetroEvent(event: TerminalReportableEvent): void;
|
|
34
|
-
private onBundleBuilt;
|
|
35
|
-
private onClientConnected;
|
|
36
|
-
private loadMetroConfig;
|
|
37
|
-
private _metroConfig;
|
|
38
|
-
private getMetroConfig;
|
|
39
|
-
private registerPlugins;
|
|
40
|
-
private onSymbolicate;
|
|
41
|
-
private registerHooks;
|
|
42
|
-
private registerRoutes;
|
|
43
|
-
initialize(): Promise<void>;
|
|
44
|
-
start(): Promise<void>;
|
|
45
|
-
stop(): Promise<void>;
|
|
46
|
-
getInstance(): FastifyInstance;
|
|
47
|
-
}
|
|
48
|
-
type Log = {
|
|
49
|
-
level: number;
|
|
50
|
-
time: number;
|
|
51
|
-
pid: number;
|
|
52
|
-
hostname: string;
|
|
53
|
-
msg: string;
|
|
54
|
-
} & Record<string, any>;
|
|
55
|
-
export interface Reporter {
|
|
56
|
-
process(log: LogEntry): void;
|
|
57
|
-
flush(): void;
|
|
58
|
-
stop(): void;
|
|
59
|
-
}
|
|
60
|
-
/** Log message type. */
|
|
61
|
-
export type LogType = "debug" | "info" | "warn" | "error" | "success" | "progress";
|
|
62
|
-
/**
|
|
63
|
-
* Represent log message with all necessary data.
|
|
64
|
-
*
|
|
65
|
-
* @internal
|
|
66
|
-
*/
|
|
67
|
-
export interface LogEntry {
|
|
68
|
-
timestamp: number;
|
|
69
|
-
type: LogType;
|
|
70
|
-
issuer: string;
|
|
71
|
-
message: Array<string | number | boolean | Object>;
|
|
72
|
-
}
|
|
73
|
-
export declare function makeLogEntryFromFastifyLog(data: Log): LogEntry;
|
|
74
|
-
export {};
|
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DevServer = void 0;
|
|
7
|
-
exports.makeLogEntryFromFastifyLog = makeLogEntryFromFastifyLog;
|
|
8
|
-
const compress_1 = __importDefault(require("@fastify/compress"));
|
|
9
|
-
const cors_1 = __importDefault(require("@fastify/cors"));
|
|
10
|
-
const middie_1 = __importDefault(require("@fastify/middie"));
|
|
11
|
-
const sensible_1 = __importDefault(require("@fastify/sensible"));
|
|
12
|
-
const cli_server_api_1 = require("@react-native-community/cli-server-api");
|
|
13
|
-
const metro_config_1 = require("@react-native/metro-config");
|
|
14
|
-
const fastify_1 = __importDefault(require("fastify"));
|
|
15
|
-
const metro_1 = __importDefault(require("metro"));
|
|
16
|
-
const node_stream_1 = require("node:stream");
|
|
17
|
-
const keyboard_handler_1 = require("../dev-menu/keyboard-handler");
|
|
18
|
-
const terminal_reporter_1 = require("../terminal/terminal.reporter");
|
|
19
|
-
const inspector_1 = require("./inspector/inspector");
|
|
20
|
-
const devtools_plugin_1 = require("./plugins/devtools.plugin");
|
|
21
|
-
const favicon_plugin_1 = require("./plugins/favicon.plugin");
|
|
22
|
-
const multipart_plugin_1 = require("./plugins/multipart.plugin");
|
|
23
|
-
const systrace_plugin_1 = require("./plugins/systrace.plugin");
|
|
24
|
-
const wss_1 = require("./plugins/wss");
|
|
25
|
-
const web_socket_api_server_1 = require("./plugins/wss/servers/web-socket-api.server");
|
|
26
|
-
const web_socket_events_server_1 = require("./plugins/wss/servers/web-socket-events.server");
|
|
27
|
-
const web_socket_message_server_1 = require("./plugins/wss/servers/web-socket-message.server");
|
|
28
|
-
const sybmolicate_plugin_1 = require("./sybmolicate/sybmolicate.plugin");
|
|
29
|
-
class DevServer {
|
|
30
|
-
config;
|
|
31
|
-
terminalReporter;
|
|
32
|
-
stream;
|
|
33
|
-
instance;
|
|
34
|
-
apiServer;
|
|
35
|
-
messageServer;
|
|
36
|
-
eventsServer;
|
|
37
|
-
keyboardHandler;
|
|
38
|
-
inspector;
|
|
39
|
-
constructor(config) {
|
|
40
|
-
this.config = config;
|
|
41
|
-
this.terminalReporter = new terminal_reporter_1.TeardownTerminalReporter(this);
|
|
42
|
-
this.stream = new node_stream_1.Writable({
|
|
43
|
-
write: this.onWrite.bind(this),
|
|
44
|
-
});
|
|
45
|
-
this.instance = (0, fastify_1.default)({
|
|
46
|
-
// disableRequestLogging: true,
|
|
47
|
-
logger: {
|
|
48
|
-
level: "trace",
|
|
49
|
-
stream: this.stream,
|
|
50
|
-
},
|
|
51
|
-
...(config.https ? { https: config.https } : undefined),
|
|
52
|
-
});
|
|
53
|
-
this.apiServer = new web_socket_api_server_1.WebSocketApiServer(this.instance);
|
|
54
|
-
this.messageServer = new web_socket_message_server_1.WebSocketMessageServer(this.instance);
|
|
55
|
-
this.eventsServer = new web_socket_events_server_1.WebSocketEventsServer(this.instance, {
|
|
56
|
-
webSocketMessageServer: this.messageServer,
|
|
57
|
-
});
|
|
58
|
-
this.keyboardHandler = new keyboard_handler_1.KeyboardHandlerManager(this);
|
|
59
|
-
this.inspector = new inspector_1.Inspector({
|
|
60
|
-
projectRoot: this.config.projectRoot,
|
|
61
|
-
serverBaseUrl: this.getDevServerUrl(),
|
|
62
|
-
// eventReporter: this.terminalReporter,
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
async onWrite(chunk, encoding, callback) {
|
|
66
|
-
if (chunk == null) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const log = JSON.parse(chunk.toString());
|
|
70
|
-
this.apiServer.send(log);
|
|
71
|
-
callback();
|
|
72
|
-
}
|
|
73
|
-
getDevServerUrl() {
|
|
74
|
-
const https = this.config.https ? "https" : "http";
|
|
75
|
-
return `${https}://${this.config.host}:${this.config.port}`;
|
|
76
|
-
}
|
|
77
|
-
onInitializeDone() {
|
|
78
|
-
this.keyboardHandler.initialize();
|
|
79
|
-
}
|
|
80
|
-
reportMetroEvent(event) {
|
|
81
|
-
this.apiServer.send({
|
|
82
|
-
type: "metro_event",
|
|
83
|
-
event,
|
|
84
|
-
});
|
|
85
|
-
switch (event.type) {
|
|
86
|
-
case "client_log":
|
|
87
|
-
this.eventsServer.broadcastEvent(event);
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
onBundleBuilt(bundlePath) {
|
|
92
|
-
// console.log("onBundleBuilt", bundlePath);
|
|
93
|
-
// this.messageServer.broadcast("reload");
|
|
94
|
-
}
|
|
95
|
-
onClientConnected(platform, clientId) {
|
|
96
|
-
// this.messageServer.broadcast("reload", undefined, []);
|
|
97
|
-
// this.instance.wss.router.onClientConnected(platform, clientId);
|
|
98
|
-
// this.onMessage({
|
|
99
|
-
// level: 30,
|
|
100
|
-
// time: Date.now(),
|
|
101
|
-
// pid: 1,
|
|
102
|
-
// hostname: "localhost",
|
|
103
|
-
// });
|
|
104
|
-
}
|
|
105
|
-
async loadMetroConfig() {
|
|
106
|
-
const config = await metro_1.default.loadConfig({
|
|
107
|
-
cwd: this.config.projectRoot,
|
|
108
|
-
...this.config,
|
|
109
|
-
});
|
|
110
|
-
const reactNativeConfig = (0, metro_config_1.getDefaultConfig)(this.config.projectRoot);
|
|
111
|
-
return (0, metro_config_1.mergeConfig)(reactNativeConfig, config);
|
|
112
|
-
}
|
|
113
|
-
_metroConfig = null;
|
|
114
|
-
async getMetroConfig() {
|
|
115
|
-
if (!this._metroConfig) {
|
|
116
|
-
this._metroConfig = await this.loadMetroConfig();
|
|
117
|
-
}
|
|
118
|
-
return (0, metro_config_1.mergeConfig)(this._metroConfig, {
|
|
119
|
-
reporter: this.terminalReporter,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
async registerPlugins() {
|
|
123
|
-
const metroConfig = await this.getMetroConfig();
|
|
124
|
-
const serverInstance = await metro_1.default.createConnectMiddleware(metroConfig, {
|
|
125
|
-
watch: true,
|
|
126
|
-
onBundleBuilt: this.onBundleBuilt.bind(this),
|
|
127
|
-
});
|
|
128
|
-
const websockets = this.inspector.createWebSocketServers();
|
|
129
|
-
// const devMiddleware = createDevMiddleware({
|
|
130
|
-
// projectRoot: this.config.projectRoot,
|
|
131
|
-
// serverBaseUrl: `http://${this.config.host}:${this.config.port}`,
|
|
132
|
-
// logger: this.instance.log,
|
|
133
|
-
// unstable_customInspectorMessageHandler:
|
|
134
|
-
// this.customInspectorMessageHandler.bind(this),
|
|
135
|
-
// unstable_experiments: {
|
|
136
|
-
// enableNetworkInspector: true,
|
|
137
|
-
// },
|
|
138
|
-
// });
|
|
139
|
-
// const debuggerConnectionServer = new DebuggerConnectionServer({
|
|
140
|
-
// devices: this.devices,
|
|
141
|
-
// eventReporter: this.eventReporter,
|
|
142
|
-
// startHeartbeat: this.startHeartbeat,
|
|
143
|
-
// });
|
|
144
|
-
// const deviceConnectionServer = new DeviceConnectionServer(this.instance);
|
|
145
|
-
await this.instance.register(cors_1.default, {
|
|
146
|
-
origin: "*",
|
|
147
|
-
// "localhost",
|
|
148
|
-
// "localhost:8081",
|
|
149
|
-
// "127.0.0.1",
|
|
150
|
-
// "127.0.0.1:8081",
|
|
151
|
-
// /localhost:\d+/,
|
|
152
|
-
// /127\.0\.0\.1:\d+/,
|
|
153
|
-
// ],
|
|
154
|
-
// methods: ["GET", "PUT", "POST", "DELETE", "OPTIONS"],
|
|
155
|
-
// allowedHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
|
|
156
|
-
// credentials: true,
|
|
157
|
-
// maxAge: 86400,
|
|
158
|
-
// preflight: true,
|
|
159
|
-
preflightContinue: true,
|
|
160
|
-
});
|
|
161
|
-
await this.instance.register(compress_1.default);
|
|
162
|
-
await this.instance.register(sensible_1.default);
|
|
163
|
-
await this.instance.register(middie_1.default);
|
|
164
|
-
await this.instance.register(wss_1.wssPlugin, {
|
|
165
|
-
metroConfig,
|
|
166
|
-
metroServer: serverInstance.metroServer,
|
|
167
|
-
onClientConnected: this.onClientConnected.bind(this),
|
|
168
|
-
messageServer: this.messageServer,
|
|
169
|
-
eventsServer: this.eventsServer,
|
|
170
|
-
apiServer: this.apiServer,
|
|
171
|
-
endpoints: {
|
|
172
|
-
"/inspector/debug": websockets["/inspector/debug"],
|
|
173
|
-
"/inspector/device": websockets["/inspector/device"],
|
|
174
|
-
"/inspector/network": websockets["/inspector/debug"],
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
await this.instance.register(multipart_plugin_1.multipartPlugin);
|
|
178
|
-
await this.instance.register(devtools_plugin_1.devtoolsPlugin, {
|
|
179
|
-
host: this.config.host,
|
|
180
|
-
port: this.config.port,
|
|
181
|
-
https: this.config.https,
|
|
182
|
-
});
|
|
183
|
-
await this.instance.register(sybmolicate_plugin_1.symbolicatePlugin, {
|
|
184
|
-
onSymbolicate: this.onSymbolicate.bind(this),
|
|
185
|
-
});
|
|
186
|
-
await this.instance.register(systrace_plugin_1.systracePlugin);
|
|
187
|
-
await this.instance.register(favicon_plugin_1.faviconPlugin);
|
|
188
|
-
// Register middleware
|
|
189
|
-
this.instance.use("/open-url", cli_server_api_1.openURLMiddleware);
|
|
190
|
-
this.instance.use("/open-stack-frame", (0, cli_server_api_1.openStackFrameInEditorMiddleware)({
|
|
191
|
-
watchFolders: [this.config.projectRoot],
|
|
192
|
-
}));
|
|
193
|
-
this.instance.use(serverInstance.metroServer.processRequest);
|
|
194
|
-
this.instance.use((req, resp, next) => this.inspector.handleHttpRequest(req, resp, next));
|
|
195
|
-
}
|
|
196
|
-
onSymbolicate(request, reply) {
|
|
197
|
-
const result = JSON.parse(request.rawBody);
|
|
198
|
-
const { codeFrame, stack } = result;
|
|
199
|
-
this.instance.log.info("onSymbolicate", { codeFrame, stack });
|
|
200
|
-
}
|
|
201
|
-
registerHooks() {
|
|
202
|
-
this.instance.log.info("Registering hooks");
|
|
203
|
-
this.instance = this.instance.addHook("onSend", async (request, reply, payload) => {
|
|
204
|
-
reply.header("X-Content-Type-Options", "nosniff");
|
|
205
|
-
reply.header("X-React-Native-Project-Root", this.config.projectRoot);
|
|
206
|
-
const [pathname] = request.url.split("?");
|
|
207
|
-
if (pathname.endsWith(".map")) {
|
|
208
|
-
reply.header("Access-Control-Allow-Origin", "devtools://devtools");
|
|
209
|
-
}
|
|
210
|
-
return payload;
|
|
211
|
-
});
|
|
212
|
-
this.instance.log.info("Hooks registered");
|
|
213
|
-
}
|
|
214
|
-
registerRoutes() {
|
|
215
|
-
this.instance.log.info("Registering routes");
|
|
216
|
-
this.instance.get("/", async () => "React Native packager is running");
|
|
217
|
-
this.instance.get("/status", async () => "packager-status:running");
|
|
218
|
-
this.instance.log.info("Routes registered");
|
|
219
|
-
}
|
|
220
|
-
async initialize() {
|
|
221
|
-
this.instance.log.info("Initializing dev server");
|
|
222
|
-
await this.registerPlugins();
|
|
223
|
-
this.registerHooks();
|
|
224
|
-
this.registerRoutes();
|
|
225
|
-
this.instance.log.info("Dev server initialized");
|
|
226
|
-
}
|
|
227
|
-
async start() {
|
|
228
|
-
this.instance.log.info("Starting dev server", this.config);
|
|
229
|
-
await this.instance.listen({
|
|
230
|
-
port: this.config.port,
|
|
231
|
-
host: this.config.host,
|
|
232
|
-
});
|
|
233
|
-
this.instance.log.info("Dev server started", this.instance.server.address());
|
|
234
|
-
}
|
|
235
|
-
async stop() {
|
|
236
|
-
this.instance.log.info("Stopping dev server");
|
|
237
|
-
await this.instance.close();
|
|
238
|
-
this.instance.log.info("Dev server stopped");
|
|
239
|
-
}
|
|
240
|
-
getInstance() {
|
|
241
|
-
return this.instance;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
exports.DevServer = DevServer;
|
|
245
|
-
const levelToTypeMapping = {
|
|
246
|
-
10: "debug",
|
|
247
|
-
20: "debug",
|
|
248
|
-
30: "info",
|
|
249
|
-
40: "warn",
|
|
250
|
-
50: "error",
|
|
251
|
-
60: "error",
|
|
252
|
-
};
|
|
253
|
-
function makeLogEntryFromFastifyLog(data) {
|
|
254
|
-
const { level, time, pid, hostname, ...rest } = data;
|
|
255
|
-
const levelToTypeMapping = {
|
|
256
|
-
10: "debug",
|
|
257
|
-
20: "debug",
|
|
258
|
-
30: "info",
|
|
259
|
-
40: "warn",
|
|
260
|
-
50: "error",
|
|
261
|
-
60: "error",
|
|
262
|
-
};
|
|
263
|
-
return {
|
|
264
|
-
type: levelToTypeMapping[level] ?? "log",
|
|
265
|
-
timestamp: time,
|
|
266
|
-
issuer: "",
|
|
267
|
-
message: [rest],
|
|
268
|
-
};
|
|
269
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import WS from "ws";
|
|
2
|
-
import type { EventReporter, Page } from "./types";
|
|
3
|
-
export declare class Device {
|
|
4
|
-
private id;
|
|
5
|
-
private name;
|
|
6
|
-
private app;
|
|
7
|
-
private messageFromDeviceQueue;
|
|
8
|
-
private deviceSocket;
|
|
9
|
-
private pages;
|
|
10
|
-
private debuggerConnection;
|
|
11
|
-
private lastConnectedLegacyReactNativePage;
|
|
12
|
-
private isLegacyPageReloading;
|
|
13
|
-
private lastGetPagesMessage;
|
|
14
|
-
private scriptIdToSourcePathMapping;
|
|
15
|
-
private projectRoot;
|
|
16
|
-
private deviceEventReporter;
|
|
17
|
-
private pagesPollingIntervalId;
|
|
18
|
-
private createCustomMessageHandler;
|
|
19
|
-
private connectedPageIds;
|
|
20
|
-
constructor(id: string, name: string, app: string, socket: WS, projectRoot: string, eventReporter?: EventReporter);
|
|
21
|
-
private terminateDebuggerConnection;
|
|
22
|
-
dangerouslyRecreateDevice(id: string, name: string, app: string, socket: WS, projectRoot: string, eventReporter?: EventReporter): void;
|
|
23
|
-
getName(): string;
|
|
24
|
-
getApp(): string;
|
|
25
|
-
getPagesList(): Page[];
|
|
26
|
-
handleDebuggerConnection(socket: WS, pageId: string, metadata: {
|
|
27
|
-
userAgent: string | null;
|
|
28
|
-
}): void;
|
|
29
|
-
private sendConnectEventToDevice;
|
|
30
|
-
private sendDisconnectEventToDevice;
|
|
31
|
-
private pageHasCapability;
|
|
32
|
-
private createSyntheticPage;
|
|
33
|
-
private handleMessageFromDevice;
|
|
34
|
-
private sendMessageToDevice;
|
|
35
|
-
private newLegacyReactNativePage;
|
|
36
|
-
private processMessageFromDeviceLegacy;
|
|
37
|
-
private interceptClientMessageForSourceFetching;
|
|
38
|
-
private processDebuggerSetBreakpointByUrl;
|
|
39
|
-
private processDebuggerGetScriptSource;
|
|
40
|
-
private mapToDevicePageId;
|
|
41
|
-
private tryParseHTTPURL;
|
|
42
|
-
private fetchText;
|
|
43
|
-
private sendErrorToDebugger;
|
|
44
|
-
private isPageFuseboxFrontend;
|
|
45
|
-
dangerouslyGetSocket(): WS;
|
|
46
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { EventReporter } from "./types";
|
|
2
|
-
export type RequestMetadata = {
|
|
3
|
-
pageId: string | null;
|
|
4
|
-
frontendUserAgent: string | null;
|
|
5
|
-
prefersFuseboxFrontend: boolean | null;
|
|
6
|
-
};
|
|
7
|
-
export type ResponseMetadata = RequestMetadata;
|
|
8
|
-
export type DeviceMetadata = {
|
|
9
|
-
appId: string;
|
|
10
|
-
deviceId: string;
|
|
11
|
-
deviceName: string;
|
|
12
|
-
};
|
|
13
|
-
export declare class DeviceEventReporter {
|
|
14
|
-
private eventReporter;
|
|
15
|
-
private metadata;
|
|
16
|
-
private pendingCommands;
|
|
17
|
-
constructor(eventReporter: EventReporter, metadata: DeviceMetadata);
|
|
18
|
-
logRequest(req: {
|
|
19
|
-
id: number;
|
|
20
|
-
method: string;
|
|
21
|
-
[key: string]: unknown;
|
|
22
|
-
}, origin: "debugger" | "proxy", metadata: RequestMetadata): void;
|
|
23
|
-
logResponse(res: {
|
|
24
|
-
id: number;
|
|
25
|
-
error?: {
|
|
26
|
-
message: string;
|
|
27
|
-
data?: unknown;
|
|
28
|
-
};
|
|
29
|
-
}, origin: "device" | "proxy", metadata: ResponseMetadata): void;
|
|
30
|
-
logConnection(connectedEntity: "debugger", metadata: {
|
|
31
|
-
pageId: string;
|
|
32
|
-
frontendUserAgent: string | null;
|
|
33
|
-
}): void;
|
|
34
|
-
logDisconnection(disconnectedEntity: "device" | "debugger"): void;
|
|
35
|
-
logProxyMessageHandlingError(messageOrigin: "device" | "debugger", error: Error, message: string): void;
|
|
36
|
-
private logExpiredCommand;
|
|
37
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DeviceEventReporter = void 0;
|
|
7
|
-
const ttlcache_1 = __importDefault(require("@isaacs/ttlcache"));
|
|
8
|
-
class DeviceEventReporter {
|
|
9
|
-
eventReporter;
|
|
10
|
-
metadata;
|
|
11
|
-
pendingCommands;
|
|
12
|
-
constructor(eventReporter, metadata) {
|
|
13
|
-
this.eventReporter = eventReporter;
|
|
14
|
-
this.metadata = metadata;
|
|
15
|
-
this.pendingCommands = new ttlcache_1.default({
|
|
16
|
-
ttl: 10000,
|
|
17
|
-
dispose: (command, id, reason) => {
|
|
18
|
-
if (reason === "delete" || reason === "set") {
|
|
19
|
-
// TODO: Report clobbering ('set') using a dedicated error code
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
this.logExpiredCommand(command);
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
logRequest(req, origin, metadata) {
|
|
27
|
-
this.pendingCommands.set(req.id, {
|
|
28
|
-
method: req.method,
|
|
29
|
-
requestOrigin: origin,
|
|
30
|
-
requestTime: Date.now(),
|
|
31
|
-
metadata,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
logResponse(res, origin, metadata) {
|
|
35
|
-
const pendingCommand = this.pendingCommands.get(res.id);
|
|
36
|
-
if (!pendingCommand) {
|
|
37
|
-
this.eventReporter.logEvent({
|
|
38
|
-
type: "debugger_command",
|
|
39
|
-
protocol: "CDP",
|
|
40
|
-
requestOrigin: null,
|
|
41
|
-
method: null,
|
|
42
|
-
status: "coded_error",
|
|
43
|
-
errorCode: "UNMATCHED_REQUEST_ID",
|
|
44
|
-
responseOrigin: origin,
|
|
45
|
-
timeSinceStart: null,
|
|
46
|
-
appId: this.metadata.appId,
|
|
47
|
-
deviceId: this.metadata.deviceId,
|
|
48
|
-
deviceName: this.metadata.deviceName,
|
|
49
|
-
pageId: metadata.pageId,
|
|
50
|
-
frontendUserAgent: metadata.frontendUserAgent,
|
|
51
|
-
prefersFuseboxFrontend: metadata.prefersFuseboxFrontend,
|
|
52
|
-
});
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const timeSinceStart = Date.now() - pendingCommand.requestTime;
|
|
56
|
-
this.pendingCommands.delete(res.id);
|
|
57
|
-
if (res.error) {
|
|
58
|
-
let message = res.error.message;
|
|
59
|
-
if ("data" in res.error) {
|
|
60
|
-
message += ` (${String(res.error.data)})`;
|
|
61
|
-
}
|
|
62
|
-
this.eventReporter.logEvent({
|
|
63
|
-
type: "debugger_command",
|
|
64
|
-
requestOrigin: pendingCommand.requestOrigin,
|
|
65
|
-
method: pendingCommand.method,
|
|
66
|
-
protocol: "CDP",
|
|
67
|
-
status: "coded_error",
|
|
68
|
-
errorCode: "PROTOCOL_ERROR",
|
|
69
|
-
errorDetails: message,
|
|
70
|
-
responseOrigin: origin,
|
|
71
|
-
timeSinceStart,
|
|
72
|
-
appId: this.metadata.appId,
|
|
73
|
-
deviceId: this.metadata.deviceId,
|
|
74
|
-
deviceName: this.metadata.deviceName,
|
|
75
|
-
pageId: pendingCommand.metadata.pageId,
|
|
76
|
-
frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
|
|
77
|
-
prefersFuseboxFrontend: metadata.prefersFuseboxFrontend,
|
|
78
|
-
});
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
this.eventReporter.logEvent({
|
|
82
|
-
type: "debugger_command",
|
|
83
|
-
protocol: "CDP",
|
|
84
|
-
requestOrigin: pendingCommand.requestOrigin,
|
|
85
|
-
method: pendingCommand.method,
|
|
86
|
-
status: "success",
|
|
87
|
-
responseOrigin: origin,
|
|
88
|
-
timeSinceStart,
|
|
89
|
-
appId: this.metadata.appId,
|
|
90
|
-
deviceId: this.metadata.deviceId,
|
|
91
|
-
deviceName: this.metadata.deviceName,
|
|
92
|
-
pageId: pendingCommand.metadata.pageId,
|
|
93
|
-
frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
|
|
94
|
-
prefersFuseboxFrontend: metadata.prefersFuseboxFrontend,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
logConnection(connectedEntity, metadata) {
|
|
98
|
-
this.eventReporter.logEvent({
|
|
99
|
-
type: "connect_debugger_frontend",
|
|
100
|
-
status: "success",
|
|
101
|
-
appId: this.metadata.appId,
|
|
102
|
-
deviceName: this.metadata.deviceName,
|
|
103
|
-
deviceId: this.metadata.deviceId,
|
|
104
|
-
pageId: metadata.pageId,
|
|
105
|
-
frontendUserAgent: metadata.frontendUserAgent,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
logDisconnection(disconnectedEntity) {
|
|
109
|
-
const errorCode = disconnectedEntity === "device"
|
|
110
|
-
? "DEVICE_DISCONNECTED"
|
|
111
|
-
: "DEBUGGER_DISCONNECTED";
|
|
112
|
-
for (const pendingCommand of this.pendingCommands.values()) {
|
|
113
|
-
this.eventReporter.logEvent({
|
|
114
|
-
type: "debugger_command",
|
|
115
|
-
protocol: "CDP",
|
|
116
|
-
requestOrigin: pendingCommand.requestOrigin,
|
|
117
|
-
method: pendingCommand.method,
|
|
118
|
-
status: "coded_error",
|
|
119
|
-
errorCode,
|
|
120
|
-
responseOrigin: "proxy",
|
|
121
|
-
timeSinceStart: Date.now() - pendingCommand.requestTime,
|
|
122
|
-
appId: this.metadata.appId,
|
|
123
|
-
deviceId: this.metadata.deviceId,
|
|
124
|
-
deviceName: this.metadata.deviceName,
|
|
125
|
-
pageId: pendingCommand.metadata.pageId,
|
|
126
|
-
frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
|
|
127
|
-
prefersFuseboxFrontend: pendingCommand.metadata.prefersFuseboxFrontend,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
this.pendingCommands.clear();
|
|
131
|
-
}
|
|
132
|
-
logProxyMessageHandlingError(messageOrigin, error, message) {
|
|
133
|
-
this.eventReporter.logEvent({
|
|
134
|
-
type: "proxy_error",
|
|
135
|
-
status: "error",
|
|
136
|
-
messageOrigin,
|
|
137
|
-
message,
|
|
138
|
-
error: error.message,
|
|
139
|
-
errorStack: error.stack ?? "",
|
|
140
|
-
appId: this.metadata.appId,
|
|
141
|
-
deviceId: this.metadata.deviceId,
|
|
142
|
-
deviceName: this.metadata.deviceName,
|
|
143
|
-
pageId: null,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
logExpiredCommand(pendingCommand) {
|
|
147
|
-
this.eventReporter.logEvent({
|
|
148
|
-
type: "debugger_command",
|
|
149
|
-
protocol: "CDP",
|
|
150
|
-
requestOrigin: pendingCommand.requestOrigin,
|
|
151
|
-
method: pendingCommand.method,
|
|
152
|
-
status: "coded_error",
|
|
153
|
-
errorCode: "TIMED_OUT",
|
|
154
|
-
responseOrigin: "proxy",
|
|
155
|
-
timeSinceStart: Date.now() - pendingCommand.requestTime,
|
|
156
|
-
appId: this.metadata.appId,
|
|
157
|
-
deviceId: this.metadata.deviceId,
|
|
158
|
-
deviceName: this.metadata.deviceName,
|
|
159
|
-
pageId: pendingCommand.metadata.pageId,
|
|
160
|
-
frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
|
|
161
|
-
prefersFuseboxFrontend: pendingCommand.metadata.prefersFuseboxFrontend,
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
exports.DeviceEventReporter = DeviceEventReporter;
|