public async forMessage()

in src/common/packager.ts [361:400]


    public async forMessage(message: string, arg: Omit<MetroEventData, "data">): Promise<void> {
        await this.awaitStart();

        if (!this.packagerSocket || this.packagerSocket.CLOSED || this.packagerSocket.CLOSING) {
            const wsUrl = `ws://${this.getHost()}/events`;
            this.packagerSocket = new WebSocket(wsUrl, {
                origin: `http://${this.getHost()}/debugger-ui`, // random url because of packager bug
            });
        }

        return new Promise<void>((resolve, reject) => {
            const resolveHandler = async (handlerArg: string) => {
                const parsed: MetroEventData = JSON.parse(handlerArg);
                const value = parsed.data?.[0];

                if (
                    arg.level !== parsed.level ||
                    arg.type !== parsed.type ||
                    arg.mode !== parsed.mode ||
                    !value ||
                    typeof value !== "string"
                ) {
                    return;
                }

                if (value.includes(message)) {
                    assert(this.packagerSocket);
                    resolve();
                    this.packagerSocket.removeListener("message", resolveHandler);
                    this.packagerSocket.removeListener("error", reject);
                    this.packagerSocket.removeListener("close", reject);
                }
            };

            assert(this.packagerSocket);
            this.packagerSocket.addListener("error", reject);
            this.packagerSocket.addListener("close", reject);
            this.packagerSocket.addListener("message", resolveHandler);
        });
    }