From 780427761f94f6cef481e80029b90ee08f6dc549 Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 22:23:10 +0900 Subject: [PATCH 01/11] =?UTF-8?q?fix(lint):=20Logger=E3=81=AE=E5=9E=8B?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/mrubyWriterConnector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/mrubyWriterConnector.ts b/src/libs/mrubyWriterConnector.ts index e85e449..a3c6b70 100644 --- a/src/libs/mrubyWriterConnector.ts +++ b/src/libs/mrubyWriterConnector.ts @@ -4,7 +4,7 @@ import { Result, Success, Failure } from "./result"; export const targets = ["ESP32", "RBoard"] as const; export type Target = (typeof targets)[number]; -type Logger = (message?: any, ...params: any[]) => void; +type Logger = (message: string, ...params: unknown[]) => void; type Listener = (buffer: string[]) => void; type Reader = ReadableStreamDefaultReader; From d68d2cf5da252ea886bc2db4d5f06af3227596cf Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 22:47:49 +0900 Subject: [PATCH 02/11] =?UTF-8?q?fix(lint):=20Job=E3=81=AE=E5=9E=8B?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/mrubyWriterConnector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/mrubyWriterConnector.ts b/src/libs/mrubyWriterConnector.ts index a3c6b70..fb2b464 100644 --- a/src/libs/mrubyWriterConnector.ts +++ b/src/libs/mrubyWriterConnector.ts @@ -10,7 +10,7 @@ type Listener = (buffer: string[]) => void; type Reader = ReadableStreamDefaultReader; type Writer = WritableStreamDefaultWriter; type Event = "AttemptToEnterWriteMode" | "SuccessToExitWriteMode"; -type Job = { job: Promise; description: string }; +type Job = { job: Promise>; description: string }; const baudRates: Record = { ESP32: 115200, From d2639f6ae6071ee3b475275f9de2adb925e85c50 Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 23:10:43 +0900 Subject: [PATCH 03/11] =?UTF-8?q?fix(lint):=20=E4=B8=8D=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E3=81=ABPromise=E3=82=92=E7=94=9F=E6=88=90=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/mrubyWriterConnector.ts | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/libs/mrubyWriterConnector.ts b/src/libs/mrubyWriterConnector.ts index fb2b464..ea66ccd 100644 --- a/src/libs/mrubyWriterConnector.ts +++ b/src/libs/mrubyWriterConnector.ts @@ -187,16 +187,14 @@ export class MrubyWriterConnector { return Failure.error("No port."); } - const send = new Promise>(async (resovle, reject) => { + const send = async (): Promise> => { const readerRes = this.getSubReader(); const writerRes = this.getWriter(); if (readerRes.isFailure()) { - reject(readerRes); - return; + return readerRes; } if (writerRes.isFailure()) { - reject(writerRes); - return; + return writerRes; } this.currentSubReader = readerRes.value; @@ -204,30 +202,28 @@ export class MrubyWriterConnector { const request = await this.write(writer, chunk); if (request.isFailure()) { - reject(request); - return; + return request; } const response = await this.readLine(this.currentSubReader); if (response.isFailure()) { - reject(response); - return; + return response; } if (!response.value.startsWith("+")) { - reject( - Failure.error("Failed to enter write mode.", { cause: response }) - ); - return; + return Failure.error("Failed to enter write mode.", { + cause: response, + }); } - resovle(response); - this.currentSubReader.releaseLock(); writer.releaseLock(); - }); - this.jobQueue.push({ job: send, description: "send data" }); - return await send; + return response; + }; + + const sendJob = send(); + this.jobQueue.push({ job: sendJob, description: "send data" }); + return sendJob; } private async completeJobs() { From c9973ff72255ba720a5ba19a72d5be0d927a1ef8 Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 23:27:15 +0900 Subject: [PATCH 04/11] =?UTF-8?q?fix(lint):=20=E4=B8=8D=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E3=81=ABPromise=E3=82=92=E7=94=9F=E6=88=90=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/mrubyWriterConnector.ts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/libs/mrubyWriterConnector.ts b/src/libs/mrubyWriterConnector.ts index ea66ccd..591554e 100644 --- a/src/libs/mrubyWriterConnector.ts +++ b/src/libs/mrubyWriterConnector.ts @@ -149,7 +149,7 @@ export class MrubyWriterConnector { this.handleText(`\r\n> ${command}\r\n`); console.log("Send", { command }); - return await this.sendData(this.encoder.encode(command)); + return this.sendData(this.encoder.encode(command)); } async writeCode( @@ -347,26 +347,25 @@ export class MrubyWriterConnector { return Failure.error("Cannot write serial port."); } - const enter = new Promise>(async (resolve, reject) => { + const enter = async (): Promise> => { const response = await this.sendData(this.encoder.encode("\r\n\r\n")); if (response.isFailure()) { - reject(response); - return; + return response; } if (!response.value.includes("+OK mruby/c")) { - reject(Failure.error("Cannot enter write mode")); - return; + return Failure.error("Cannot enter write mode"); } this._writeMode = true; - resolve(Success.value(null)); - }); + return Success.value(null); + }; + const enterJob = enter(); this.jobQueue.push({ - job: enter, + job: enterJob, description: "attempt to enter write mode", }); - return await enter; + return enterJob; } private async onExitWriteMode(): Promise> { From 5e620f00f99d56b705b79892085f83303043f5d2 Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 23:30:20 +0900 Subject: [PATCH 05/11] =?UTF-8?q?fix(lint):=20while=E3=81=AE=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E5=BC=8F=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/mrubyWriterConnector.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/libs/mrubyWriterConnector.ts b/src/libs/mrubyWriterConnector.ts index 591554e..21fbd3a 100644 --- a/src/libs/mrubyWriterConnector.ts +++ b/src/libs/mrubyWriterConnector.ts @@ -419,15 +419,13 @@ export class MrubyWriterConnector { private async readLine(reader: Reader): Promise> { let line = ""; - while (true) { + while (!line.endsWith("\r\n")) { const res = await this.read(reader); if (res.isFailure()) return res; line += res.value; - - if (line.endsWith("\r\n")) { - return Success.value(line); - } } + + return Success.value(line); } } From 24ebc4455c7741c60108dde5732befacdcedcd2a Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 23:35:06 +0900 Subject: [PATCH 06/11] =?UTF-8?q?fix(lint):=20IResult=E3=81=AE=E5=9E=8B?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/result.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/result.ts b/src/libs/result.ts index 57a9842..f8b4e8a 100644 --- a/src/libs/result.ts +++ b/src/libs/result.ts @@ -1,8 +1,8 @@ export type Result = Success | Failure; interface IResult { - isSuccess(): this is Success; - isFailure(): this is Failure; + isSuccess(): this is Success; + isFailure(): this is Failure; } export class Success implements IResult { From 1fa6f5536da2a36816ae691b4fbaec27ff4d05fe Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 23:51:49 +0900 Subject: [PATCH 07/11] =?UTF-8?q?fix(lint):=20isTarget=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E5=9E=8B=E3=82=92string=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/utility.ts | 8 ++++---- src/pages/home.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libs/utility.ts b/src/libs/utility.ts index 4b47415..bb1f59b 100644 --- a/src/libs/utility.ts +++ b/src/libs/utility.ts @@ -1,5 +1,5 @@ -import { Target, targets } from "./mrubyWriterConnector" +import { Target, targets } from "./mrubyWriterConnector"; -export const isTarget = (object: any): object is Target => { - return targets.includes(object); -} \ No newline at end of file +export const isTarget = (value: string): value is Target => { + return (targets as readonly string[]).includes(value); +}; diff --git a/src/pages/home.tsx b/src/pages/home.tsx index 9ea1021..a7b4f24 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -53,7 +53,7 @@ export const Home = () => { const targetItem = localStorage.getItem("target"); const [target, setTarget] = useState( - isTarget(targetItem) ? targetItem : undefined + targetItem && isTarget(targetItem) ? targetItem : undefined ); const autoConnectItem = localStorage.getItem("autoConnect"); const [autoConnectMode, setAutoConnectMode] = useState( From fdf7c95bc368172e2102713f2ea56be0c30a9a77 Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 23:53:25 +0900 Subject: [PATCH 08/11] =?UTF-8?q?fix(lint):=20=E4=BE=9D=E5=AD=98=E3=83=AA?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home.tsx b/src/pages/home.tsx index a7b4f24..ab0bd91 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -115,7 +115,7 @@ export const Home = () => { }; compile(); - }, []); + }, [id]); useEffect(() => { if (!autoConnectMode) return; From 8c613d77b092eaff0baf0a787b17d8885c1c198d Mon Sep 17 00:00:00 2001 From: tufusa Date: Fri, 17 May 2024 23:56:26 +0900 Subject: [PATCH 09/11] =?UTF-8?q?fix(lint):=20=E4=BE=9D=E5=AD=98=E3=83=AA?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home.tsx | 88 +++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/pages/home.tsx b/src/pages/home.tsx index ab0bd91..0e8ef23 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -75,6 +75,49 @@ export const Home = () => { status: "idle", }); + const connect = async () => { + const res = await connector.connect( + async () => await navigator.serial.requestPort() + ); + if (res.isFailure()) { + alert(`ポートを取得できませんでした。\n${res.error}`); + console.log(res); + return; + } + await read(); + }; + + const read = async () => { + const res = await connector.startListen(); + console.log(res); + if (res.isFailure()) { + alert( + `受信中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` + ); + } + }; + + const send = async (text: string) => { + const res = await connector.sendCommand(text); + console.log(res); + if (res.isFailure()) { + alert( + `送信中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` + ); + } + }; + + const writeCode = async () => { + if (!code) return; + const res = await connector.writeCode(code, { execute: true }); + console.log(res); + if (res.isFailure()) { + alert( + `書き込み中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` + ); + } + }; + useEffect(() => { const compile = async () => { setCompileStatus({ status: "idle" }); @@ -137,50 +180,7 @@ export const Home = () => { }; autoConnect(); - }, []); - - const connect = async () => { - const res = await connector.connect( - async () => await navigator.serial.requestPort() - ); - if (res.isFailure()) { - alert(`ポートを取得できませんでした。\n${res.error}`); - console.log(res); - return; - } - await read(); - }; - - const read = async () => { - const res = await connector.startListen(); - console.log(res); - if (res.isFailure()) { - alert( - `受信中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` - ); - } - }; - - const send = async (text: string) => { - const res = await connector.sendCommand(text); - console.log(res); - if (res.isFailure()) { - alert( - `送信中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` - ); - } - }; - - const writeCode = async () => { - if (!code) return; - const res = await connector.writeCode(code, { execute: true }); - console.log(res); - if (res.isFailure()) { - alert( - `書き込み中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` - ); - } - }; + }, [autoConnectMode, connector, read]); return ( Date: Sat, 18 May 2024 00:08:06 +0900 Subject: [PATCH 10/11] =?UTF-8?q?fix:=20=E9=96=A2=E6=95=B0=E5=86=85?= =?UTF-8?q?=E3=81=A7job=E3=82=92=E5=BE=85=E6=A9=9F=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/mrubyWriterConnector.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/mrubyWriterConnector.ts b/src/libs/mrubyWriterConnector.ts index 21fbd3a..d1c25c0 100644 --- a/src/libs/mrubyWriterConnector.ts +++ b/src/libs/mrubyWriterConnector.ts @@ -223,7 +223,7 @@ export class MrubyWriterConnector { const sendJob = send(); this.jobQueue.push({ job: sendJob, description: "send data" }); - return sendJob; + return await sendJob; } private async completeJobs() { @@ -365,7 +365,7 @@ export class MrubyWriterConnector { job: enterJob, description: "attempt to enter write mode", }); - return enterJob; + return await enterJob; } private async onExitWriteMode(): Promise> { From 4190c39f8373272ea5fef8924618d4744462145d Mon Sep 17 00:00:00 2001 From: tufusa Date: Sat, 18 May 2024 00:10:45 +0900 Subject: [PATCH 11/11] =?UTF-8?q?fix(lint):=20=E9=96=A2=E6=95=B0=E3=82=92u?= =?UTF-8?q?seCallback=E3=81=A7=E3=83=A9=E3=83=83=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home.tsx | 51 ++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/pages/home.tsx b/src/pages/home.tsx index 0e8ef23..559f59c 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from "react"; +import { useCallback, useEffect, useRef, useState } from "react"; import { Box, Button, @@ -75,19 +75,7 @@ export const Home = () => { status: "idle", }); - const connect = async () => { - const res = await connector.connect( - async () => await navigator.serial.requestPort() - ); - if (res.isFailure()) { - alert(`ポートを取得できませんでした。\n${res.error}`); - console.log(res); - return; - } - await read(); - }; - - const read = async () => { + const read = useCallback(async () => { const res = await connector.startListen(); console.log(res); if (res.isFailure()) { @@ -95,19 +83,34 @@ export const Home = () => { `受信中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` ); } - }; + }, [connector]); - const send = async (text: string) => { - const res = await connector.sendCommand(text); - console.log(res); + const connect = useCallback(async () => { + const res = await connector.connect( + async () => await navigator.serial.requestPort() + ); if (res.isFailure()) { - alert( - `送信中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` - ); + alert(`ポートを取得できませんでした。\n${res.error}`); + console.log(res); + return; } - }; + await read(); + }, [connector, read]); + + const send = useCallback( + async (text: string) => { + const res = await connector.sendCommand(text); + console.log(res); + if (res.isFailure()) { + alert( + `送信中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` + ); + } + }, + [connector] + ); - const writeCode = async () => { + const writeCode = useCallback(async () => { if (!code) return; const res = await connector.writeCode(code, { execute: true }); console.log(res); @@ -116,7 +119,7 @@ export const Home = () => { `書き込み中にエラーが発生しました。\n${res.error}\ncause: ${res.error.cause}` ); } - }; + }, [connector, code]); useEffect(() => { const compile = async () => {