@yuhere/js-jsonrpc2 0.0.0-stage → 2.1.2

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.
Files changed (174) hide show
  1. package/README.md +277 -2
  2. package/SKILL.md +237 -0
  3. package/dist/cli/cli.d.ts +3 -0
  4. package/dist/cli/cli.d.ts.map +1 -0
  5. package/dist/cli/cli.js +132 -0
  6. package/dist/cli/cli.js.map +1 -0
  7. package/dist/cli/demo-methods.d.ts +10 -0
  8. package/dist/cli/demo-methods.d.ts.map +1 -0
  9. package/dist/cli/demo-methods.js +477 -0
  10. package/dist/cli/demo-methods.js.map +1 -0
  11. package/dist/cli/express.d.ts +2 -0
  12. package/dist/cli/express.d.ts.map +1 -0
  13. package/dist/cli/express.js +42 -0
  14. package/dist/cli/express.js.map +1 -0
  15. package/dist/cli/stdio.d.ts +2 -0
  16. package/dist/cli/stdio.d.ts.map +1 -0
  17. package/dist/cli/stdio.js +5 -0
  18. package/dist/cli/stdio.js.map +1 -0
  19. package/dist/core/Repository.d.ts +24 -0
  20. package/dist/core/Repository.d.ts.map +1 -0
  21. package/dist/core/Repository.js +153 -0
  22. package/dist/core/Repository.js.map +1 -0
  23. package/dist/core/convert.d.ts +4 -0
  24. package/dist/core/convert.d.ts.map +1 -0
  25. package/dist/core/convert.js +29 -0
  26. package/dist/core/convert.js.map +1 -0
  27. package/dist/core/descriptor.d.ts +27 -0
  28. package/dist/core/descriptor.d.ts.map +1 -0
  29. package/dist/core/descriptor.js +83 -0
  30. package/dist/core/descriptor.js.map +1 -0
  31. package/dist/core/index.d.ts +4 -0
  32. package/dist/core/index.d.ts.map +1 -0
  33. package/dist/core/index.js +3 -0
  34. package/dist/core/index.js.map +1 -0
  35. package/dist/core/permission.d.ts +4 -0
  36. package/dist/core/permission.d.ts.map +1 -0
  37. package/dist/core/permission.js +18 -0
  38. package/dist/core/permission.js.map +1 -0
  39. package/dist/core/spec-check.d.ts +3 -0
  40. package/dist/core/spec-check.d.ts.map +1 -0
  41. package/dist/core/spec-check.js +11 -0
  42. package/dist/core/spec-check.js.map +1 -0
  43. package/dist/core/system-methods.d.ts +3 -0
  44. package/dist/core/system-methods.d.ts.map +1 -0
  45. package/dist/core/system-methods.js +76 -0
  46. package/dist/core/system-methods.js.map +1 -0
  47. package/dist/errors/RpcError.d.ts +9 -0
  48. package/dist/errors/RpcError.d.ts.map +1 -0
  49. package/dist/errors/RpcError.js +23 -0
  50. package/dist/errors/RpcError.js.map +1 -0
  51. package/dist/errors/codes.d.ts +7 -0
  52. package/dist/errors/codes.d.ts.map +1 -0
  53. package/dist/errors/codes.js +7 -0
  54. package/dist/errors/codes.js.map +1 -0
  55. package/dist/errors/index.d.ts +3 -0
  56. package/dist/errors/index.d.ts.map +1 -0
  57. package/dist/errors/index.js +3 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/index.d.ts +18 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +17 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/schema/index.d.ts +4 -0
  64. package/dist/schema/index.d.ts.map +1 -0
  65. package/dist/schema/index.js +4 -0
  66. package/dist/schema/index.js.map +1 -0
  67. package/dist/schema/json/index.d.ts +19 -0
  68. package/dist/schema/json/index.d.ts.map +1 -0
  69. package/dist/schema/json/index.js +6 -0
  70. package/dist/schema/json/index.js.map +1 -0
  71. package/dist/schema/json/marker.d.ts +23 -0
  72. package/dist/schema/json/marker.d.ts.map +1 -0
  73. package/dist/schema/json/marker.js +27 -0
  74. package/dist/schema/json/marker.js.map +1 -0
  75. package/dist/schema/json/primitives.d.ts +202 -0
  76. package/dist/schema/json/primitives.d.ts.map +1 -0
  77. package/dist/schema/json/primitives.js +598 -0
  78. package/dist/schema/json/primitives.js.map +1 -0
  79. package/dist/schema/primitives.d.ts +25 -0
  80. package/dist/schema/primitives.d.ts.map +1 -0
  81. package/dist/schema/primitives.js +153 -0
  82. package/dist/schema/primitives.js.map +1 -0
  83. package/dist/schema/rpc.d.ts +21 -0
  84. package/dist/schema/rpc.d.ts.map +1 -0
  85. package/dist/schema/rpc.js +17 -0
  86. package/dist/schema/rpc.js.map +1 -0
  87. package/dist/schema/z/protocol.d.ts +9 -0
  88. package/dist/schema/z/protocol.d.ts.map +1 -0
  89. package/dist/schema/z/protocol.js +9 -0
  90. package/dist/schema/z/protocol.js.map +1 -0
  91. package/dist/schema/z/register.d.ts +9 -0
  92. package/dist/schema/z/register.d.ts.map +1 -0
  93. package/dist/schema/z/register.js +21 -0
  94. package/dist/schema/z/register.js.map +1 -0
  95. package/dist/stream/index.d.ts +3 -0
  96. package/dist/stream/index.d.ts.map +1 -0
  97. package/dist/stream/index.js +2 -0
  98. package/dist/stream/index.js.map +1 -0
  99. package/dist/stream/stringify-stream.d.ts +15 -0
  100. package/dist/stream/stringify-stream.d.ts.map +1 -0
  101. package/dist/stream/stringify-stream.js +322 -0
  102. package/dist/stream/stringify-stream.js.map +1 -0
  103. package/dist/stream/stringify.d.ts +19 -0
  104. package/dist/stream/stringify.d.ts.map +1 -0
  105. package/dist/stream/stringify.js +217 -0
  106. package/dist/stream/stringify.js.map +1 -0
  107. package/dist/transport/express/body.d.ts +9 -0
  108. package/dist/transport/express/body.d.ts.map +1 -0
  109. package/dist/transport/express/body.js +28 -0
  110. package/dist/transport/express/body.js.map +1 -0
  111. package/dist/transport/express/index.d.ts +3 -0
  112. package/dist/transport/express/index.d.ts.map +1 -0
  113. package/dist/transport/express/index.js +2 -0
  114. package/dist/transport/express/index.js.map +1 -0
  115. package/dist/transport/express/middleware.d.ts +12 -0
  116. package/dist/transport/express/middleware.d.ts.map +1 -0
  117. package/dist/transport/express/middleware.js +73 -0
  118. package/dist/transport/express/middleware.js.map +1 -0
  119. package/dist/transport/express/respond.d.ts +4 -0
  120. package/dist/transport/express/respond.d.ts.map +1 -0
  121. package/dist/transport/express/respond.js +125 -0
  122. package/dist/transport/express/respond.js.map +1 -0
  123. package/dist/transport/stdio/index.d.ts +2 -0
  124. package/dist/transport/stdio/index.d.ts.map +1 -0
  125. package/dist/transport/stdio/index.js +2 -0
  126. package/dist/transport/stdio/index.js.map +1 -0
  127. package/dist/transport/stdio/middleware.d.ts +34 -0
  128. package/dist/transport/stdio/middleware.d.ts.map +1 -0
  129. package/dist/transport/stdio/middleware.js +274 -0
  130. package/dist/transport/stdio/middleware.js.map +1 -0
  131. package/dist/transport/ws/index.d.ts +3 -0
  132. package/dist/transport/ws/index.d.ts.map +1 -0
  133. package/dist/transport/ws/index.js +3 -0
  134. package/dist/transport/ws/index.js.map +1 -0
  135. package/dist/transport/ws/middleware.d.ts +25 -0
  136. package/dist/transport/ws/middleware.d.ts.map +1 -0
  137. package/dist/transport/ws/middleware.js +209 -0
  138. package/dist/transport/ws/middleware.js.map +1 -0
  139. package/dist/transport/ws/standalone.d.ts +22 -0
  140. package/dist/transport/ws/standalone.d.ts.map +1 -0
  141. package/dist/transport/ws/standalone.js +39 -0
  142. package/dist/transport/ws/standalone.js.map +1 -0
  143. package/dist/types.d.ts +75 -0
  144. package/dist/types.d.ts.map +1 -0
  145. package/dist/types.js +2 -0
  146. package/dist/types.js.map +1 -0
  147. package/htdoc/assets/index-CQr-lnlD.js +9286 -0
  148. package/htdoc/assets/index-CQr-lnlD.js.map +1 -0
  149. package/htdoc/assets/index-hcP2-9jw.css +729 -0
  150. package/htdoc/index.html +13 -0
  151. package/package.json +89 -3
  152. package/webui/index.html +12 -0
  153. package/webui/src/App.tsx +56 -0
  154. package/webui/src/api/httpTransport.ts +148 -0
  155. package/webui/src/api/paramForm.ts +79 -0
  156. package/webui/src/api/rpc.ts +57 -0
  157. package/webui/src/api/schema.ts +12 -0
  158. package/webui/src/api/types.ts +16 -0
  159. package/webui/src/api/wsTransport.ts +305 -0
  160. package/webui/src/components/MethodDetail.tsx +43 -0
  161. package/webui/src/components/MethodTree.tsx +118 -0
  162. package/webui/src/components/SchemaForm.tsx +696 -0
  163. package/webui/src/components/SchemaView.tsx +151 -0
  164. package/webui/src/components/TestPanel.tsx +279 -0
  165. package/webui/src/components/Toolbar.tsx +70 -0
  166. package/webui/src/hooks/useMethodDetail.ts +61 -0
  167. package/webui/src/hooks/useMethods.ts +27 -0
  168. package/webui/src/main.tsx +13 -0
  169. package/webui/src/styles/geek.css +729 -0
  170. package/webui/src/theme/ThemeProvider.tsx +79 -0
  171. package/webui/src/vite-env.d.ts +1 -0
  172. package/webui/tsconfig.json +34 -0
  173. package/webui/tsconfig.node.json +13 -0
  174. package/webui/vite.config.ts +15 -0
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ import { Repository, createRepository } from './core/Repository';
2
+ import { RPCError } from './errors/RPCError';
3
+ import * as codes from './errors/codes';
4
+ import { s } from './schema/json';
5
+ export { Repository, createRepository };
6
+ export { RPCError };
7
+ export { codes };
8
+ export { s };
9
+ export * from './types';
10
+ // ################
11
+ import { createExpressRouter } from './transport/express';
12
+ export { createExpressRouter };
13
+ // ################
14
+ import { attachWebSocket, createWebSocketServer } from './transport/ws';
15
+ import { serveStdio } from './transport/stdio';
16
+ export { attachWebSocket, createWebSocketServer, serveStdio };
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,OAAO,EAAE,CAAC,EAAE,CAAC;AACb,cAAc,SAAS,CAAC;AAExB,mBAAmB;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC/B,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './primitives';
2
+ export * from './rpc';
3
+ export { z } from 'zod';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,OAAO,CAAC;AACtB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './primitives';
2
+ export * from './rpc';
3
+ export { z } from 'zod';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,OAAO,CAAC;AACtB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
@@ -0,0 +1,19 @@
1
+ export * from "./primitives";
2
+ export * from "./marker";
3
+ export declare const s: {
4
+ string: () => import("./primitives").StringSchema<"string">;
5
+ number: () => import("./primitives").NumberSchema;
6
+ boolean: () => import("./primitives").BooleanSchema;
7
+ literal: <const T extends import("./primitives").LiteralValue>(value: T) => import("./primitives").LiteralSchema<T>;
8
+ array: <T>(item: import("./primitives").Schema<T>) => import("./primitives").ArraySchema<T>;
9
+ object: <S extends import("./primitives").ObjectShape>(shape: S) => import("./primitives").ObjectSchema<S, false>;
10
+ record: <T>(value: import("./primitives").Schema<T>) => import("./primitives").RecordSchema<T>;
11
+ union: <const S extends readonly [import("./primitives").Schema<unknown>, ...import("./primitives").Schema<unknown>[]]>(schemas: S) => import("./primitives").UnionSchema<S>;
12
+ tuple: <const S extends readonly [import("./primitives").Schema<unknown>, ...import("./primitives").Schema<unknown>[]]>(schemas: S) => import("./primitives").TupleSchema<S>;
13
+ enum: <const T extends readonly [string, ...string[]]>(values: T) => import("./primitives").EnumSchema<T>;
14
+ unknown: () => import("./primitives").UnknownSchema;
15
+ void: () => import("./marker").VoidMarker;
16
+ injectable: <const K extends string>(key: K) => import("./marker").InjectableMarker<K>;
17
+ stream: <T>(inner: import("./primitives").Schema<T>) => import("./marker").StreamMarker<T>;
18
+ };
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schema/json/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AAEzB,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;CAAgC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { primitives } from "./primitives";
2
+ import { markers } from "./marker";
3
+ export * from "./primitives";
4
+ export * from "./marker";
5
+ export const s = { ...primitives, ...markers };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schema/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AAEzB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { Schema } from "./primitives";
2
+ export declare abstract class Marker {
3
+ abstract readonly kind: string;
4
+ }
5
+ export declare class VoidMarker extends Marker {
6
+ readonly kind: "void";
7
+ }
8
+ export declare class InjectableMarker<const K extends string = string> extends Marker {
9
+ readonly key: K;
10
+ readonly kind: "injectable";
11
+ constructor(key: K);
12
+ }
13
+ export declare class StreamMarker<T = unknown> extends Marker {
14
+ readonly inner: Schema<T>;
15
+ readonly kind: "stream";
16
+ constructor(inner: Schema<T>);
17
+ }
18
+ export declare const markers: {
19
+ void: () => VoidMarker;
20
+ injectable: <const K extends string>(key: K) => InjectableMarker<K>;
21
+ stream: <T>(inner: Schema<T>) => StreamMarker<T>;
22
+ };
23
+ //# sourceMappingURL=marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker.d.ts","sourceRoot":"","sources":["../../../src/schema/json/marker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,8BAAsB,MAAM;IAC1B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CAChC;AAGD,qBAAa,UAAW,SAAQ,MAAM;IACpC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;CACjC;AAED,qBAAa,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,MAAM;IAG/D,QAAQ,CAAC,GAAG,EAAE,CAAC;IAF3B,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IAEtC,YAAqB,GAAG,EAAE,CAAC,EAE1B;CACF;AAED,qBAAa,YAAY,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,MAAM;IAGvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAFrC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,YAAqB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAEpC;CACF;AAED,eAAO,MAAM,OAAO;IAClB,IAAI;IACJ,UAAU,GAAG,KAAK,CAAC,CAAC,SAAS,MAAM,OAAO,CAAC;IAC3C,MAAM,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC;CAC7B,CAAC"}
@@ -0,0 +1,27 @@
1
+ export class Marker {
2
+ }
3
+ export class VoidMarker extends Marker {
4
+ kind = "void";
5
+ }
6
+ export class InjectableMarker extends Marker {
7
+ key;
8
+ kind = "injectable";
9
+ constructor(key) {
10
+ super();
11
+ this.key = key;
12
+ }
13
+ }
14
+ export class StreamMarker extends Marker {
15
+ inner;
16
+ kind = "stream";
17
+ constructor(inner) {
18
+ super();
19
+ this.inner = inner;
20
+ }
21
+ }
22
+ export const markers = {
23
+ void: () => new VoidMarker(),
24
+ injectable: (key) => new InjectableMarker(key),
25
+ stream: (inner) => new StreamMarker(inner),
26
+ };
27
+ //# sourceMappingURL=marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker.js","sourceRoot":"","sources":["../../../src/schema/json/marker.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,MAAM;CAE3B;AAGD,MAAM,OAAO,UAAW,SAAQ,MAAM;IAC3B,IAAI,GAAG,MAAe,CAAC;CACjC;AAED,MAAM,OAAO,gBAAkD,SAAQ,MAAM;IAGtD,GAAG;IAFf,IAAI,GAAG,YAAqB,CAAC;IAEtC,YAAqB,GAAM;QACzB,KAAK,EAAE,CAAC;mBADW,GAAG;IAExB,CAAC;CACF;AAED,MAAM,OAAO,YAA0B,SAAQ,MAAM;IAG9B,KAAK;IAFjB,IAAI,GAAG,QAAiB,CAAC;IAElC,YAAqB,KAAgB;QACnC,KAAK,EAAE,CAAC;qBADW,KAAK;IAE1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,EAAE;IAC5B,UAAU,EAAE,CAAyB,GAAM,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC;IACzE,MAAM,EAAE,CAAI,KAAgB,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC;CACzD,CAAC"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * JSON 数据类型。
3
+ *
4
+ * 不包含 undefined、bigint、symbol、function、NaN、Infinity 等
5
+ * 非法 JSON 值。
6
+ */
7
+ export type JSONPrimitive = string | number | boolean | null;
8
+ export type JSONValue = JSONPrimitive | JSONValue[] | {
9
+ [key: string]: JSONValue;
10
+ };
11
+ export type SchemaKind = string;
12
+ export interface SchemaDescription {
13
+ kind: SchemaKind;
14
+ description?: string;
15
+ nullable?: boolean;
16
+ constraints?: Record<string, unknown>;
17
+ children?: Record<string, unknown>;
18
+ }
19
+ export declare class SchemaValidationError extends Error {
20
+ readonly path: string[];
21
+ constructor(message: string, path?: string[]);
22
+ }
23
+ /**
24
+ * 所有 Schema 的共同基类。
25
+ *
26
+ * 不包含 nullable(),因此 UnknownSchema 可以天然接受 null,
27
+ * 同时不会暴露无意义的 nullable() 方法。
28
+ */
29
+ export declare abstract class Schema<T> {
30
+ abstract readonly kind: SchemaKind;
31
+ private description?;
32
+ constructor(description?: string);
33
+ describe(description: string): this;
34
+ /**
35
+ * 创建保留原型和现有字段的新实例,供不可变链式方法使用。
36
+ * Schema 子类的状态字段会一并复制,因此扩展类仍保留自身原型和状态。
37
+ */
38
+ protected cloneWith(updates: Record<string, unknown>): this;
39
+ getDescription(): string | undefined;
40
+ parse(input: unknown): T;
41
+ safeParse(input: unknown): {
42
+ success: true;
43
+ data: T;
44
+ } | {
45
+ success: false;
46
+ error: SchemaValidationError;
47
+ };
48
+ protected abstract _parse(input: unknown, path: string[]): T;
49
+ protected abstract _describe(): SchemaDescription;
50
+ toJSON(): SchemaDescription;
51
+ protected fail(message: string, path: string[]): never;
52
+ }
53
+ /**
54
+ * 普通 JSON Schema 的基类。
55
+ * 通过 nullable() 显式接受 null。
56
+ */
57
+ export declare abstract class NullableCapableSchema<T> extends Schema<T> {
58
+ nullable(): NullableSchema<T>;
59
+ }
60
+ /**
61
+ * nullable 包装器。
62
+ *
63
+ * 注意:NullableSchema 不提供 nullable(),
64
+ * 避免无意义的重复 nullable 调用。
65
+ */
66
+ export declare class NullableSchema<T> extends Schema<T | null> {
67
+ private readonly inner;
68
+ readonly kind: "nullable";
69
+ constructor(inner: Schema<T>);
70
+ protected _parse(input: unknown, path: string[]): T | null;
71
+ protected _describe(): SchemaDescription;
72
+ }
73
+ export declare class StringSchema<K extends string = "string"> extends NullableCapableSchema<string> {
74
+ readonly kind: K;
75
+ constructor();
76
+ private minimum?;
77
+ private maximum?;
78
+ min(value: number): this;
79
+ max(value: number): this;
80
+ protected _parse(input: unknown, path: string[]): string;
81
+ protected _describe(): SchemaDescription;
82
+ protected validateBound(value: number): void;
83
+ }
84
+ export declare class NumberSchema extends NullableCapableSchema<number> {
85
+ readonly kind: "number";
86
+ constructor();
87
+ private minimum?;
88
+ private maximum?;
89
+ min(value: number): this;
90
+ max(value: number): this;
91
+ protected _parse(input: unknown, path: string[]): number;
92
+ protected _describe(): SchemaDescription;
93
+ protected validateBound(value: number): void;
94
+ }
95
+ export declare class BooleanSchema extends NullableCapableSchema<boolean> {
96
+ readonly kind: "boolean";
97
+ constructor();
98
+ protected _parse(input: unknown, path: string[]): boolean;
99
+ protected _describe(): SchemaDescription;
100
+ }
101
+ export type LiteralValue = string | number | boolean | null;
102
+ export declare class LiteralSchema<const T extends LiteralValue> extends NullableCapableSchema<T> {
103
+ private readonly expected;
104
+ readonly kind: "literal";
105
+ constructor(expected: T);
106
+ protected _parse(input: unknown, path: string[]): T;
107
+ protected _describe(): SchemaDescription;
108
+ }
109
+ export declare class ArraySchema<T> extends NullableCapableSchema<T[]> {
110
+ private readonly itemSchema;
111
+ readonly kind: "array";
112
+ private minimum?;
113
+ private maximum?;
114
+ constructor(itemSchema: Schema<T>);
115
+ min(value: number): this;
116
+ max(value: number): this;
117
+ protected _parse(input: unknown, path: string[]): T[];
118
+ protected _describe(): SchemaDescription;
119
+ protected validateBound(value: number): void;
120
+ }
121
+ export type ObjectShape = Record<string, Schema<unknown>>;
122
+ type SchemaValue<S> = S extends Schema<infer T> ? T : never;
123
+ type ShapeOutput<S extends ObjectShape> = {
124
+ [K in keyof S]: SchemaValue<S[K]>;
125
+ };
126
+ type OptionalShapeOutput<S extends ObjectShape> = {
127
+ [K in keyof S]?: SchemaValue<S[K]>;
128
+ };
129
+ export declare class ObjectSchema<S extends ObjectShape, Strict extends boolean = false> extends NullableCapableSchema<Strict extends true ? ShapeOutput<S> : OptionalShapeOutput<S>> {
130
+ private readonly shape;
131
+ readonly kind: "object";
132
+ private isStrict;
133
+ constructor(shape: S, strict?: Strict, description?: string);
134
+ /**
135
+ * strict() 要求所有声明属性存在,并拒绝未声明属性。
136
+ */
137
+ strict(): ObjectSchema<S, true>;
138
+ protected _parse(input: unknown, path: string[]): Strict extends true ? ShapeOutput<S> : OptionalShapeOutput<S>;
139
+ protected _describe(): SchemaDescription;
140
+ }
141
+ export declare class RecordSchema<T> extends NullableCapableSchema<Record<string, T>> {
142
+ private readonly valueSchema;
143
+ readonly kind: "record";
144
+ private minimum?;
145
+ private maximum?;
146
+ constructor(valueSchema: Schema<T>);
147
+ min(value: number): this;
148
+ max(value: number): this;
149
+ protected _parse(input: unknown, path: string[]): Record<string, T>;
150
+ protected _describe(): SchemaDescription;
151
+ protected validateBound(value: number): void;
152
+ }
153
+ export declare class UnionSchema<const S extends readonly [Schema<unknown>, ...Schema<unknown>[]]> extends NullableCapableSchema<SchemaValue<S[number]>> {
154
+ private readonly schemas;
155
+ readonly kind: "union";
156
+ constructor(schemas: S);
157
+ protected _parse(input: unknown, path: string[]): SchemaValue<S[number]>;
158
+ protected _describe(): SchemaDescription;
159
+ }
160
+ export declare class TupleSchema<const S extends readonly [Schema<unknown>, ...Schema<unknown>[]]> extends NullableCapableSchema<SchemaValue<S[number]>[]> {
161
+ private readonly schemas;
162
+ readonly kind: "tuple";
163
+ constructor(schemas: S);
164
+ protected _parse(input: unknown, path: string[]): SchemaValue<S[number]>[];
165
+ protected _describe(): SchemaDescription;
166
+ }
167
+ export declare class EnumSchema<const T extends readonly [string, ...string[]]> extends NullableCapableSchema<T[number]> {
168
+ private readonly values;
169
+ readonly kind: "enum";
170
+ private readonly allowedValues;
171
+ constructor(values: T);
172
+ protected _parse(input: unknown, path: string[]): T[number];
173
+ protected _describe(): SchemaDescription;
174
+ }
175
+ /**
176
+ * 校验任意 JSON 值。
177
+ *
178
+ * 不允许 undefined、非有限数字、循环引用等非 JSON 数据。
179
+ * UnknownSchema 不提供 nullable(),因为 null 本身就是合法值。
180
+ */
181
+ export declare class UnknownSchema extends Schema<JSONValue> {
182
+ readonly kind: "unknown";
183
+ constructor();
184
+ protected _parse(input: unknown, path: string[]): JSONValue;
185
+ protected _describe(): SchemaDescription;
186
+ }
187
+ export type Infer<T extends Schema<unknown>> = T extends Schema<infer U> ? U : never;
188
+ export declare const primitives: {
189
+ string: () => StringSchema<"string">;
190
+ number: () => NumberSchema;
191
+ boolean: () => BooleanSchema;
192
+ literal: <const T extends LiteralValue>(value: T) => LiteralSchema<T>;
193
+ array: <T>(item: Schema<T>) => ArraySchema<T>;
194
+ object: <S extends ObjectShape>(shape: S) => ObjectSchema<S, false>;
195
+ record: <T>(value: Schema<T>) => RecordSchema<T>;
196
+ union: <const S extends readonly [Schema<unknown>, ...Schema<unknown>[]]>(schemas: S) => UnionSchema<S>;
197
+ tuple: <const S extends readonly [Schema<unknown>, ...Schema<unknown>[]]>(schemas: S) => TupleSchema<S>;
198
+ enum: <const T extends readonly [string, ...string[]]>(values: T) => EnumSchema<T>;
199
+ unknown: () => UnknownSchema;
200
+ };
201
+ export {};
202
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/schema/json/primitives.ts"],"names":[],"mappings":"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"}