@gurezo/web-serial-rxjs 2.4.0 → 3.1.0
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/README.ja.md +17 -10
- package/README.md +21 -12
- package/dist/errors/serial-error-code.d.ts +81 -37
- package/dist/errors/serial-error-code.d.ts.map +1 -1
- package/dist/errors/serial-error-context.d.ts +61 -0
- package/dist/errors/serial-error-context.d.ts.map +1 -0
- package/dist/errors/serial-error.d.ts +42 -21
- package/dist/errors/serial-error.d.ts.map +1 -1
- package/dist/index.d.ts +42 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1278 -635
- package/dist/index.mjs.map +4 -4
- package/dist/internal/assert-never.d.ts +11 -0
- package/dist/internal/assert-never.d.ts.map +1 -0
- package/dist/internal/branded-numbers.d.ts +37 -0
- package/dist/internal/branded-numbers.d.ts.map +1 -0
- package/dist/internal/strip-ansi-sequences.d.ts +25 -0
- package/dist/internal/strip-ansi-sequences.d.ts.map +1 -0
- package/dist/session/create-serial-session.d.ts +6 -3
- package/dist/session/create-serial-session.d.ts.map +1 -1
- package/dist/session/index.d.ts +7 -2
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/internal/build-request-options.d.ts +7 -7
- package/dist/session/internal/build-request-options.d.ts.map +1 -1
- package/dist/session/internal/error-severity.d.ts +38 -0
- package/dist/session/internal/error-severity.d.ts.map +1 -0
- package/dist/session/internal/line-buffer.d.ts +15 -4
- package/dist/session/internal/line-buffer.d.ts.map +1 -1
- package/dist/session/internal/receive-pipeline.d.ts +34 -0
- package/dist/session/internal/receive-pipeline.d.ts.map +1 -0
- package/dist/session/internal/receive-replay-buffer.d.ts +3 -2
- package/dist/session/internal/receive-replay-buffer.d.ts.map +1 -1
- package/dist/session/internal/session-error-reporter.d.ts +32 -0
- package/dist/session/internal/session-error-reporter.d.ts.map +1 -0
- package/dist/session/internal/session-lifecycle.d.ts +44 -0
- package/dist/session/internal/session-lifecycle.d.ts.map +1 -0
- package/dist/session/internal/validate-serial-port-filters.d.ts +12 -0
- package/dist/session/internal/validate-serial-port-filters.d.ts.map +1 -0
- package/dist/session/is-connected-session-state.d.ts +11 -0
- package/dist/session/is-connected-session-state.d.ts.map +1 -0
- package/dist/session/normalize-serial-error.d.ts +1 -1
- package/dist/session/normalize-serial-error.d.ts.map +1 -1
- package/dist/session/serial-session-options.d.ts +118 -65
- package/dist/session/serial-session-options.d.ts.map +1 -1
- package/dist/session/serial-session-state.d.ts +50 -12
- package/dist/session/serial-session-state.d.ts.map +1 -1
- package/dist/session/serial-session.d.ts +52 -18
- package/dist/session/serial-session.d.ts.map +1 -1
- package/dist/session/session-runtime.d.ts +140 -0
- package/dist/session/session-runtime.d.ts.map +1 -0
- package/dist/terminal/create-terminal-buffer.d.ts +15 -3
- package/dist/terminal/create-terminal-buffer.d.ts.map +1 -1
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/session/session-state-machine.d.ts +0 -40
- package/dist/session/session-state-machine.d.ts.map +0 -1
package/README.ja.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<img src="https://raw.githubusercontent.com/gurezo/web-serial-rxjs/main/packages/web-serial-rxjs/web-serial-rxjs-icon.png" alt="web-serial-rxjs プロジェクトアイコン" width="512" />
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
-
Web Serial API を最小限の Session 指向 RxJS 表面でラップする TypeScript
|
|
7
|
+
Web Serial API を最小限の Session 指向 RxJS 表面でラップする TypeScript ライブラリです。公開 API は単一の `SerialSession` を提供し、`state$`(canonical lifecycle state)/ `errors$`(error event channel)/ `receive$` / `lines$` を購読するだけで UI を駆動できます。read loop や送信キューの自前実装は不要です。
|
|
8
8
|
|
|
9
9
|
## ブラウザサポート
|
|
10
10
|
|
|
@@ -21,9 +21,13 @@ Web Serial API は**デスクトップ**ブラウザでのみサポートされ
|
|
|
21
21
|
|
|
22
22
|
`connect$` の前の feature detection には `SerialSession.isBrowserSupported()`(同期的に `boolean`)を使います。
|
|
23
23
|
|
|
24
|
+
## 接続状態(ライフサイクル UI)
|
|
25
|
+
|
|
26
|
+
ライフサイクル UI には **`state$`** の `state.status` narrowing を canonical API として使用してください。boolean だけ必要な場合は `state$` から derive してください。`isConnected$` は v3.x では引き続き利用可能ですが **非推奨** です。詳細は [v3 移行ガイド](./docs/guide/ja/migration-v3.md#6-isconnected-の非推奨化) を参照してください。
|
|
27
|
+
|
|
24
28
|
## 接続中のポート情報(デバイス識別)
|
|
25
29
|
|
|
26
|
-
`connect$`
|
|
30
|
+
`connect$` 成功後、`state$` を `state.status === SerialSessionStatus.Connected` で handling する場合は **`state.portInfo`** を canonical API として使用してください。`getPortInfo()` と `portInfo$` は v3.x では引き続き利用可能ですが **非推奨** です。`state$` の narrowing へ移行してください。`getCurrentPort()` は削除されました。詳細は [v3 移行ガイド](./docs/guide/ja/migration-v3.md#7-getcurrentport-の削除) を参照してください。
|
|
27
31
|
|
|
28
32
|
## 受信の replay(`receive$` と `receiveReplay$`)
|
|
29
33
|
|
|
@@ -31,7 +35,7 @@ Web Serial API は**デスクトップ**ブラウザでのみサポートされ
|
|
|
31
35
|
|
|
32
36
|
## `receive$` と `lines$`
|
|
33
37
|
|
|
34
|
-
購読するストリームはユースケースに合わせて選んでください。**`lines$`** をターミナル表示に使うと `\r` が失われ再描画できず、シェル出力(例: `ls -la` の整形)が崩れます。詳細は [概要](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/
|
|
38
|
+
購読するストリームはユースケースに合わせて選んでください。**`lines$`** をターミナル表示に使うと `\r` が失われ再描画できず、シェル出力(例: `ls -la` の整形)が崩れます。詳細は [概要](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/overview.md) を参照してください。
|
|
35
39
|
|
|
36
40
|
### `receive$`(raw ストリーム)
|
|
37
41
|
|
|
@@ -83,18 +87,21 @@ pnpm add rxjs
|
|
|
83
87
|
|
|
84
88
|
## 次に読むもの
|
|
85
89
|
|
|
86
|
-
- **
|
|
87
|
-
- 最短でポートを開く手順: [クイックスタート](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/
|
|
90
|
+
- **API の全体像**(機能一覧、`SerialSession` 早見表、`SerialSessionState`、最小サンプル): [SerialSession の概要](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/overview.md)([English](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/overview.md))
|
|
91
|
+
- 最短でポートを開く手順: [クイックスタート](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/quick-start.md)
|
|
88
92
|
|
|
89
93
|
## ドキュメント
|
|
90
94
|
|
|
91
95
|
| ドキュメント | 用途 |
|
|
92
96
|
| --- | --- |
|
|
93
|
-
| [
|
|
94
|
-
| [
|
|
95
|
-
| [
|
|
96
|
-
| [
|
|
97
|
-
| [
|
|
97
|
+
| [日本語 Guide 索引](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/README.md) | Getting Started の読み順と一覧 |
|
|
98
|
+
| [English Guide 索引](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/README.md) | Getting Started reading order and full index |
|
|
99
|
+
| [全体像](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/overview.md) | 機能と `SerialSession` / `SerialSessionState` の対応表 |
|
|
100
|
+
| [クイックスタート](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/quick-start.md) | ポートを開いて購読までを最短で |
|
|
101
|
+
| [高度な使用方法](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/advanced-usage.md) | 行フレーミング、擬似リクエスト/レス、リカバリ |
|
|
102
|
+
| [API の概念と設計メモ](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/concepts.md) | オプション、`SerialError`、型の表形式補足 |
|
|
103
|
+
| [v2 → v3 マイグレーション](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/migration-v3.md) | `state$` discriminated union、`SerialSessionStatus`、`context.cause` |
|
|
104
|
+
| [v1 → v2 マイグレーション](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/migration-v2.md) | 廃止された v1 API の置き換え |
|
|
98
105
|
| **リポジトリ [README](https://github.com/gurezo/web-serial-rxjs/blob/main/README.ja.md)** | モノレポ構成、**`apps/` のサンプル**、貢献、MCP、プロジェクトアイコン |
|
|
99
106
|
|
|
100
107
|
## ライセンス
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<img src="https://raw.githubusercontent.com/gurezo/web-serial-rxjs/main/packages/web-serial-rxjs/web-serial-rxjs-icon.png" alt="@gurezo/web-serial-rxjs project icon" width="512" />
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
-
A TypeScript library that wraps the Web Serial API with a minimal, session-oriented RxJS surface. The
|
|
7
|
+
A TypeScript library that wraps the Web Serial API with a minimal, session-oriented RxJS surface. The public API exposes a single `SerialSession` so applications can drive their UI from `state$` (canonical lifecycle state) + `errors$` (error event channel) + `receive$` + `lines$`, without rebuilding read loops or send queues themselves.
|
|
8
8
|
|
|
9
9
|
## Browser support
|
|
10
10
|
|
|
@@ -21,9 +21,13 @@ Supported desktop browsers:
|
|
|
21
21
|
|
|
22
22
|
`SerialSession.isBrowserSupported()` returns a synchronous `boolean` for feature detection before `connect$`.
|
|
23
23
|
|
|
24
|
+
## Connection state (lifecycle UI)
|
|
25
|
+
|
|
26
|
+
Prefer **`state$`** with `state.status` narrowing as the canonical API for lifecycle UI. Derive a boolean from `state$` when you only need a connected flag. `isConnected$` remains available in v3.x but is **deprecated** — see [Migrating to v3](./docs/guide/en/migration-v3.md#6-isconnected-deprecation).
|
|
27
|
+
|
|
24
28
|
## Port info (device identification)
|
|
25
29
|
|
|
26
|
-
After a successful `connect$`, use `
|
|
30
|
+
After a successful `connect$`, use `state.portInfo` when handling `state$` with `state.status === SerialSessionStatus.Connected` — this is the canonical API. `getPortInfo()` and `portInfo$` remain available in v3.x but are **deprecated**; migrate to `state$` narrowing. `getCurrentPort()` has been removed; see [Migrating to v3 – getCurrentPort() removal](./docs/guide/en/migration-v3.md#7-getcurrentport-removal).
|
|
27
31
|
|
|
28
32
|
## Receive replay (`receive$` vs `receiveReplay$`)
|
|
29
33
|
|
|
@@ -31,7 +35,7 @@ After a successful `connect$`, use `getPortInfo()` or subscribe to `portInfo$` f
|
|
|
31
35
|
|
|
32
36
|
## `receive$` vs `lines$`
|
|
33
37
|
|
|
34
|
-
Pick the stream that matches your use case. Using **`lines$`** for a terminal mirror drops `\r` and redraw behaviour, which breaks shells and tools that rely on carriage-return updates ([overview](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/
|
|
38
|
+
Pick the stream that matches your use case. Using **`lines$`** for a terminal mirror drops `\r` and redraw behaviour, which breaks shells and tools that rely on carriage-return updates ([overview](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/overview.md)).
|
|
35
39
|
|
|
36
40
|
### `receive$` (raw stream)
|
|
37
41
|
|
|
@@ -83,20 +87,25 @@ pnpm add rxjs
|
|
|
83
87
|
|
|
84
88
|
## Where to go next
|
|
85
89
|
|
|
86
|
-
- Full **
|
|
87
|
-
- Shortest path to an open port: [Quick Start](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/
|
|
88
|
-
- Browse
|
|
90
|
+
- Full **API map** (features, `SerialSession` table, `SerialSessionState`, minimal example): [SerialSession overview](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/overview.md) ([日本語](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/ja/overview.md))
|
|
91
|
+
- Shortest path to an open port: [Quick Start](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/quick-start.md)
|
|
92
|
+
- Browse the published documentation site: [web-serial-rxjs Documentation](https://gurezo.github.io/web-serial-rxjs/)
|
|
93
|
+
- Browse API Reference (TypeDoc): [web-serial-rxjs API Documentation](https://gurezo.github.io/web-serial-rxjs/api/)
|
|
89
94
|
|
|
90
95
|
## Documentation
|
|
91
96
|
|
|
92
97
|
| Doc | Use it for |
|
|
93
98
|
| --- | --- |
|
|
94
|
-
| [
|
|
95
|
-
| [
|
|
96
|
-
| [
|
|
97
|
-
| [
|
|
98
|
-
| [
|
|
99
|
-
| [
|
|
99
|
+
| [Documentation home](https://gurezo.github.io/web-serial-rxjs/) | Site landing with Guide (ja/en) and API Reference |
|
|
100
|
+
| [English Guide (site)](https://gurezo.github.io/web-serial-rxjs/guide/en/README.html) | Getting Started reading order on the published site |
|
|
101
|
+
| [API Reference (site)](https://gurezo.github.io/web-serial-rxjs/api/index.html) | English TypeDoc API Reference |
|
|
102
|
+
| [English Guide index](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/README.md) | Getting Started reading order and full index |
|
|
103
|
+
| [Overview](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/overview.md) | Features and the `SerialSession` / `SerialSessionState` map |
|
|
104
|
+
| [Quick Start](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/quick-start.md) | Open a port and wire subscriptions end-to-end |
|
|
105
|
+
| [Advanced Usage](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/advanced-usage.md) | Line framing, request/response-style flows, recovery |
|
|
106
|
+
| [API concepts and design notes](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/concepts.md) | `SerialSessionOptions`, `SerialError`, and formal details |
|
|
107
|
+
| [v2 → v3 migration](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/migration-v3.md) | `state$` discriminated union, `SerialSessionStatus`, `context.cause` |
|
|
108
|
+
| [v1 → v2 migration](https://github.com/gurezo/web-serial-rxjs/blob/main/packages/web-serial-rxjs/docs/guide/en/migration-v2.md) | Replacing the removed v1 `SerialClient` / `ShellClient` API |
|
|
100
109
|
| [Repository README](https://github.com/gurezo/web-serial-rxjs/blob/main/README.md) | Monorepo layout, **examples** under `apps/`, contributing, MCP, and project icon |
|
|
101
110
|
|
|
102
111
|
## License
|
|
@@ -24,54 +24,58 @@
|
|
|
24
24
|
* }
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
export declare
|
|
27
|
+
export declare const SerialErrorCode: {
|
|
28
28
|
/**
|
|
29
29
|
* Browser does not support the Web Serial API.
|
|
30
30
|
*
|
|
31
|
-
*
|
|
32
|
-
* that doesn't support the Web Serial API. Supported desktop browsers are Chrome,
|
|
33
|
-
* Edge, Opera, and Firefox 151+. Safari and mobile browsers are not supported.
|
|
31
|
+
* Emitted on `connect$` when `navigator.serial` is unavailable.
|
|
34
32
|
*
|
|
35
33
|
* **Suggested action**: Inform the user to use a supported browser.
|
|
34
|
+
*
|
|
35
|
+
* @see {@link https://github.com/gurezo/web-serial-rxjs/issues/438 | Issue #438}
|
|
36
36
|
*/
|
|
37
|
-
BROWSER_NOT_SUPPORTED
|
|
37
|
+
readonly BROWSER_NOT_SUPPORTED: "BROWSER_NOT_SUPPORTED";
|
|
38
38
|
/**
|
|
39
39
|
* Serial port is not available.
|
|
40
40
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
41
|
+
* **Reserved — not emitted in v3.x.** The current implementation uses only
|
|
42
|
+
* `navigator.serial.requestPort`; there is no `getPorts` API path. Scheduled
|
|
43
|
+
* for removal in the next major version.
|
|
44
|
+
*
|
|
45
|
+
* **Suggested action**: Handle port acquisition failures with
|
|
46
|
+
* {@link SerialErrorCode.PORT_OPEN_FAILED} or
|
|
47
|
+
* {@link SerialErrorCode.OPERATION_CANCELLED} instead.
|
|
44
48
|
*
|
|
45
|
-
*
|
|
49
|
+
* @deprecated Not emitted at runtime in v3.x. Will be removed in the next major version.
|
|
50
|
+
* @see {@link https://github.com/gurezo/web-serial-rxjs/issues/438 | Issue #438}
|
|
46
51
|
*/
|
|
47
|
-
PORT_NOT_AVAILABLE
|
|
52
|
+
readonly PORT_NOT_AVAILABLE: "PORT_NOT_AVAILABLE";
|
|
48
53
|
/**
|
|
49
54
|
* Failed to open the serial port.
|
|
50
55
|
*
|
|
51
|
-
*
|
|
52
|
-
* connection parameters, hardware issues, or permission problems.
|
|
56
|
+
* Emitted on `connect$` when `port.open()` rejects.
|
|
53
57
|
*
|
|
54
58
|
* **Suggested action**: Verify connection parameters and check hardware connections.
|
|
55
59
|
*/
|
|
56
|
-
PORT_OPEN_FAILED
|
|
60
|
+
readonly PORT_OPEN_FAILED: "PORT_OPEN_FAILED";
|
|
57
61
|
/**
|
|
58
62
|
* Serial port is already open.
|
|
59
63
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
64
|
+
* Emitted on `connect$` when the session is not in `'idle'` or `'error'`
|
|
65
|
+
* (non-fatal; session state is unchanged).
|
|
62
66
|
*
|
|
63
67
|
* **Suggested action**: Disconnect the current port before connecting a new one.
|
|
64
68
|
*/
|
|
65
|
-
PORT_ALREADY_OPEN
|
|
69
|
+
readonly PORT_ALREADY_OPEN: "PORT_ALREADY_OPEN";
|
|
66
70
|
/**
|
|
67
71
|
* Serial port is not open.
|
|
68
72
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
73
|
+
* Emitted when `send$` or `disconnect$` is called in an invalid session
|
|
74
|
+
* state (for example before `connect$` completes).
|
|
71
75
|
*
|
|
72
|
-
* **Suggested action**: Call {@link
|
|
76
|
+
* **Suggested action**: Call {@link SerialSession.connect$} before sending data.
|
|
73
77
|
*/
|
|
74
|
-
PORT_NOT_OPEN
|
|
78
|
+
readonly PORT_NOT_OPEN: "PORT_NOT_OPEN";
|
|
75
79
|
/**
|
|
76
80
|
* Failed to read from the serial port.
|
|
77
81
|
*
|
|
@@ -80,7 +84,7 @@ export declare enum SerialErrorCode {
|
|
|
80
84
|
*
|
|
81
85
|
* **Suggested action**: Check the connection and hardware, then retry the read operation.
|
|
82
86
|
*/
|
|
83
|
-
READ_FAILED
|
|
87
|
+
readonly READ_FAILED: "READ_FAILED";
|
|
84
88
|
/**
|
|
85
89
|
* Failed to write to the serial port.
|
|
86
90
|
*
|
|
@@ -89,7 +93,7 @@ export declare enum SerialErrorCode {
|
|
|
89
93
|
*
|
|
90
94
|
* **Suggested action**: Check the connection and hardware, then retry the write operation.
|
|
91
95
|
*/
|
|
92
|
-
WRITE_FAILED
|
|
96
|
+
readonly WRITE_FAILED: "WRITE_FAILED";
|
|
93
97
|
/**
|
|
94
98
|
* Serial port connection was lost.
|
|
95
99
|
*
|
|
@@ -99,7 +103,7 @@ export declare enum SerialErrorCode {
|
|
|
99
103
|
*
|
|
100
104
|
* **Suggested action**: Check the physical connection and reconnect if needed.
|
|
101
105
|
*/
|
|
102
|
-
CONNECTION_LOST
|
|
106
|
+
readonly CONNECTION_LOST: "CONNECTION_LOST";
|
|
103
107
|
/**
|
|
104
108
|
* Invalid filter options provided.
|
|
105
109
|
*
|
|
@@ -108,7 +112,7 @@ export declare enum SerialErrorCode {
|
|
|
108
112
|
*
|
|
109
113
|
* **Suggested action**: Verify filter options match the expected format and value ranges.
|
|
110
114
|
*/
|
|
111
|
-
INVALID_FILTER_OPTIONS
|
|
115
|
+
readonly INVALID_FILTER_OPTIONS: "INVALID_FILTER_OPTIONS";
|
|
112
116
|
/**
|
|
113
117
|
* Operation was cancelled by the user.
|
|
114
118
|
*
|
|
@@ -118,14 +122,18 @@ export declare enum SerialErrorCode {
|
|
|
118
122
|
* **Suggested action**: This is a normal condition - no action required, but you may want
|
|
119
123
|
* to inform the user that the operation was cancelled.
|
|
120
124
|
*/
|
|
121
|
-
OPERATION_CANCELLED
|
|
125
|
+
readonly OPERATION_CANCELLED: "OPERATION_CANCELLED";
|
|
122
126
|
/**
|
|
123
127
|
* Operation timed out before completion.
|
|
124
128
|
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
129
|
+
* **Reserved — not emitted in v3.x.** No timeout / prompt detection /
|
|
130
|
+
* transaction API exists yet. Scheduled for removal in the next major version
|
|
131
|
+
* unless a future API adopts this code.
|
|
132
|
+
*
|
|
133
|
+
* @deprecated Not emitted at runtime in v3.x. Will be removed in the next major version.
|
|
134
|
+
* @see {@link https://github.com/gurezo/web-serial-rxjs/issues/438 | Issue #438}
|
|
127
135
|
*/
|
|
128
|
-
OPERATION_TIMEOUT
|
|
136
|
+
readonly OPERATION_TIMEOUT: "OPERATION_TIMEOUT";
|
|
129
137
|
/**
|
|
130
138
|
* Internal line buffer exceeded its configured size limit.
|
|
131
139
|
*
|
|
@@ -136,7 +144,7 @@ export declare enum SerialErrorCode {
|
|
|
136
144
|
* **Suggested action**: Increase `lineBuffer.maxChars`, handle framing on `receive$`,
|
|
137
145
|
* or ensure the device sends line terminators.
|
|
138
146
|
*/
|
|
139
|
-
LINE_BUFFER_OVERFLOW
|
|
147
|
+
readonly LINE_BUFFER_OVERFLOW: "LINE_BUFFER_OVERFLOW";
|
|
140
148
|
/**
|
|
141
149
|
* Invalid receive replay options provided.
|
|
142
150
|
*
|
|
@@ -146,7 +154,37 @@ export declare enum SerialErrorCode {
|
|
|
146
154
|
* **Suggested action**: Verify `receiveReplay` options match the documented
|
|
147
155
|
* ranges and value types.
|
|
148
156
|
*/
|
|
149
|
-
INVALID_RECEIVE_REPLAY_OPTIONS
|
|
157
|
+
readonly INVALID_RECEIVE_REPLAY_OPTIONS: "INVALID_RECEIVE_REPLAY_OPTIONS";
|
|
158
|
+
/**
|
|
159
|
+
* Invalid terminal buffer options provided.
|
|
160
|
+
*
|
|
161
|
+
* This error occurs when {@link SerialSessionOptions.terminalBuffer} values are
|
|
162
|
+
* out of range, such as a negative or non-integer `maxLines` or `maxChars`.
|
|
163
|
+
*
|
|
164
|
+
* **Suggested action**: Verify `terminalBuffer` options match the documented
|
|
165
|
+
* ranges and value types.
|
|
166
|
+
*/
|
|
167
|
+
readonly INVALID_TERMINAL_BUFFER_OPTIONS: "INVALID_TERMINAL_BUFFER_OPTIONS";
|
|
168
|
+
/**
|
|
169
|
+
* Invalid line buffer options provided.
|
|
170
|
+
*
|
|
171
|
+
* This error occurs when {@link SerialSessionOptions.lineBuffer} values are
|
|
172
|
+
* out of range, such as a negative or non-integer `maxChars`.
|
|
173
|
+
*
|
|
174
|
+
* **Suggested action**: Verify `lineBuffer` options match the documented
|
|
175
|
+
* ranges and value types.
|
|
176
|
+
*/
|
|
177
|
+
readonly INVALID_LINE_BUFFER_OPTIONS: "INVALID_LINE_BUFFER_OPTIONS";
|
|
178
|
+
/**
|
|
179
|
+
* Invalid connection options provided.
|
|
180
|
+
*
|
|
181
|
+
* This error occurs when connection fields such as `baudRate` are out of
|
|
182
|
+
* range at session creation time.
|
|
183
|
+
*
|
|
184
|
+
* **Suggested action**: Verify connection options match the documented
|
|
185
|
+
* ranges and value types.
|
|
186
|
+
*/
|
|
187
|
+
readonly INVALID_CONNECTION_OPTIONS: "INVALID_CONNECTION_OPTIONS";
|
|
150
188
|
/**
|
|
151
189
|
* Receive replay buffer exceeded its configured character limit.
|
|
152
190
|
*
|
|
@@ -157,7 +195,7 @@ export declare enum SerialErrorCode {
|
|
|
157
195
|
* **Suggested action**: Increase `receiveReplay.maxChars`, reduce chunk size at
|
|
158
196
|
* the source, or subscribe earlier to avoid relying on a large replay buffer.
|
|
159
197
|
*/
|
|
160
|
-
RECEIVE_REPLAY_BUFFER_OVERFLOW
|
|
198
|
+
readonly RECEIVE_REPLAY_BUFFER_OVERFLOW: "RECEIVE_REPLAY_BUFFER_OVERFLOW";
|
|
161
199
|
/**
|
|
162
200
|
* Session has been disposed and can no longer be used.
|
|
163
201
|
*
|
|
@@ -168,15 +206,21 @@ export declare enum SerialErrorCode {
|
|
|
168
206
|
* **Suggested action**: Call {@link SerialSession.dispose$} only when
|
|
169
207
|
* permanently tearing down a session, then create a new one if needed.
|
|
170
208
|
*/
|
|
171
|
-
SESSION_DISPOSED
|
|
209
|
+
readonly SESSION_DISPOSED: "SESSION_DISPOSED";
|
|
172
210
|
/**
|
|
173
211
|
* Unknown error occurred.
|
|
174
212
|
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
213
|
+
* Emitted as a fallback when dispose or disconnect encounters an error that
|
|
214
|
+
* cannot be classified more specifically. The underlying failure is on
|
|
215
|
+
* {@link SerialError.context | context.cause}.
|
|
177
216
|
*
|
|
178
|
-
* **Suggested action**: Check the error message and
|
|
217
|
+
* **Suggested action**: Check the error message and `context.cause` for more details.
|
|
179
218
|
*/
|
|
180
|
-
UNKNOWN
|
|
181
|
-
}
|
|
219
|
+
readonly UNKNOWN: "UNKNOWN";
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* String union of allowed {@link SerialErrorCode} runtime values
|
|
223
|
+
* (same set as the values on the {@link SerialErrorCode} object).
|
|
224
|
+
*/
|
|
225
|
+
export type SerialErrorCode = (typeof SerialErrorCode)[keyof typeof SerialErrorCode];
|
|
182
226
|
//# sourceMappingURL=serial-error-code.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial-error-code.d.ts","sourceRoot":"","sources":["../../src/errors/serial-error-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,
|
|
1
|
+
{"version":3,"file":"serial-error-code.d.ts","sourceRoot":"","sources":["../../src/errors/serial-error-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,eAAe;IAC1B;;;;;;;;OAQG;;IAGH;;;;;;;;;;;;;OAaG;;IAGH;;;;;;OAMG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;OAQG;;CAEK,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,eAAe,GACzB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { SerialErrorCode } from './serial-error-code';
|
|
2
|
+
/**
|
|
3
|
+
* Context payload for errors that wrap an underlying failure.
|
|
4
|
+
*/
|
|
5
|
+
export type SerialErrorCauseContext = {
|
|
6
|
+
readonly cause: unknown;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Machine-readable constraint identifiers for factory-time validation errors.
|
|
10
|
+
*/
|
|
11
|
+
export type ValidationErrorConstraint = 'at-least-one-usb-id' | 'usb-id-0-65535' | 'positive-safe-integer' | 'receive-replay-buffer-size-range' | 'receive-replay-max-chars-range' | 'non-negative-safe-integer';
|
|
12
|
+
/**
|
|
13
|
+
* Structured metadata for `INVALID_*` validation errors thrown at session
|
|
14
|
+
* factory time. {@link SerialError.message} remains human-readable.
|
|
15
|
+
*/
|
|
16
|
+
export type ValidationErrorContext = {
|
|
17
|
+
readonly field: string;
|
|
18
|
+
readonly value: unknown;
|
|
19
|
+
readonly constraint: ValidationErrorConstraint;
|
|
20
|
+
readonly filterIndex?: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Maps each {@link SerialErrorCode} to its structured context shape.
|
|
24
|
+
*
|
|
25
|
+
* Codes mapped to `undefined` have no machine-readable metadata beyond
|
|
26
|
+
* {@link SerialError.message}. Overflow and validation codes expose structured
|
|
27
|
+
* metadata so callers do not need to parse error messages.
|
|
28
|
+
*/
|
|
29
|
+
export interface SerialErrorContextMap {
|
|
30
|
+
[SerialErrorCode.BROWSER_NOT_SUPPORTED]: undefined;
|
|
31
|
+
[SerialErrorCode.PORT_NOT_AVAILABLE]: SerialErrorCauseContext;
|
|
32
|
+
[SerialErrorCode.PORT_OPEN_FAILED]: SerialErrorCauseContext;
|
|
33
|
+
[SerialErrorCode.PORT_ALREADY_OPEN]: undefined;
|
|
34
|
+
[SerialErrorCode.PORT_NOT_OPEN]: undefined;
|
|
35
|
+
[SerialErrorCode.READ_FAILED]: SerialErrorCauseContext;
|
|
36
|
+
[SerialErrorCode.WRITE_FAILED]: SerialErrorCauseContext;
|
|
37
|
+
[SerialErrorCode.CONNECTION_LOST]: SerialErrorCauseContext;
|
|
38
|
+
[SerialErrorCode.INVALID_FILTER_OPTIONS]: ValidationErrorContext;
|
|
39
|
+
[SerialErrorCode.OPERATION_CANCELLED]: SerialErrorCauseContext;
|
|
40
|
+
[SerialErrorCode.OPERATION_TIMEOUT]: undefined;
|
|
41
|
+
[SerialErrorCode.LINE_BUFFER_OVERFLOW]: {
|
|
42
|
+
readonly maxChars: number;
|
|
43
|
+
};
|
|
44
|
+
[SerialErrorCode.INVALID_RECEIVE_REPLAY_OPTIONS]: ValidationErrorContext;
|
|
45
|
+
[SerialErrorCode.INVALID_TERMINAL_BUFFER_OPTIONS]: ValidationErrorContext;
|
|
46
|
+
[SerialErrorCode.INVALID_LINE_BUFFER_OPTIONS]: ValidationErrorContext;
|
|
47
|
+
[SerialErrorCode.INVALID_CONNECTION_OPTIONS]: ValidationErrorContext;
|
|
48
|
+
[SerialErrorCode.RECEIVE_REPLAY_BUFFER_OVERFLOW]: {
|
|
49
|
+
readonly maxChars: number;
|
|
50
|
+
readonly bufferSize: number;
|
|
51
|
+
};
|
|
52
|
+
[SerialErrorCode.SESSION_DISPOSED]: undefined;
|
|
53
|
+
[SerialErrorCode.UNKNOWN]: SerialErrorCauseContext;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
export declare function isCauseContextCode(code: SerialErrorCode): code is keyof {
|
|
59
|
+
[K in keyof SerialErrorContextMap as SerialErrorContextMap[K] extends SerialErrorCauseContext ? K : never]: SerialErrorContextMap[K];
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=serial-error-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-error-context.d.ts","sourceRoot":"","sources":["../../src/errors/serial-error-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACjC,qBAAqB,GACrB,gBAAgB,GAChB,uBAAuB,GACvB,kCAAkC,GAClC,gCAAgC,GAChC,2BAA2B,CAAC;AAEhC;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,CAAC,eAAe,CAAC,qBAAqB,CAAC,EAAE,SAAS,CAAC;IACnD,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAC9D,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC5D,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC/C,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC3C,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACvD,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACxD,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC3D,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IACjE,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC/D,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC/C,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE;QACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,CAAC,eAAe,CAAC,8BAA8B,CAAC,EAAE,sBAAsB,CAAC;IACzE,CAAC,eAAe,CAAC,+BAA+B,CAAC,EAAE,sBAAsB,CAAC;IAC1E,CAAC,eAAe,CAAC,2BAA2B,CAAC,EAAE,sBAAsB,CAAC;IACtE,CAAC,eAAe,CAAC,0BAA0B,CAAC,EAAE,sBAAsB,CAAC;IACrE,CAAC,eAAe,CAAC,8BAA8B,CAAC,EAAE;QAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC9C,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACpD;AAYD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,GACpB,IAAI,IAAI,MAAM;KACd,CAAC,IAAI,MAAM,qBAAqB,IAAI,qBAAqB,CAAC,CAAC,CAAC,SAAS,uBAAuB,GACzF,CAAC,GACD,KAAK,GAAG,qBAAqB,CAAC,CAAC,CAAC;CACrC,CAEA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { SerialErrorCode } from './serial-error-code';
|
|
2
|
+
import { type SerialErrorCauseContext, type SerialErrorContextMap, type ValidationErrorConstraint, type ValidationErrorContext } from './serial-error-context';
|
|
2
3
|
export { SerialErrorCode };
|
|
4
|
+
export type { SerialErrorCauseContext, SerialErrorContextMap, ValidationErrorConstraint, ValidationErrorContext, };
|
|
3
5
|
/**
|
|
4
6
|
* Custom error class for serial port operations.
|
|
5
7
|
*
|
|
@@ -9,25 +11,24 @@ export { SerialErrorCode };
|
|
|
9
11
|
*
|
|
10
12
|
* @example
|
|
11
13
|
* ```typescript
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* } catch (error) {
|
|
15
|
-
* if (error instanceof SerialError) {
|
|
14
|
+
* session.errors$.subscribe((error) => {
|
|
15
|
+
* if (error.is(SerialErrorCode.READ_FAILED)) {
|
|
16
16
|
* console.error(`Error code: ${error.code}`);
|
|
17
17
|
* console.error(`Message: ${error.message}`);
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* console.error(`Cause:`, error.context.cause);
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* if (error.is(SerialErrorCode.LINE_BUFFER_OVERFLOW)) {
|
|
22
|
+
* console.error(`maxChars: ${error.context.maxChars}`);
|
|
23
|
+
* }
|
|
21
24
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* // Handle browser not supported
|
|
25
|
-
* }
|
|
25
|
+
* if (error.is(SerialErrorCode.BROWSER_NOT_SUPPORTED)) {
|
|
26
|
+
* // Handle browser not supported
|
|
26
27
|
* }
|
|
27
|
-
* }
|
|
28
|
+
* });
|
|
28
29
|
* ```
|
|
29
30
|
*/
|
|
30
|
-
export declare class SerialError extends Error {
|
|
31
|
+
export declare class SerialError<TCode extends SerialErrorCode = SerialErrorCode> extends Error {
|
|
31
32
|
/**
|
|
32
33
|
* The error code identifying the type of error that occurred.
|
|
33
34
|
*
|
|
@@ -35,12 +36,23 @@ export declare class SerialError extends Error {
|
|
|
35
36
|
*
|
|
36
37
|
* @see {@link SerialErrorCode} for all available error codes
|
|
37
38
|
*/
|
|
38
|
-
readonly code:
|
|
39
|
+
readonly code: TCode;
|
|
40
|
+
/**
|
|
41
|
+
* Structured metadata associated with {@link code}.
|
|
42
|
+
*
|
|
43
|
+
* When {@link is} returns `true`, TypeScript narrows this property to the
|
|
44
|
+
* context shape defined in {@link SerialErrorContextMap} for that code.
|
|
45
|
+
*/
|
|
46
|
+
readonly context: SerialErrorContextMap[TCode];
|
|
39
47
|
/**
|
|
40
48
|
* The original error that caused this SerialError, if available.
|
|
41
49
|
*
|
|
42
50
|
* This property contains the underlying error (e.g., DOMException, TypeError)
|
|
43
51
|
* that was wrapped in this SerialError. It may be undefined if no original error exists.
|
|
52
|
+
*
|
|
53
|
+
* @deprecated Prefer {@link context} for cause-bearing codes. This property is
|
|
54
|
+
* retained for backward compatibility and is kept in sync when a cause is
|
|
55
|
+
* provided.
|
|
44
56
|
*/
|
|
45
57
|
readonly originalError?: Error;
|
|
46
58
|
/**
|
|
@@ -48,25 +60,34 @@ export declare class SerialError extends Error {
|
|
|
48
60
|
*
|
|
49
61
|
* @param code - The error code identifying the type of error
|
|
50
62
|
* @param message - A human-readable error message
|
|
51
|
-
* @param originalError - The original error that caused this SerialError, if any
|
|
63
|
+
* @param originalError - The original error that caused this SerialError, if any.
|
|
64
|
+
* @deprecated Prefer passing `{ cause }` via {@link context}. When omitted,
|
|
65
|
+
* cause-bearing codes derive `{ cause }` from this argument for backward
|
|
66
|
+
* compatibility.
|
|
67
|
+
* @param context - Structured metadata for the error code. For cause-bearing
|
|
68
|
+
* codes, pass `{ cause }` here. When omitted, cause-bearing codes derive
|
|
69
|
+
* `{ cause }` from the legacy {@link originalError} argument.
|
|
52
70
|
*/
|
|
53
|
-
constructor(code:
|
|
71
|
+
constructor(code: TCode, message: string, originalError?: Error, context?: SerialErrorContextMap[TCode]);
|
|
54
72
|
/**
|
|
55
73
|
* Check if the error matches a specific error code.
|
|
56
74
|
*
|
|
57
75
|
* This is a convenience method for checking the error code without directly
|
|
58
|
-
* comparing the code property.
|
|
76
|
+
* comparing the code property. When this method returns `true`, TypeScript
|
|
77
|
+
* narrows `this.code` and `this.context` to the shapes defined for the
|
|
78
|
+
* provided `code` argument.
|
|
59
79
|
*
|
|
60
80
|
* @param code - The error code to check against
|
|
61
|
-
* @returns `true` if this error's code matches the provided
|
|
81
|
+
* @returns Type predicate: `true` if this error's code matches the provided
|
|
82
|
+
* code (and `this.code` / `this.context` are narrowed), `false` otherwise
|
|
62
83
|
*
|
|
63
84
|
* @example
|
|
64
85
|
* ```typescript
|
|
65
|
-
* if (error.is(SerialErrorCode.
|
|
66
|
-
* //
|
|
86
|
+
* if (error.is(SerialErrorCode.LINE_BUFFER_OVERFLOW)) {
|
|
87
|
+
* // error.code and error.context.maxChars are narrowed
|
|
67
88
|
* }
|
|
68
89
|
* ```
|
|
69
90
|
*/
|
|
70
|
-
is(code:
|
|
91
|
+
is<C extends SerialErrorCode>(code: C): this is SerialError<C>;
|
|
71
92
|
}
|
|
72
93
|
//# sourceMappingURL=serial-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial-error.d.ts","sourceRoot":"","sources":["../../src/errors/serial-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"serial-error.d.ts","sourceRoot":"","sources":["../../src/errors/serial-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,GACvB,CAAC;AAYF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,WAAW,CACtB,KAAK,SAAS,eAAe,GAAG,eAAe,CAC/C,SAAQ,KAAK;IACb;;;;;;OAMG;IACH,SAAgB,IAAI,EAAE,KAAK,CAAC;IAE5B;;;;;OAKG;IACH,SAAgB,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAEtD;;;;;;;;;OASG;IACH,SAAgB,aAAa,CAAC,EAAE,KAAK,CAAC;IAEtC;;;;;;;;;;;;OAYG;gBAED,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,KAAK,EACrB,OAAO,CAAC,EAAE,qBAAqB,CAAC,KAAK,CAAC;IAgCxC;;;;;;;;;;;;;;;;;;OAkBG;IACI,EAAE,CAAC,CAAC,SAAS,eAAe,EACjC,IAAI,EAAE,CAAC,GACN,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;CAG1B"}
|