@xxxaz/json-rpc-schema-typing 0.11.0 → 0.11.1

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.
@@ -72,6 +72,7 @@ function unwrapModule(loaded) {
72
72
  // module namespace ({ default }) と runtime 判定できた場合のみ default を採用する局所キャスト
73
73
  return loaded.default;
74
74
  }
75
+ // lazy thunk の解決結果は dispatch 型では unknown。実行時判定を経て戻り値型を固定する局所キャスト。
75
76
  return loaded;
76
77
  }
77
78
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"StaticRouter.js","sourceRoot":"","sources":["../../src/router/StaticRouter.ts"],"names":[],"mappings":";;;AAAA,0DAG6B;AAC7B,yDAAkE;AAqDlE,MAAa,YAAkB,SAAQ,gCAAkB;IACxB;IAA7B,YAA6B,QAAuB;QAChD,KAAK,EAAE,CAAC;QADiB,aAAQ,GAAR,QAAQ,CAAe;IAEpD,CAAC;IAED,MAAM,GAAG,EAAqB,CAAC;IAE/B;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CACd,UAAkB;QAIlB,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,MAAM,GACR,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;QAC9D,MAAM,QAAQ,GAAG,YAAY,CAAM,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,IAAI,0CAAuB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,0EAA0E;YAC1E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,0DAA0D;QAC1D,2DAA2D;QAC3D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,YAAY,CAC9C,QAAyB,CAC5B,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,OAAO,CACT,UAA6B;QAI7B,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,OAAO,UAAU,KAAK,QAAQ;YAAE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,0CAAuB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,2EAA2E;QAC3E,OAAQ,KAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,CAAC,SAAS;QACZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;CACJ;AAjED,oCAiEC;AAED;;;;GAIG;AACH,SAAS,YAAY,CACjB,MAAoE;IAEpE,IACI,MAAM;QACN,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,0CAAuB,CAAC,YAAY,CAAC,MAAM,CAAC;QAC7C,SAAS,IAAI,MAAM,EACrB,CAAC;QACC,yEAAyE;QACzE,OAAQ,MAAwC,CAAC,OAAO,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACU,QAAA,UAAU,GAAG,YAAY,CAAC"}
1
+ {"version":3,"file":"StaticRouter.js","sourceRoot":"","sources":["../../src/router/StaticRouter.ts"],"names":[],"mappings":";;;AAAA,0DAG6B;AAC7B,yDAAkE;AA8DlE,MAAa,YAAkB,SAAQ,gCAAkB;IACxB;IAA7B,YAA6B,QAAuB;QAChD,KAAK,EAAE,CAAC;QADiB,aAAQ,GAAR,QAAQ,CAAe;IAEpD,CAAC;IAED,MAAM,GAAG,EAAqB,CAAC;IAE/B;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CACd,UAAkB;QAIlB,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,MAAM,GACR,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;QAC9D,MAAM,QAAQ,GAAG,YAAY,CAAM,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,IAAI,0CAAuB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,0EAA0E;YAC1E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,0DAA0D;QAC1D,2DAA2D;QAC3D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,YAAY,CAC9C,QAAyB,CAC5B,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,OAAO,CACT,UAA6B;QAI7B,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,OAAO,UAAU,KAAK,QAAQ;YAAE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,0CAAuB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,2EAA2E;QAC3E,OAAQ,KAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,CAAC,SAAS;QACZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;CACJ;AAjED,oCAiEC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAM,MAAe;IACtC,IACI,MAAM;QACN,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,0CAAuB,CAAC,YAAY,CAAC,MAAM,CAAC;QAC7C,SAAS,IAAI,MAAM,EACrB,CAAC;QACC,yEAAyE;QACzE,OAAQ,MAAwC,CAAC,OAAO,CAAC;IAC7D,CAAC;IACD,kEAAkE;IAClE,OAAO,MAAsC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACU,QAAA,UAAU,GAAG,YAAY,CAAC"}
@@ -68,6 +68,7 @@ function unwrapModule(loaded) {
68
68
  // module namespace ({ default }) と runtime 判定できた場合のみ default を採用する局所キャスト
69
69
  return loaded.default;
70
70
  }
71
+ // lazy thunk の解決結果は dispatch 型では unknown。実行時判定を経て戻り値型を固定する局所キャスト。
71
72
  return loaded;
72
73
  }
73
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"StaticRouter.js","sourceRoot":"","sources":["../../src/router/StaticRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StaticRouter.js","sourceRoot":"","sources":["../../src/router/StaticRouter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xxxaz/json-rpc-schema-typing",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "",
5
5
  "author": "xxx Inc.",
6
6
  "license": "MIT",
@@ -9,11 +9,20 @@ export type StaticRoute<Ctx> =
9
9
  | JsonRpcMethodDefinition<Ctx, any, any>;
10
10
  /**
11
11
  * `() => import('./path.js')` 形式の遅延エントリ。
12
- * 解決結果が `default` を持つ場合 (ES module) は default export を採用する。
12
+ * 解決結果 (module) は `resolveChild` 内で `isDefinition` ガードにより検証し、
13
+ * 戻り値の型を `JsonRpcMethodDefinition | StaticRouter | null` に固定する。
14
+ *
15
+ * 解決結果の型を `unknown` にしているのは意図的。ここを `StaticRoute<Ctx>`
16
+ * (= `RouteMap<Ctx> | JsonRpcMethodDefinition`) にすると、具体 route リテラルとの
17
+ * assignability 検査で thunk の `{ default: MethodDef }` が
18
+ * `StaticRoute → RouteMap → MethodDef の $params/$return` を再帰展開し、
19
+ * 単一メソッドの route map でも TS2589 (型 instantiation が深すぎる) を誘発する。
20
+ * dispatch 型はモジュール実体の形を静的に知り得ず実行時ガードに委ねるため、
21
+ * ここを `unknown` に固定するのは型安全の毀損ではなく責務の適切な分離。
22
+ * client 側の引数・返り値型は `SchemaTree<typeof routes>` が具体リテラルから
23
+ * 導出する別経路であり、本型に一切影響されない。
13
24
  */
14
- export type LazyRouteThunk<Ctx> = () => Promise<
15
- StaticRoute<Ctx> | { default: StaticRoute<Ctx> } | undefined
16
- >;
25
+ export type LazyRouteThunk<Ctx> = () => Promise<unknown>;
17
26
  export type RouteMap<Ctx> = {
18
27
  readonly [path: string]:
19
28
  | StaticRoute<Ctx>
@@ -127,9 +136,7 @@ export class StaticRouter<Ctx> extends JsonRpcRouter<Ctx> {
127
136
  * 「default を持つ module namespace なら default を採用」という一時的なランタイム判定を
128
137
  * この関数内に閉じ込め、戻り値は `StaticRoute<Ctx>|undefined` に固定する。
129
138
  */
130
- function unwrapModule<Ctx>(
131
- loaded: StaticRoute<Ctx> | { default: StaticRoute<Ctx> } | undefined,
132
- ): StaticRoute<Ctx> | undefined {
139
+ function unwrapModule<Ctx>(loaded: unknown): StaticRoute<Ctx> | undefined {
133
140
  if (
134
141
  loaded &&
135
142
  typeof loaded === 'object' &&
@@ -139,7 +146,8 @@ function unwrapModule<Ctx>(
139
146
  // module namespace ({ default }) と runtime 判定できた場合のみ default を採用する局所キャスト
140
147
  return (loaded as { default: StaticRoute<Ctx> }).default;
141
148
  }
142
- return loaded;
149
+ // lazy thunk の解決結果は dispatch 型では unknown。実行時判定を経て戻り値型を固定する局所キャスト。
150
+ return loaded as StaticRoute<Ctx> | undefined;
143
151
  }
144
152
 
145
153
  /**
@@ -3,11 +3,20 @@ import { JsonRpcRouter } from './JsonRpcRouter.js';
3
3
  export type StaticRoute<Ctx> = RouteMap<Ctx> | JsonRpcMethodDefinition<Ctx, any, any>;
4
4
  /**
5
5
  * `() => import('./path.js')` 形式の遅延エントリ。
6
- * 解決結果が `default` を持つ場合 (ES module) は default export を採用する。
6
+ * 解決結果 (module) は `resolveChild` 内で `isDefinition` ガードにより検証し、
7
+ * 戻り値の型を `JsonRpcMethodDefinition | StaticRouter | null` に固定する。
8
+ *
9
+ * 解決結果の型を `unknown` にしているのは意図的。ここを `StaticRoute<Ctx>`
10
+ * (= `RouteMap<Ctx> | JsonRpcMethodDefinition`) にすると、具体 route リテラルとの
11
+ * assignability 検査で thunk の `{ default: MethodDef }` が
12
+ * `StaticRoute → RouteMap → MethodDef の $params/$return` を再帰展開し、
13
+ * 単一メソッドの route map でも TS2589 (型 instantiation が深すぎる) を誘発する。
14
+ * dispatch 型はモジュール実体の形を静的に知り得ず実行時ガードに委ねるため、
15
+ * ここを `unknown` に固定するのは型安全の毀損ではなく責務の適切な分離。
16
+ * client 側の引数・返り値型は `SchemaTree<typeof routes>` が具体リテラルから
17
+ * 導出する別経路であり、本型に一切影響されない。
7
18
  */
8
- export type LazyRouteThunk<Ctx> = () => Promise<StaticRoute<Ctx> | {
9
- default: StaticRoute<Ctx>;
10
- } | undefined>;
19
+ export type LazyRouteThunk<Ctx> = () => Promise<unknown>;
11
20
  export type RouteMap<Ctx> = {
12
21
  readonly [path: string]: StaticRoute<Ctx> | Promise<StaticRoute<Ctx> | undefined> | LazyRouteThunk<Ctx>;
13
22
  };