@xxxaz/json-rpc-schema-typing 0.10.29 → 0.11.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.md +93 -4
- package/cjs/JsonRpcException.js +4 -5
- package/cjs/JsonRpcException.js.map +1 -1
- package/cjs/JsonRpcMethod.js +22 -8
- package/cjs/JsonRpcMethod.js.map +1 -1
- package/cjs/JsonRpcValidator.js +12 -4
- package/cjs/JsonRpcValidator.js.map +1 -1
- package/cjs/JsonSchemaValidator.js +12 -5
- package/cjs/JsonSchemaValidator.js.map +1 -1
- package/cjs/WebSocketWrapper.js +8 -3
- package/cjs/WebSocketWrapper.js.map +1 -1
- package/cjs/client/JsonRpcClient.js +77 -14
- package/cjs/client/JsonRpcClient.js.map +1 -1
- package/cjs/client/JsonRpcHttp2Client.js +8 -6
- package/cjs/client/JsonRpcHttp2Client.js.map +1 -1
- package/cjs/client/JsonRpcHttpClient.js +5 -5
- package/cjs/client/JsonRpcHttpClient.js.map +1 -1
- package/cjs/client/JsonRpcMessagePortClient.js +4 -5
- package/cjs/client/JsonRpcMessagePortClient.js.map +1 -1
- package/cjs/client/JsonRpcWebSocketClient.js +5 -6
- package/cjs/client/JsonRpcWebSocketClient.js.map +1 -1
- package/cjs/client/index.js +1 -1
- package/cjs/client/index.js.map +1 -1
- package/cjs/index.js +3 -3
- package/cjs/index.js.map +1 -1
- package/cjs/router/FileSystemRouter.js +5 -3
- package/cjs/router/FileSystemRouter.js.map +1 -1
- package/cjs/router/JsonRpcRouter.js.map +1 -1
- package/cjs/router/OpenRpc.js +141 -0
- package/cjs/router/OpenRpc.js.map +1 -0
- package/cjs/router/StaticRouter.js +41 -8
- package/cjs/router/StaticRouter.js.map +1 -1
- package/cjs/router/hashObject.js +7 -4
- package/cjs/router/hashObject.js.map +1 -1
- package/cjs/router/index.js +1 -0
- package/cjs/router/index.js.map +1 -1
- package/cjs/schemas/Complex.js +10 -13
- package/cjs/schemas/Complex.js.map +1 -1
- package/cjs/schemas/Primitive.js.map +1 -1
- package/cjs/schemas/Structure.js +5 -4
- package/cjs/schemas/Structure.js.map +1 -1
- package/cjs/schemas/index.js +1 -1
- package/cjs/schemas/index.js.map +1 -1
- package/cjs/server/JsonRpcHttpReceiver.js +17 -7
- package/cjs/server/JsonRpcHttpReceiver.js.map +1 -1
- package/cjs/server/JsonRpcMessagePortReceiver.js +3 -4
- package/cjs/server/JsonRpcMessagePortReceiver.js.map +1 -1
- package/cjs/server/JsonRpcServer.js +12 -6
- package/cjs/server/JsonRpcServer.js.map +1 -1
- package/cjs/server/JsonRpcWebSocketReceiver.js +3 -4
- package/cjs/server/JsonRpcWebSocketReceiver.js.map +1 -1
- package/cjs/server/index.js +1 -1
- package/cjs/server/index.js.map +1 -1
- package/cjs/utility.js +8 -14
- package/cjs/utility.js.map +1 -1
- package/esm/JsonRpcException.js +4 -5
- package/esm/JsonRpcException.js.map +1 -1
- package/esm/JsonRpcMethod.js +22 -8
- package/esm/JsonRpcMethod.js.map +1 -1
- package/esm/JsonRpcValidator.js +12 -4
- package/esm/JsonRpcValidator.js.map +1 -1
- package/esm/JsonSchemaValidator.js +13 -6
- package/esm/JsonSchemaValidator.js.map +1 -1
- package/esm/WebSocketWrapper.js +8 -3
- package/esm/WebSocketWrapper.js.map +1 -1
- package/esm/client/JsonRpcClient.js +78 -15
- package/esm/client/JsonRpcClient.js.map +1 -1
- package/esm/client/JsonRpcHttp2Client.js +10 -8
- package/esm/client/JsonRpcHttp2Client.js.map +1 -1
- package/esm/client/JsonRpcHttpClient.js +8 -8
- package/esm/client/JsonRpcHttpClient.js.map +1 -1
- package/esm/client/JsonRpcMessagePortClient.js +6 -7
- package/esm/client/JsonRpcMessagePortClient.js.map +1 -1
- package/esm/client/JsonRpcWebSocketClient.js +8 -9
- package/esm/client/JsonRpcWebSocketClient.js.map +1 -1
- package/esm/client/index.js +1 -1
- package/esm/client/index.js.map +1 -1
- package/esm/index.js +3 -3
- package/esm/index.js.map +1 -1
- package/esm/router/FileSystemRouter.js +7 -5
- package/esm/router/FileSystemRouter.js.map +1 -1
- package/esm/router/JsonRpcRouter.js +1 -1
- package/esm/router/JsonRpcRouter.js.map +1 -1
- package/esm/router/OpenRpc.js +138 -0
- package/esm/router/OpenRpc.js.map +1 -0
- package/esm/router/StaticRouter.js +42 -9
- package/esm/router/StaticRouter.js.map +1 -1
- package/esm/router/hashObject.js +7 -4
- package/esm/router/hashObject.js.map +1 -1
- package/esm/router/index.js +1 -0
- package/esm/router/index.js.map +1 -1
- package/esm/schemas/Complex.js +10 -13
- package/esm/schemas/Complex.js.map +1 -1
- package/esm/schemas/Primitive.js.map +1 -1
- package/esm/schemas/Structure.js +6 -5
- package/esm/schemas/Structure.js.map +1 -1
- package/esm/schemas/index.js +1 -1
- package/esm/schemas/index.js.map +1 -1
- package/esm/server/JsonRpcHttpReceiver.js +19 -9
- package/esm/server/JsonRpcHttpReceiver.js.map +1 -1
- package/esm/server/JsonRpcMessagePortReceiver.js +3 -4
- package/esm/server/JsonRpcMessagePortReceiver.js.map +1 -1
- package/esm/server/JsonRpcServer.js +15 -9
- package/esm/server/JsonRpcServer.js.map +1 -1
- package/esm/server/JsonRpcWebSocketReceiver.js +4 -5
- package/esm/server/JsonRpcWebSocketReceiver.js.map +1 -1
- package/esm/server/index.js +1 -1
- package/esm/server/index.js.map +1 -1
- package/esm/utility.js +8 -14
- package/esm/utility.js.map +1 -1
- package/package.json +4 -1
- package/src/JsonRpcException.ts +29 -26
- package/src/JsonRpcMethod.ts +173 -33
- package/src/JsonRpcValidator.ts +28 -15
- package/src/JsonSchemaValidator.ts +54 -25
- package/src/WebSocketWrapper.ts +36 -19
- package/src/client/JsonRpcClient.ts +188 -58
- package/src/client/JsonRpcHttp2Client.ts +55 -34
- package/src/client/JsonRpcHttpClient.ts +56 -30
- package/src/client/JsonRpcMessagePortClient.ts +36 -27
- package/src/client/JsonRpcWebSocketClient.ts +38 -21
- package/src/client/index.ts +1 -1
- package/src/index.ts +4 -7
- package/src/router/FileSystemRouter.ts +39 -21
- package/src/router/JsonRpcRouter.ts +50 -24
- package/src/router/OpenRpc.ts +262 -0
- package/src/router/StaticRouter.ts +115 -16
- package/src/router/hashObject.ts +11 -6
- package/src/router/index.ts +1 -0
- package/src/schemas/Complex.ts +33 -28
- package/src/schemas/Primitive.ts +0 -1
- package/src/schemas/Structure.ts +18 -9
- package/src/schemas/index.ts +1 -1
- package/src/server/JsonRpcHttpReceiver.ts +67 -29
- package/src/server/JsonRpcMessagePortReceiver.ts +27 -16
- package/src/server/JsonRpcServer.ts +59 -29
- package/src/server/JsonRpcWebSocketReceiver.ts +32 -25
- package/src/server/index.ts +1 -1
- package/src/types.ts +72 -43
- package/src/utility.ts +13 -19
- package/types/JsonRpcException.d.ts +2 -2
- package/types/JsonRpcMethod.d.ts +70 -3
- package/types/JsonRpcValidator.d.ts +3 -3
- package/types/JsonSchemaValidator.d.ts +2 -2
- package/types/WebSocketWrapper.d.ts +2 -2
- package/types/client/JsonRpcClient.d.ts +20 -9
- package/types/client/JsonRpcHttp2Client.d.ts +8 -6
- package/types/client/JsonRpcHttpClient.d.ts +7 -5
- package/types/client/JsonRpcMessagePortClient.d.ts +3 -3
- package/types/client/JsonRpcWebSocketClient.d.ts +4 -4
- package/types/client/index.d.ts +1 -1
- package/types/index.d.ts +3 -3
- package/types/router/FileSystemRouter.d.ts +3 -3
- package/types/router/JsonRpcRouter.d.ts +2 -2
- package/types/router/OpenRpc.d.ts +101 -0
- package/types/router/StaticRouter.d.ts +40 -4
- package/types/router/hashObject.d.ts +1 -1
- package/types/router/index.d.ts +1 -0
- package/types/schemas/Complex.d.ts +4 -4
- package/types/schemas/Structure.d.ts +5 -2
- package/types/schemas/index.d.ts +1 -1
- package/types/server/JsonRpcHttpReceiver.d.ts +2 -2
- package/types/server/JsonRpcMessagePortReceiver.d.ts +2 -2
- package/types/server/JsonRpcServer.d.ts +2 -2
- package/types/server/JsonRpcWebSocketReceiver.d.ts +1 -1
- package/types/server/index.d.ts +1 -1
- package/types/types.d.ts +12 -6
- package/types/utility.d.ts +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,95 @@
|
|
|
1
1
|
# json-rpc-schema-typing
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
3
|
+
> 最終更新: 2026-07-07
|
|
4
|
+
|
|
5
|
+
スキーマファーストな JSON-RPC 2.0 フレームワーク。**メソッドのスキーマ (JSON Schema) を単一の真実源**とし、
|
|
6
|
+
サーバの実行時検証とクライアントの静的型付けを**同じスキーマから導出**することで、端から端まで型安全を担保する。
|
|
7
|
+
|
|
8
|
+
## 設計思想 (型安全の担保)
|
|
9
|
+
|
|
10
|
+
- **スキーマが真実源**: 各メソッドの引数 (`$params`) / 返り値 (`$return`) を JSON Schema で宣言する。ここから TypeScript 型 (`FromSchema`) と実行時バリデーション (ajv) の両方が導出される。
|
|
11
|
+
- **検証はサーバに一本化**: サーバは受信した params と応答の return をスキーマで検証する。クライアントは基本これを信頼する。
|
|
12
|
+
- **クライアントは型で守る**: クライアントの `.rpc.<namespace>.<method>(params)` は呼び出しシグネチャ・返り値が静的に型付けされる。存在しないメソッド・誤った引数はコンパイルエラーになる。
|
|
13
|
+
- **`any` に落とさない**: クライアントの `Schema` ジェネリクスは `AnySchemaShape` で制約され (`= any` のデフォルトを持たない)。型引数を省いた構築は「素通しで any」にはならず、必ず適合検証を通る。
|
|
14
|
+
- **一時キャストは関数内に閉じる**: ランタイム型ガード (`JsonRpcMethodDefinition.isDefinition` 等) で検証した内容を局所キャストで扱う場合も、**関数の戻り値型を検証済みの型に固定**し、`unknown`/緩い型を呼び出し側へ漏らさない (例: `StaticRouter.resolveChild`)。
|
|
15
|
+
|
|
16
|
+
## 構成要素
|
|
17
|
+
|
|
18
|
+
### スキーマビルダ (`@xxxaz/json-rpc-schema-typing`)
|
|
19
|
+
|
|
20
|
+
`$Object` / `$Array` / `$Tuple` / `$String` / `$Number` / `$Integer` / `$Boolean` / `$Null` /
|
|
21
|
+
`$Or` / `$And` / `$Xor` / `$Optional` / `$Enum` / `$EnumKeys` / `$EnumValues` / `$Omit` / `$Override` / `$Expand`。
|
|
22
|
+
`FromSchema<typeof schema>` で JSON Schema から TS 型を取り出す。
|
|
23
|
+
|
|
24
|
+
### メソッド定義 (`JsonRpcMethodDefinition.builder`)
|
|
25
|
+
|
|
26
|
+
スキーマとハンドラを 1 つの定義に束ねる (fluent builder)。
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
export default JsonRpcMethodDefinition.builder
|
|
30
|
+
.contextClass(Context) // ハンドラの this 型
|
|
31
|
+
.meta({ summary: '...', description: '...', tags: ['ns'], result: { name: 'result' } }) // OpenRPC 用メタ (任意)
|
|
32
|
+
.paramsByName({ id: $Number }) // by-name ($Object) / .paramsByPosition(...) で by-position ($Tuple) / .params(raw) も可
|
|
33
|
+
.return($String)
|
|
34
|
+
.define(async function ({ id }) {
|
|
35
|
+
/* handler */ return 'ok';
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
- `.meta()` は OpenRPC 出力用の付随情報 (`summary` / `description` / `tags` / `result{name}` / `params` 別説明 / `errors` / `examples` / `deprecated`)。呼び出し型には影響しない。
|
|
40
|
+
|
|
41
|
+
### ルータ (`./router`)
|
|
42
|
+
|
|
43
|
+
メソッドパス → 定義への解決を担う。
|
|
44
|
+
|
|
45
|
+
- **`FileSystemRouter`**: ディレクトリを走査し、各ファイルの default export (`JsonRpcMethodDefinition`) をメソッドとして解決する (規約ベース)。
|
|
46
|
+
- **`StaticRouter`** (別名 **`LazyRouter`**): 明示的な route map から解決する。各エントリは
|
|
47
|
+
「定義そのもの」「入れ子 route map」「`Promise`」に加え、**lazy thunk `() => import('./x.js')`** を受ける。
|
|
48
|
+
thunk は呼び出し時に解決し、ES module の `default` を unwrap する (= handler の遅延ロードでコールドスタートを抑える)。
|
|
49
|
+
- **型ヘルパー** `SchemaTree<Routes>` / `LazyDef<T>`: route thunk map の**型**から「メソッドパス ↔ スキーマ」を束ねた単一型を導出する (クライアントのジェネリクスに渡せる)。
|
|
50
|
+
|
|
51
|
+
### サーバ (`./server`)
|
|
52
|
+
|
|
53
|
+
`JsonRpcServer` / `JsonRpcHttpReceiver` / `JsonRpcWebSocketReceiver` / `JsonRpcMessagePortReceiver`。
|
|
54
|
+
ルータで解決 → `$params` 検証 → ハンドラ実行 → `$return` 検証 → JSON-RPC 応答。
|
|
55
|
+
|
|
56
|
+
### クライアント (`./client`)
|
|
57
|
+
|
|
58
|
+
`JsonRpcClient` (基底) / `JsonRpcHttpClient` / `JsonRpcHttp2Client` / `JsonRpcWebSocketClient` / `JsonRpcMessagePortClient`。
|
|
59
|
+
|
|
60
|
+
- ジェネリクス `Schema extends AnySchemaShape` (必須・適合検証あり)。
|
|
61
|
+
- **`schema` 値は任意**。渡すと従来どおり実行時検証つき。**省略すると純粋なパスビルダ Proxy** として動作し (実行時検証なし・サーバ検証に一本化)、型は `Schema` ジェネリクスから導出される。
|
|
62
|
+
- 型のみを与える使い方 (route thunk map の型を `import type` で渡す) では、クライアント bundle に実行時スキーマ値もサーバコードも載らない。
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
// 実行時スキーマ値あり (従来)
|
|
66
|
+
new JsonRpcHttpClient({ schema, postUrl });
|
|
67
|
+
// 型のみ (route thunk map の型を渡す・値は渡さない)
|
|
68
|
+
import type { hostRoutes } from 'server/host/routes';
|
|
69
|
+
new JsonRpcHttpClient<typeof hostRoutes>({ postUrl });
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### OpenRPC 出力 (`./router` の emitter)
|
|
73
|
+
|
|
74
|
+
ルータ (全解決) + 各定義の `.meta()` から **OpenRPC Document** を生成する。`method.name` はパス、`paramStructure` は
|
|
75
|
+
`$params` の型 (object → by-name / array → by-position) から自動導出。document-level の `info` / `servers` / タグ定義は
|
|
76
|
+
emitter に渡す。`mcp` / `readonly` などのタグ規約で MCP ブリッジ等の下流に流用できる。
|
|
77
|
+
|
|
78
|
+
## 開発
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
npm run build # tsc (types/esm/cjs 3 config) + post-build
|
|
82
|
+
npm test # jest (実行時テスト + tsc 全体型検査 test/TypeCheck.test.ts)
|
|
83
|
+
npm run lint # biome check (静的解析)
|
|
84
|
+
npm run format # biome check --write (整形 + safe fix)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- **静的解析**: `biome.json` で設定。本ライブラリは型操作が主体なため `noExplicitAny` / `noParameterProperties` /
|
|
88
|
+
`noAssignInExpressions` はライブラリのイディオムとして off。整形は 4-space / single quote / trailing comma。
|
|
89
|
+
- **型検査**: `strict: true`。`test/TypeCheck.test.ts` が whole-program tsc を実行し、型レベルの回帰を検出する。
|
|
90
|
+
|
|
91
|
+
## TODO
|
|
92
|
+
|
|
93
|
+
- JWT 対応
|
|
94
|
+
- OpenRPC 出力のリファレンス整備 (examples / links / $ref 集約)
|
|
95
|
+
- npm CommonJS パッケージの整理
|
package/cjs/JsonRpcException.js
CHANGED
|
@@ -42,14 +42,14 @@ class JsonRpcException extends Error {
|
|
|
42
42
|
if (!JsonRpcException.isPrototypeOf(cls))
|
|
43
43
|
return;
|
|
44
44
|
const ex = cls;
|
|
45
|
-
if (!
|
|
46
|
-
|
|
45
|
+
if (!JsonRpcException.#defined.has(ex) && ex.code) {
|
|
46
|
+
JsonRpcException.#defined.set(ex, name);
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
static deserialize(error) {
|
|
51
51
|
const { code, message, data } = error;
|
|
52
|
-
for (const cls of
|
|
52
|
+
for (const cls of JsonRpcException.#defined.keys()) {
|
|
53
53
|
if (cls.code !== code)
|
|
54
54
|
continue;
|
|
55
55
|
return new cls(message, data);
|
|
@@ -64,8 +64,7 @@ class JsonRpcException extends Error {
|
|
|
64
64
|
}
|
|
65
65
|
data;
|
|
66
66
|
get name() {
|
|
67
|
-
return JsonRpcException.#defined.get(this.constructor)
|
|
68
|
-
?? this.constructor.name;
|
|
67
|
+
return (JsonRpcException.#defined.get(this.constructor) ?? this.constructor.name);
|
|
69
68
|
}
|
|
70
69
|
get code() {
|
|
71
70
|
return this.constructor.code;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonRpcException.js","sourceRoot":"","sources":["../src/JsonRpcException.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"JsonRpcException.js","sourceRoot":"","sources":["../src/JsonRpcException.ts"],"names":[],"mappings":"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"}
|
package/cjs/JsonRpcMethod.js
CHANGED
|
@@ -8,14 +8,23 @@ class JsonRpcMethodDefinition {
|
|
|
8
8
|
$params;
|
|
9
9
|
$return;
|
|
10
10
|
$contextClass;
|
|
11
|
+
$meta;
|
|
11
12
|
static method = methodKey;
|
|
12
13
|
[methodKey];
|
|
13
|
-
constructor(method, $params, $return, $contextClass) {
|
|
14
|
+
constructor(method, $params, $return, $contextClass, $meta) {
|
|
14
15
|
this.$params = $params;
|
|
15
16
|
this.$return = $return;
|
|
16
17
|
this.$contextClass = $contextClass;
|
|
18
|
+
this.$meta = $meta;
|
|
17
19
|
this[methodKey] = method;
|
|
18
20
|
}
|
|
21
|
+
// instanceof はモジュール実体が二重ロードされた際に一致しないため、duck-typing でも判定する
|
|
22
|
+
static isDefinition(obj) {
|
|
23
|
+
if (obj instanceof JsonRpcMethodDefinition)
|
|
24
|
+
return true;
|
|
25
|
+
const key = obj?.constructor?.method;
|
|
26
|
+
return typeof key === 'symbol' && obj[key] instanceof Function;
|
|
27
|
+
}
|
|
19
28
|
$apply(ctx, params) {
|
|
20
29
|
if (this.$contextClass && !(ctx instanceof this.$contextClass)) {
|
|
21
30
|
const passedCtxType = ctx?.constructor?.name ?? typeof ctx;
|
|
@@ -34,28 +43,33 @@ class DefinitionBuilder {
|
|
|
34
43
|
$contextClass;
|
|
35
44
|
$params;
|
|
36
45
|
$return;
|
|
37
|
-
|
|
46
|
+
$meta;
|
|
47
|
+
constructor($contextClass, $params, $return, $meta) {
|
|
38
48
|
this.$contextClass = $contextClass;
|
|
39
49
|
this.$params = $params;
|
|
40
50
|
this.$return = $return;
|
|
51
|
+
this.$meta = $meta;
|
|
41
52
|
}
|
|
42
53
|
define(method) {
|
|
43
|
-
return new JsonRpcMethodDefinition(method, this.$params, this.$return, this.$contextClass);
|
|
54
|
+
return new JsonRpcMethodDefinition(method, this.$params, this.$return, this.$contextClass, this.$meta);
|
|
44
55
|
}
|
|
45
56
|
contextClass(contextClass) {
|
|
46
|
-
return new DefinitionBuilder(contextClass, this.$params, this.$return);
|
|
57
|
+
return new DefinitionBuilder(contextClass, this.$params, this.$return, this.$meta);
|
|
58
|
+
}
|
|
59
|
+
meta(meta) {
|
|
60
|
+
return new DefinitionBuilder(this.$contextClass, this.$params, this.$return, meta);
|
|
47
61
|
}
|
|
48
62
|
params(params) {
|
|
49
|
-
return new DefinitionBuilder(this.$contextClass, params, this.$return);
|
|
63
|
+
return new DefinitionBuilder(this.$contextClass, params, this.$return, this.$meta);
|
|
50
64
|
}
|
|
51
65
|
paramsByName(params) {
|
|
52
|
-
return new DefinitionBuilder(this.$contextClass, (0, Structure_js_1.$Object)(params), this.$return);
|
|
66
|
+
return new DefinitionBuilder(this.$contextClass, (0, Structure_js_1.$Object)(params), this.$return, this.$meta);
|
|
53
67
|
}
|
|
54
68
|
paramsByPosition(...params) {
|
|
55
|
-
return new DefinitionBuilder(this.$contextClass, (0, Structure_js_1.$Tuple)(...params), this.$return);
|
|
69
|
+
return new DefinitionBuilder(this.$contextClass, (0, Structure_js_1.$Tuple)(...params), this.$return, this.$meta);
|
|
56
70
|
}
|
|
57
71
|
return(rtn) {
|
|
58
|
-
return new DefinitionBuilder(this.$contextClass, this.$params, rtn);
|
|
72
|
+
return new DefinitionBuilder(this.$contextClass, this.$params, rtn, this.$meta);
|
|
59
73
|
}
|
|
60
74
|
/** @deprecated paramsByPosition を使用してください */
|
|
61
75
|
paramsSchema(...params) {
|
package/cjs/JsonRpcMethod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonRpcMethod.js","sourceRoot":"","sources":["../src/JsonRpcMethod.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"JsonRpcMethod.js","sourceRoot":"","sources":["../src/JsonRpcMethod.ts"],"names":[],"mappings":"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"}
|
package/cjs/JsonRpcValidator.js
CHANGED
|
@@ -7,8 +7,12 @@ class JsonRpcValidator {
|
|
|
7
7
|
schema;
|
|
8
8
|
constructor(schema) {
|
|
9
9
|
this.schema = schema;
|
|
10
|
-
this.#paramValidator = schema.$params
|
|
11
|
-
|
|
10
|
+
this.#paramValidator = schema.$params
|
|
11
|
+
? new JsonSchemaValidator_js_1.JsonSchemaValidator(schema.$params)
|
|
12
|
+
: null;
|
|
13
|
+
this.#returnValidator = schema.$return
|
|
14
|
+
? new JsonSchemaValidator_js_1.JsonSchemaValidator(schema.$return)
|
|
15
|
+
: null;
|
|
12
16
|
}
|
|
13
17
|
#paramValidator;
|
|
14
18
|
#returnValidator;
|
|
@@ -17,7 +21,9 @@ class JsonRpcValidator {
|
|
|
17
21
|
return params;
|
|
18
22
|
const validated = this.#paramValidator.validate(params);
|
|
19
23
|
if (!validated.valid && validated.errors.length > 0) {
|
|
20
|
-
const message = validated.errors
|
|
24
|
+
const message = validated.errors
|
|
25
|
+
.map(({ instancePath, message }) => `params${instancePath ?? ''}: ${message}`)
|
|
26
|
+
.join('\n');
|
|
21
27
|
throw new JsonRpcException_js_1.InvalidParams(message, validated.errors);
|
|
22
28
|
}
|
|
23
29
|
return params;
|
|
@@ -27,7 +33,9 @@ class JsonRpcValidator {
|
|
|
27
33
|
return result;
|
|
28
34
|
const validated = this.#returnValidator.validate(result);
|
|
29
35
|
if (!validated.valid && validated.errors.length > 0) {
|
|
30
|
-
const message = validated.errors
|
|
36
|
+
const message = validated.errors
|
|
37
|
+
.map(({ instancePath, message }) => `return.${instancePath ?? ''}: ${message}`)
|
|
38
|
+
.join('\n');
|
|
31
39
|
throw new JsonRpcException_js_1.InvalidReturn(message, validated.errors);
|
|
32
40
|
}
|
|
33
41
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonRpcValidator.js","sourceRoot":"","sources":["../src/JsonRpcValidator.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"JsonRpcValidator.js","sourceRoot":"","sources":["../src/JsonRpcValidator.ts"],"names":[],"mappings":";;;AACA,+DAAqE;AAErE,qEAA+D;AAK/D,MAAa,gBAAgB;IAKJ;IAArB,YAAqB,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;QAC5B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO;YACjC,CAAC,CAAC,IAAI,4CAAmB,CAAC,MAAM,CAAC,OAAO,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO;YAClC,CAAC,CAAC,IAAI,4CAAmB,CAAC,MAAM,CAAC,OAAO,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IACD,eAAe,CAA6B;IAC5C,gBAAgB,CAA6B;IAE7C,cAAc,CAAC,MAAe;QAC1B,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO,MAA+B,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM;iBAC3B,GAAG,CACA,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,SAAS,YAAY,IAAI,EAAE,KAAK,OAAO,EAAE,CAChD;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,MAAM,IAAI,mCAAa,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,MAA+B,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,MAAe;QAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO,MAA+B,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM;iBAC3B,GAAG,CACA,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,UAAU,YAAY,IAAI,EAAE,KAAK,OAAO,EAAE,CACjD;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,MAAM,IAAI,mCAAa,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,MAA+B,CAAC;IAC3C,CAAC;CACJ;AA7CD,4CA6CC"}
|
|
@@ -45,7 +45,7 @@ function currentFile() {
|
|
|
45
45
|
return globalThis.__filename;
|
|
46
46
|
}
|
|
47
47
|
try {
|
|
48
|
-
return Function(
|
|
48
|
+
return Function('return import.meta.filename')();
|
|
49
49
|
}
|
|
50
50
|
catch (err) {
|
|
51
51
|
if (!(err instanceof SyntaxError))
|
|
@@ -60,7 +60,7 @@ function currentFile() {
|
|
|
60
60
|
function* serializeErrors(error) {
|
|
61
61
|
if (!error)
|
|
62
62
|
return;
|
|
63
|
-
for (const { propertyName, message, schemaPath, data, keyword, instancePath, params } of error) {
|
|
63
|
+
for (const { propertyName, message, schemaPath, data, keyword, instancePath, params, } of error) {
|
|
64
64
|
const err = {};
|
|
65
65
|
if (propertyName)
|
|
66
66
|
err.propertyName = propertyName;
|
|
@@ -116,12 +116,17 @@ class JsonSchemaValidator {
|
|
|
116
116
|
const id = crypto.randomUUID();
|
|
117
117
|
const listener = Promise.withResolvers();
|
|
118
118
|
listeners[id] = listener;
|
|
119
|
-
worker.postMessage({
|
|
119
|
+
worker.postMessage({
|
|
120
|
+
method: methodName,
|
|
121
|
+
schema: this.schema,
|
|
122
|
+
data,
|
|
123
|
+
id,
|
|
124
|
+
});
|
|
120
125
|
return listener.promise;
|
|
121
126
|
}
|
|
122
127
|
}
|
|
123
128
|
exports.JsonSchemaValidator = JsonSchemaValidator;
|
|
124
|
-
|
|
129
|
+
const workers = new WeakMap();
|
|
125
130
|
let listeners = {};
|
|
126
131
|
async function getWorker(key) {
|
|
127
132
|
if (workers.has(key))
|
|
@@ -162,7 +167,9 @@ function onMessage(data) {
|
|
|
162
167
|
}
|
|
163
168
|
}
|
|
164
169
|
function onError(err) {
|
|
165
|
-
Object.values(listeners).forEach(({ reject }) =>
|
|
170
|
+
Object.values(listeners).forEach(({ reject }) => {
|
|
171
|
+
reject(err);
|
|
172
|
+
});
|
|
166
173
|
listeners = {};
|
|
167
174
|
}
|
|
168
175
|
function onFaild(data) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonSchemaValidator.js","sourceRoot":"","sources":["../src/JsonSchemaValidator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"JsonSchemaValidator.js","sourceRoot":"","sources":["../src/JsonSchemaValidator.ts"],"names":[],"mappings":"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"}
|
package/cjs/WebSocketWrapper.js
CHANGED
|
@@ -45,7 +45,7 @@ class NodeWebSocketWrapper {
|
|
|
45
45
|
return JSON.parse(await new Blob([data]).text());
|
|
46
46
|
}
|
|
47
47
|
const json = data instanceof Array
|
|
48
|
-
? data.map(d => JSON.parse(d.toString())).join('')
|
|
48
|
+
? data.map((d) => JSON.parse(d.toString())).join('')
|
|
49
49
|
: data.toString();
|
|
50
50
|
return JSON.parse(json);
|
|
51
51
|
}
|
|
@@ -60,8 +60,13 @@ class BrowserWebSocketWrapper {
|
|
|
60
60
|
this.listener = listener;
|
|
61
61
|
this.closedListener = closedListener;
|
|
62
62
|
socket.addEventListener('message', this.#onMessage);
|
|
63
|
-
socket.addEventListener('close', ev => {
|
|
64
|
-
closedListener({
|
|
63
|
+
socket.addEventListener('close', (ev) => {
|
|
64
|
+
closedListener({
|
|
65
|
+
code: ev.code,
|
|
66
|
+
reason: ev.reason,
|
|
67
|
+
wasClean: ev.wasClean,
|
|
68
|
+
wrapper: this,
|
|
69
|
+
});
|
|
65
70
|
this.socket.removeEventListener('message', this.#onMessage);
|
|
66
71
|
});
|
|
67
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketWrapper.js","sourceRoot":"","sources":["../src/WebSocketWrapper.ts"],"names":[],"mappings":";;;AAIA,
|
|
1
|
+
{"version":3,"file":"WebSocketWrapper.js","sourceRoot":"","sources":["../src/WebSocketWrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.JsonRpcClient = exports.$methodPath = exports.$requestStack = exports.$generateId = void 0;
|
|
4
4
|
const stream_api_json_1 = require("@xxxaz/stream-api-json");
|
|
5
|
+
const utility_1 = require("@xxxaz/stream-api-json/utility");
|
|
5
6
|
const JsonRpcException_js_1 = require("../JsonRpcException.js");
|
|
6
7
|
const JsonRpcValidator_js_1 = require("../JsonRpcValidator.js");
|
|
7
|
-
const utility_1 = require("@xxxaz/stream-api-json/utility");
|
|
8
8
|
const utility_js_1 = require("../utility.js");
|
|
9
9
|
exports.$generateId = Symbol('GenereteId');
|
|
10
10
|
exports.$requestStack = Symbol('RequestsStack');
|
|
@@ -18,7 +18,8 @@ class JsonRpcClient {
|
|
|
18
18
|
this.#schema = options.schema;
|
|
19
19
|
this.#postRpc = options.post;
|
|
20
20
|
this.#postBatch = options.batch ?? options.post;
|
|
21
|
-
this[exports.$generateId] =
|
|
21
|
+
this[exports.$generateId] =
|
|
22
|
+
options.generateId ?? JsonRpcClient.defaultIdGenerator;
|
|
22
23
|
}
|
|
23
24
|
static async defaultIdGenerator() {
|
|
24
25
|
return crypto.randomUUID();
|
|
@@ -37,7 +38,10 @@ class JsonRpcClient {
|
|
|
37
38
|
async postBatch(requests) {
|
|
38
39
|
const waits = new Map(requests
|
|
39
40
|
.filter(({ request: { id } }) => id != null)
|
|
40
|
-
.map(({ request, promise }) => [
|
|
41
|
+
.map(({ request, promise }) => [
|
|
42
|
+
request.id,
|
|
43
|
+
{ request, promise },
|
|
44
|
+
]));
|
|
41
45
|
const noWaits = new Set(requests.filter(({ request: { id } }) => id == null));
|
|
42
46
|
try {
|
|
43
47
|
const requestList = requests.map(({ request: r }) => r);
|
|
@@ -46,7 +50,7 @@ class JsonRpcClient {
|
|
|
46
50
|
if (streamJson instanceof stream_api_json_1.ParsingJsonArray) {
|
|
47
51
|
const results = [];
|
|
48
52
|
for await (const responseStream of streamJson) {
|
|
49
|
-
const res = await responseStream.all() ?? {};
|
|
53
|
+
const res = (await responseStream.all()) ?? {};
|
|
50
54
|
results.push(res);
|
|
51
55
|
const { id, error } = res;
|
|
52
56
|
const { promise } = waits.get(id) ?? {};
|
|
@@ -98,22 +102,29 @@ class JsonRpcClient {
|
|
|
98
102
|
for (const { promise, request } of waits.values()) {
|
|
99
103
|
promise.reject(new JsonRpcException_js_1.ClientUncaughtError('Orphan rpc request.', request));
|
|
100
104
|
}
|
|
101
|
-
noWaits.forEach(({ promise }) =>
|
|
105
|
+
noWaits.forEach(({ promise }) => {
|
|
106
|
+
promise.resolve();
|
|
107
|
+
});
|
|
102
108
|
}
|
|
103
109
|
}
|
|
110
|
+
#proxy(stack) {
|
|
111
|
+
return this.#schema
|
|
112
|
+
? proxyRpc(stack, this.#schema)
|
|
113
|
+
: proxyPathRpc(stack);
|
|
114
|
+
}
|
|
104
115
|
#rpc;
|
|
105
116
|
get rpc() {
|
|
106
|
-
return this.#rpc ??=
|
|
117
|
+
return (this.#rpc ??= this.#proxy(new NoStack(this)));
|
|
107
118
|
}
|
|
108
119
|
#batch;
|
|
109
120
|
get batch() {
|
|
110
|
-
return this.#batch ??=
|
|
121
|
+
return (this.#batch ??= this.#proxy(new BatchStack(this)));
|
|
111
122
|
}
|
|
112
123
|
kickBatch() {
|
|
113
124
|
return this.batch[exports.$requestStack].kick();
|
|
114
125
|
}
|
|
115
126
|
lazy(delayMs = 0) {
|
|
116
|
-
return
|
|
127
|
+
return this.#proxy(new LazyStack(this, delayMs));
|
|
117
128
|
}
|
|
118
129
|
}
|
|
119
130
|
exports.JsonRpcClient = JsonRpcClient;
|
|
@@ -126,7 +137,9 @@ class RequestsStack {
|
|
|
126
137
|
const jsonrpc = '2.0';
|
|
127
138
|
const method = methodPath.join('.');
|
|
128
139
|
const id = requireId ? await this.client[exports.$generateId]() : null;
|
|
129
|
-
return id
|
|
140
|
+
return id
|
|
141
|
+
? { jsonrpc, id, method, params }
|
|
142
|
+
: { jsonrpc, method, params };
|
|
130
143
|
}
|
|
131
144
|
}
|
|
132
145
|
class NoStack extends RequestsStack {
|
|
@@ -142,8 +155,7 @@ class BatchStack extends RequestsStack {
|
|
|
142
155
|
}
|
|
143
156
|
stack(requireId, methodPath, params) {
|
|
144
157
|
const resolver = new utility_1.LazyResolvers();
|
|
145
|
-
const wait = this.buildRequest(requireId, methodPath, params)
|
|
146
|
-
.then((request) => ({ request, promise: resolver }));
|
|
158
|
+
const wait = this.buildRequest(requireId, methodPath, params).then((request) => ({ request, promise: resolver }));
|
|
147
159
|
this.#requests.push(wait);
|
|
148
160
|
return resolver.promise;
|
|
149
161
|
}
|
|
@@ -184,10 +196,60 @@ function proxyRpc(stack, schema, methodPath = []) {
|
|
|
184
196
|
const cache = { [exports.$requestStack]: stack };
|
|
185
197
|
return new Proxy(schema, {
|
|
186
198
|
get(_, key) {
|
|
187
|
-
return cache[key] ??= pickProperty(key);
|
|
188
|
-
}
|
|
199
|
+
return (cache[key] ??= pickProperty(key));
|
|
200
|
+
},
|
|
189
201
|
});
|
|
190
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* スキーマ値を持たない純パスビルダ Proxy。
|
|
205
|
+
* プロパティアクセスでメソッドパスを積み、呼び出しで送信する。実行時検証は行わない。
|
|
206
|
+
* - 単一引数が配列以外のオブジェクトの場合は by-name (params オブジェクト) として送信
|
|
207
|
+
* - それ以外は by-position (params 配列) として送信
|
|
208
|
+
*/
|
|
209
|
+
function proxyPathRpc(stack, methodPath = []) {
|
|
210
|
+
const cache = {};
|
|
211
|
+
const trigger = pathTriggerFunction(stack, methodPath);
|
|
212
|
+
return new Proxy(trigger, {
|
|
213
|
+
get(target, key) {
|
|
214
|
+
if (key === exports.$requestStack)
|
|
215
|
+
return stack;
|
|
216
|
+
if (key === exports.$methodPath)
|
|
217
|
+
return methodPath;
|
|
218
|
+
// await 誤爆 (thenable 判定) や JSON.stringify を子パス化しない
|
|
219
|
+
if (typeof key !== 'string' || key === 'then' || key === 'toJSON')
|
|
220
|
+
return Reflect.get(target, key);
|
|
221
|
+
if (key === 'notice')
|
|
222
|
+
return target.notice;
|
|
223
|
+
return (cache[key] ??= proxyPathRpc(stack, [...methodPath, key]));
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
function pathTriggerFunction(stack, methodPath) {
|
|
228
|
+
const normalizeParams = (params) => params.length === 1 &&
|
|
229
|
+
params[0] !== null &&
|
|
230
|
+
typeof params[0] === 'object' &&
|
|
231
|
+
!Array.isArray(params[0])
|
|
232
|
+
? params[0]
|
|
233
|
+
: params;
|
|
234
|
+
const assertPath = () => {
|
|
235
|
+
if (!methodPath.length)
|
|
236
|
+
throw new JsonRpcException_js_1.ClientUncaughtError('Method path is empty.', null);
|
|
237
|
+
};
|
|
238
|
+
const fn = async (...params) => {
|
|
239
|
+
assertPath();
|
|
240
|
+
const response = (await stack.stack(true, methodPath, normalizeParams(params))) ??
|
|
241
|
+
{};
|
|
242
|
+
if ('error' in response) {
|
|
243
|
+
throw JsonRpcException_js_1.JsonRpcException.deserialize(response.error);
|
|
244
|
+
}
|
|
245
|
+
return response.result;
|
|
246
|
+
};
|
|
247
|
+
fn.notice = (...params) => {
|
|
248
|
+
assertPath();
|
|
249
|
+
stack.stack(false, methodPath, normalizeParams(params));
|
|
250
|
+
};
|
|
251
|
+
return fn;
|
|
252
|
+
}
|
|
191
253
|
function triggerFunction(stack, schema, methodPath) {
|
|
192
254
|
const validator = new JsonRpcValidator_js_1.JsonRpcValidator(schema);
|
|
193
255
|
const validateParams = (params) => {
|
|
@@ -205,7 +267,8 @@ function triggerFunction(stack, schema, methodPath) {
|
|
|
205
267
|
};
|
|
206
268
|
const fn = async (...params) => {
|
|
207
269
|
params = validateParams(params);
|
|
208
|
-
const response = await stack.stack(true, methodPath, params) ??
|
|
270
|
+
const response = (await stack.stack(true, methodPath, params)) ??
|
|
271
|
+
{};
|
|
209
272
|
if ('error' in response) {
|
|
210
273
|
throw JsonRpcException_js_1.JsonRpcException.deserialize(response.error);
|
|
211
274
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonRpcClient.js","sourceRoot":"","sources":["../../src/client/JsonRpcClient.ts"],"names":[],"mappings":";;;AAAA,4DAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"JsonRpcClient.js","sourceRoot":"","sources":["../../src/client/JsonRpcClient.ts"],"names":[],"mappings":"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"}
|