@yuhere/js-jsonrpc2 2.1.1 → 2.1.3
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/dist/cli/cli.js +4 -4
- package/dist/cli/demo-methods.d.ts +1 -1
- package/dist/cli/demo-methods.js +1 -1
- package/dist/cli/express.js +2 -2
- package/dist/cli/stdio.js +1 -1
- package/dist/core/Repository.d.ts +2 -2
- package/dist/core/Repository.js +9 -9
- package/dist/core/convert.d.ts +2 -2
- package/dist/core/convert.js +2 -2
- package/dist/core/descriptor.d.ts +3 -3
- package/dist/core/descriptor.js +3 -3
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/core/permission.d.ts +2 -2
- package/dist/core/permission.js +2 -2
- package/dist/core/spec-check.d.ts +1 -1
- package/dist/core/spec-check.js +3 -3
- package/dist/core/system-methods.d.ts +1 -1
- package/dist/core/system-methods.js +4 -4
- package/dist/errors/{RpcError.d.ts → RPCError.d.ts} +1 -1
- package/dist/errors/index.d.ts +2 -2
- package/dist/errors/index.js +2 -2
- package/dist/index.d.ts +11 -11
- package/dist/index.js +8 -8
- package/dist/schema/json/index.d.ts +16 -16
- package/dist/schema/json/index.js +4 -4
- package/dist/schema/json/marker.d.ts +1 -1
- package/dist/schema/z/protocol.d.ts +5 -5
- package/dist/schema/z/protocol.js +1 -1
- package/dist/schema/z/register.d.ts +1 -1
- package/dist/schema/z/register.js +1 -1
- package/dist/transport/express/body.js +2 -2
- package/dist/transport/express/index.d.ts +2 -2
- package/dist/transport/express/index.js +1 -1
- package/dist/transport/express/middleware.d.ts +2 -2
- package/dist/transport/express/middleware.js +5 -5
- package/dist/transport/express/respond.d.ts +1 -1
- package/dist/transport/express/respond.js +1 -1
- package/dist/transport/stdio/index.d.ts +1 -1
- package/dist/transport/stdio/index.js +1 -1
- package/dist/transport/stdio/middleware.d.ts +2 -2
- package/dist/transport/stdio/middleware.js +4 -4
- package/dist/transport/ws/index.d.ts +2 -2
- package/dist/transport/ws/index.js +2 -2
- package/dist/transport/ws/middleware.d.ts +2 -2
- package/dist/transport/ws/middleware.js +3 -3
- package/dist/transport/ws/standalone.d.ts +1 -1
- package/dist/transport/ws/standalone.js +2 -2
- package/dist/types.d.ts +4 -4
- package/htdoc/assets/{index-CQr-lnlD.js → index-BEVUmX2-.js} +170 -20
- package/htdoc/assets/index-BEVUmX2-.js.map +1 -0
- package/htdoc/index.html +1 -1
- package/package.json +8 -7
- package/webui/src/App.tsx +30 -3
- package/webui/src/api/docGen.ts +188 -0
- package/webui/src/components/SchemaForm.tsx +0 -1
- package/webui/src/components/Toolbar.tsx +13 -1
- package/dist/schema/index.d.ts +0 -4
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -4
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/primitives.d.ts +0 -25
- package/dist/schema/primitives.d.ts.map +0 -1
- package/dist/schema/primitives.js +0 -153
- package/dist/schema/primitives.js.map +0 -1
- package/dist/schema/rpc.d.ts +0 -21
- package/dist/schema/rpc.d.ts.map +0 -1
- package/dist/schema/rpc.js +0 -17
- package/dist/schema/rpc.js.map +0 -1
- package/dist/stream/index.d.ts +0 -3
- package/dist/stream/index.d.ts.map +0 -1
- package/dist/stream/index.js +0 -2
- package/dist/stream/index.js.map +0 -1
- package/dist/stream/stringify.d.ts +0 -19
- package/dist/stream/stringify.d.ts.map +0 -1
- package/dist/stream/stringify.js +0 -217
- package/dist/stream/stringify.js.map +0 -1
- package/htdoc/assets/index-CQr-lnlD.js.map +0 -1
- /package/dist/errors/{RpcError.d.ts.map → RPCError.d.ts.map} +0 -0
- /package/dist/errors/{RpcError.js → RPCError.js} +0 -0
- /package/dist/errors/{RpcError.js.map → RPCError.js.map} +0 -0
package/htdoc/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>JSON-RPC 2.0</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-BEVUmX2-.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="./assets/index-hcP2-9jw.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuhere/js-jsonrpc2",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.3",
|
|
4
4
|
"description": "A TypeScript JSON-RPC 2.0 server library with schema validation, authorization, dependency injection, and multiple transports.",
|
|
5
5
|
"homepage": "https://github.com/yuhere/js-jsonrpc2#readme",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
43
|
"build": "npm run build:lib && npm run build:webui",
|
|
44
|
-
"build:lib": "tsc -p tsconfig.build.json",
|
|
44
|
+
"build:lib": "tsc -p tsconfig.build.json && tsc-esm-fix",
|
|
45
45
|
"build:webui": "tsc -p webui//tsconfig.json && vite build --config webui/vite.config.ts",
|
|
46
46
|
"dev": "run-p dev:lib dev:webui",
|
|
47
47
|
"dev:lib": "tsx src/cli/express.ts",
|
|
@@ -74,19 +74,20 @@
|
|
|
74
74
|
"@types/ws": "^8.18.2",
|
|
75
75
|
"@vitejs/plugin-react": "^6.1.2",
|
|
76
76
|
"@vitest/coverage-v8": "^5.0.5",
|
|
77
|
-
"express": "^5.3.0",
|
|
78
77
|
"npm-run-all": "^4.1.5",
|
|
79
78
|
"react": "^18.3.1",
|
|
80
79
|
"react-dom": "^18.3.1",
|
|
81
80
|
"supertest": "^7.3.1",
|
|
81
|
+
"tsc-esm-fix": "^3.1.2",
|
|
82
82
|
"tsx": "^4.23.15",
|
|
83
83
|
"typescript": "^7.0.2",
|
|
84
84
|
"vite": "^8.3.5",
|
|
85
|
-
"vitest": "^5.0.5"
|
|
86
|
-
"ws": "^8.22.0"
|
|
85
|
+
"vitest": "^5.0.5"
|
|
87
86
|
},
|
|
88
87
|
"dependencies": {
|
|
89
|
-
"body-parser": "^2.
|
|
88
|
+
"body-parser": "^2.4.0",
|
|
89
|
+
"express": "^5.3.0",
|
|
90
|
+
"ws": "^8.22.0",
|
|
90
91
|
"zod": "^4.6.7"
|
|
91
92
|
}
|
|
92
|
-
}
|
|
93
|
+
}
|
package/webui/src/App.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect, useMemo, useState } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { createRpc, type TransportKind } from './api/rpc';
|
|
3
3
|
import { useMethods } from './hooks/useMethods';
|
|
4
4
|
import { useMethodDetail } from './hooks/useMethodDetail';
|
|
@@ -6,14 +6,18 @@ import { Toolbar } from './components/Toolbar';
|
|
|
6
6
|
import { MethodTree } from './components/MethodTree';
|
|
7
7
|
import { MethodDetail } from './components/MethodDetail';
|
|
8
8
|
import { TestPanel } from './components/TestPanel';
|
|
9
|
+
import {
|
|
10
|
+
collectApiDoc,
|
|
11
|
+
downloadText,
|
|
12
|
+
renderMarkdown,
|
|
13
|
+
} from './api/docGen';
|
|
9
14
|
|
|
10
15
|
const ENDPOINT = '';
|
|
11
|
-
// 如需强制指定 WS 地址,可改为例如 'ws://localhost:3000/'
|
|
12
|
-
// 默认由 wsTransport 从 window.location 推导。
|
|
13
16
|
|
|
14
17
|
export default function App() {
|
|
15
18
|
const [transport, setTransport] = useState<TransportKind>('http');
|
|
16
19
|
const [selected, setSelected] = useState('');
|
|
20
|
+
const [generatingDocs, setGeneratingDocs] = useState(false);
|
|
17
21
|
|
|
18
22
|
const rpc = useMemo(() => {
|
|
19
23
|
return createRpc({ transport, endpoint: ENDPOINT });
|
|
@@ -26,6 +30,27 @@ export default function App() {
|
|
|
26
30
|
const { methods, loading, error, refresh } = useMethods(rpc);
|
|
27
31
|
const detail = useMethodDetail(rpc, selected);
|
|
28
32
|
|
|
33
|
+
const generateDocs = useCallback(async () => {
|
|
34
|
+
if (methods.length === 0) {
|
|
35
|
+
alert('方法列表为空,请先刷新方法列表。');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
setGeneratingDocs(true);
|
|
39
|
+
try {
|
|
40
|
+
const doc = await collectApiDoc(rpc, methods);
|
|
41
|
+
const md = renderMarkdown(doc);
|
|
42
|
+
const ts = new Date()
|
|
43
|
+
.toISOString()
|
|
44
|
+
.replace(/[:.]/g, '-')
|
|
45
|
+
.slice(0, 19);
|
|
46
|
+
downloadText(`jsonrpc-api-doc-${ts}.md`, md, 'text/markdown');
|
|
47
|
+
} catch (e) {
|
|
48
|
+
alert(`生成文档失败:${e instanceof Error ? e.message : String(e)}`);
|
|
49
|
+
} finally {
|
|
50
|
+
setGeneratingDocs(false);
|
|
51
|
+
}
|
|
52
|
+
}, [rpc, methods]);
|
|
53
|
+
|
|
29
54
|
return (
|
|
30
55
|
<div className="app">
|
|
31
56
|
<Toolbar
|
|
@@ -34,6 +59,8 @@ export default function App() {
|
|
|
34
59
|
onRefresh={refresh}
|
|
35
60
|
loading={loading}
|
|
36
61
|
error={error}
|
|
62
|
+
onGenerateDocs={generateDocs}
|
|
63
|
+
generatingDocs={generatingDocs}
|
|
37
64
|
/>
|
|
38
65
|
<main>
|
|
39
66
|
<aside className="sidebar">
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import type { RpcClient } from './rpc';
|
|
2
|
+
import type { SchemaDescription } from './schema';
|
|
3
|
+
|
|
4
|
+
export interface MethodDoc {
|
|
5
|
+
name: string;
|
|
6
|
+
help: string;
|
|
7
|
+
signature: SchemaDescription[];
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ApiDoc {
|
|
12
|
+
generatedAt: string;
|
|
13
|
+
methods: MethodDoc[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function isSchema(v: unknown): v is SchemaDescription {
|
|
17
|
+
return !!v && typeof v === 'object' && typeof (v as SchemaDescription).kind === 'string';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** 逐个方法拉取 help + signature */
|
|
21
|
+
export async function collectApiDoc(
|
|
22
|
+
rpc: RpcClient,
|
|
23
|
+
methods: string[],
|
|
24
|
+
onProgress?: (done: number, total: number) => void,
|
|
25
|
+
): Promise<ApiDoc> {
|
|
26
|
+
const out: MethodDoc[] = [];
|
|
27
|
+
for (let i = 0; i < methods.length; i++) {
|
|
28
|
+
const name = methods[i];
|
|
29
|
+
try {
|
|
30
|
+
const [help, sig] = await Promise.all([
|
|
31
|
+
rpc.call<string>('system.methodHelp', name).catch(() => ''),
|
|
32
|
+
rpc.call<unknown[]>('system.methodSignature', name).catch(() => []),
|
|
33
|
+
]);
|
|
34
|
+
out.push({
|
|
35
|
+
name,
|
|
36
|
+
help: typeof help === 'string' ? help : '',
|
|
37
|
+
signature: Array.isArray(sig) ? sig.filter(isSchema) : [],
|
|
38
|
+
});
|
|
39
|
+
} catch (e) {
|
|
40
|
+
out.push({
|
|
41
|
+
name,
|
|
42
|
+
help: '',
|
|
43
|
+
signature: [],
|
|
44
|
+
error: e instanceof Error ? e.message : String(e),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
onProgress?.(i + 1, methods.length);
|
|
48
|
+
}
|
|
49
|
+
return { generatedAt: new Date().toISOString(), methods: out };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ─────────────────────────────────────────────────────────────
|
|
53
|
+
// Markdown 渲染
|
|
54
|
+
// ─────────────────────────────────────────────────────────────
|
|
55
|
+
|
|
56
|
+
function renderSchema(schema: SchemaDescription): string {
|
|
57
|
+
// 简单的单行描述:kind + constraints + nullable
|
|
58
|
+
let s = schema.kind;
|
|
59
|
+
if (schema.nullable) s += ' | null';
|
|
60
|
+
const c = schema.constraints;
|
|
61
|
+
if (c && Object.keys(c).length > 0) {
|
|
62
|
+
const parts = Object.entries(c)
|
|
63
|
+
.filter(([, v]) => v !== undefined)
|
|
64
|
+
.map(([k, v]) => `${k}=${JSON.stringify(v)}`);
|
|
65
|
+
if (parts.length) s += ` { ${parts.join(', ')} }`;
|
|
66
|
+
}
|
|
67
|
+
return s;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function renderSchemaTree(schema: SchemaDescription, indent = 0): string[] {
|
|
71
|
+
const pad = ' '.repeat(indent);
|
|
72
|
+
const lines: string[] = [];
|
|
73
|
+
let head = `${pad}- \`${schema.kind}\``;
|
|
74
|
+
if (schema.nullable) head += ' _(nullable)_';
|
|
75
|
+
if (schema.description) head += ` — ${schema.description}`;
|
|
76
|
+
const c = schema.constraints;
|
|
77
|
+
if (c && Object.keys(c).length > 0) {
|
|
78
|
+
const parts = Object.entries(c)
|
|
79
|
+
.filter(([, v]) => v !== undefined)
|
|
80
|
+
.map(([k, v]) => `${k}=${JSON.stringify(v)}`);
|
|
81
|
+
if (parts.length) head += ` \`{ ${parts.join(', ')} }\``;
|
|
82
|
+
}
|
|
83
|
+
lines.push(head);
|
|
84
|
+
|
|
85
|
+
const ch = schema.children ?? {};
|
|
86
|
+
const pushChild = (label: string, child: SchemaDescription) => {
|
|
87
|
+
const sub = renderSchemaTree(child, indent + 1);
|
|
88
|
+
if (sub.length) {
|
|
89
|
+
sub[0] = `${' '.repeat(indent + 1)}- **${label}**: ${sub[0].trim().replace(/^- /, '')}`;
|
|
90
|
+
lines.push(...sub);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
if (isSchema(ch.inner)) pushChild('inner', ch.inner);
|
|
95
|
+
if (Array.isArray(ch.items)) {
|
|
96
|
+
(ch.items as unknown[]).forEach((it, i) => {
|
|
97
|
+
if (isSchema(it)) pushChild(`[${i}]`, it);
|
|
98
|
+
});
|
|
99
|
+
} else if (isSchema(ch.items)) {
|
|
100
|
+
pushChild('items', ch.items);
|
|
101
|
+
}
|
|
102
|
+
if (Array.isArray(ch.options)) {
|
|
103
|
+
(ch.options as unknown[]).forEach((opt, i) => {
|
|
104
|
+
if (isSchema(opt)) pushChild(`option[${i}]`, opt);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if (ch.properties && typeof ch.properties === 'object') {
|
|
108
|
+
for (const [k, v] of Object.entries(ch.properties)) {
|
|
109
|
+
if (isSchema(v)) pushChild(k, v);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (isSchema(ch.values)) pushChild('values', ch.values);
|
|
113
|
+
|
|
114
|
+
return lines;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function renderMarkdown(doc: ApiDoc): string {
|
|
118
|
+
const lines: string[] = [];
|
|
119
|
+
lines.push('# JSON-RPC API 文档');
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push(`> 生成时间:${doc.generatedAt}`);
|
|
122
|
+
lines.push(`> 方法总数:${doc.methods.length}`);
|
|
123
|
+
lines.push('');
|
|
124
|
+
lines.push('## 目录');
|
|
125
|
+
lines.push('');
|
|
126
|
+
for (const m of doc.methods) {
|
|
127
|
+
const anchor = m.name.toLowerCase().replace(/[^\w]+/g, '-');
|
|
128
|
+
lines.push(`- [\`${m.name}\`](#${anchor})`);
|
|
129
|
+
}
|
|
130
|
+
lines.push('');
|
|
131
|
+
|
|
132
|
+
for (const m of doc.methods) {
|
|
133
|
+
lines.push(`## \`${m.name}\``);
|
|
134
|
+
lines.push('');
|
|
135
|
+
if (m.error) {
|
|
136
|
+
lines.push(`> ⚠️ 获取失败:${m.error}`);
|
|
137
|
+
lines.push('');
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
lines.push('**帮助**');
|
|
141
|
+
lines.push('');
|
|
142
|
+
lines.push(m.help ? m.help : '_(无帮助信息)_');
|
|
143
|
+
lines.push('');
|
|
144
|
+
|
|
145
|
+
if (m.signature.length === 0) {
|
|
146
|
+
lines.push('**签名**:_(无)_');
|
|
147
|
+
lines.push('');
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const [ret, ...params] = m.signature;
|
|
152
|
+
lines.push('**返回类型**');
|
|
153
|
+
lines.push('');
|
|
154
|
+
lines.push(...renderSchemaTree(ret, 0));
|
|
155
|
+
lines.push('');
|
|
156
|
+
lines.push(`**参数**(${params.length} 个)`);
|
|
157
|
+
lines.push('');
|
|
158
|
+
if (params.length === 0) {
|
|
159
|
+
lines.push('_(无参数)_');
|
|
160
|
+
} else {
|
|
161
|
+
params.forEach((p, i) => {
|
|
162
|
+
const sub = renderSchemaTree(p, 0);
|
|
163
|
+
if (sub.length) {
|
|
164
|
+
sub[0] = `- **参数 [${i}]**: ${sub[0].trim().replace(/^- /, '')}`;
|
|
165
|
+
lines.push(...sub);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
lines.push('');
|
|
170
|
+
lines.push('---');
|
|
171
|
+
lines.push('');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return lines.join('\n');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** 触发浏览器下载 */
|
|
178
|
+
export function downloadText(filename: string, text: string, mime = 'text/plain') {
|
|
179
|
+
const blob = new Blob([text], { type: `${mime};charset=utf-8` });
|
|
180
|
+
const url = URL.createObjectURL(blob);
|
|
181
|
+
const a = document.createElement('a');
|
|
182
|
+
a.href = url;
|
|
183
|
+
a.download = filename;
|
|
184
|
+
document.body.appendChild(a);
|
|
185
|
+
a.click();
|
|
186
|
+
document.body.removeChild(a);
|
|
187
|
+
setTimeout(() => URL.revokeObjectURL(url), 1000);
|
|
188
|
+
}
|
|
@@ -7,6 +7,9 @@ interface ToolbarProps {
|
|
|
7
7
|
onRefresh: () => void;
|
|
8
8
|
loading: boolean;
|
|
9
9
|
error: string | null;
|
|
10
|
+
/** 新增:生成文档 */
|
|
11
|
+
onGenerateDocs: () => void;
|
|
12
|
+
generatingDocs: boolean;
|
|
10
13
|
}
|
|
11
14
|
|
|
12
15
|
const THEME_OPTIONS: { value: ThemeMode; label: string }[] = [
|
|
@@ -21,6 +24,8 @@ export function Toolbar({
|
|
|
21
24
|
onRefresh,
|
|
22
25
|
loading,
|
|
23
26
|
error,
|
|
27
|
+
onGenerateDocs,
|
|
28
|
+
generatingDocs,
|
|
24
29
|
}: ToolbarProps) {
|
|
25
30
|
const { mode, setMode } = useTheme();
|
|
26
31
|
|
|
@@ -49,9 +54,16 @@ export function Toolbar({
|
|
|
49
54
|
{loading ? '刷新中…' : '刷新方法列表'}
|
|
50
55
|
</button>
|
|
51
56
|
|
|
57
|
+
<button
|
|
58
|
+
onClick={onGenerateDocs}
|
|
59
|
+
disabled={generatingDocs || loading || loading /* methods 空时由 App 拦截 */}
|
|
60
|
+
title="拉取所有方法的帮助与签名,生成 Markdown 文档并下载"
|
|
61
|
+
>
|
|
62
|
+
{generatingDocs ? '生成中…' : '生成文档 ⬇'}
|
|
63
|
+
</button>
|
|
64
|
+
|
|
52
65
|
{error && <span className="error">{error}</span>}
|
|
53
66
|
|
|
54
|
-
{/* 主题下拉,放右上角 */}
|
|
55
67
|
<label className="theme-select" title="主题">
|
|
56
68
|
<span className="theme-select-label">主题</span>
|
|
57
69
|
<select
|
package/dist/schema/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/schema/index.js
DELETED
package/dist/schema/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { ParamSchema } from '../types';
|
|
2
|
-
export interface ParamMeta {
|
|
3
|
-
kind?: 'void' | 'any' | 'array' | 'boolean' | 'function' | 'number' | 'object' | 'string' | 'symbol' | 'arrayOf' | 'objectOf' | 'shape' | 'oneOf' | 'oneOfType' | 'instanceOf' | 'injectable';
|
|
4
|
-
naming?: string;
|
|
5
|
-
required?: 'none' | 'isRequired' | 'isRequiredNotNull';
|
|
6
|
-
injectable?: string;
|
|
7
|
-
of?: unknown;
|
|
8
|
-
}
|
|
9
|
-
export declare function getMeta(schema: ParamSchema): ParamMeta;
|
|
10
|
-
export declare function setJSONString(schema: ParamSchema, description: string): ParamSchema;
|
|
11
|
-
export declare function toJSONString(schema: ParamSchema): string;
|
|
12
|
-
export declare function voidSchema(): ParamSchema;
|
|
13
|
-
export declare function anySchema(): ParamSchema;
|
|
14
|
-
export declare function injectableSchema(name: string): ParamSchema;
|
|
15
|
-
export declare function named(schema: ParamSchema, naming: string): ParamSchema;
|
|
16
|
-
export declare function required(schema: ParamSchema): ParamSchema;
|
|
17
|
-
export declare function requiredNotNull(schema: ParamSchema): ParamSchema;
|
|
18
|
-
export declare function primitiveSchema(kind: 'void' | 'string' | 'number' | 'boolean' | 'function' | 'object' | 'symbol' | 'array'): ParamSchema;
|
|
19
|
-
export declare function arrayOf(schema: ParamSchema): ParamSchema;
|
|
20
|
-
export declare function objectOf(schema: ParamSchema): ParamSchema;
|
|
21
|
-
export declare function oneOf<T extends readonly [string, ...string[]]>(values: T): ParamSchema;
|
|
22
|
-
export declare function oneOfType(schemas: ParamSchema[]): ParamSchema;
|
|
23
|
-
export declare function shape<T extends Record<string, ParamSchema>>(shapeMap: T): ParamSchema;
|
|
24
|
-
export declare function instanceOf<T extends abstract new (...args: any[]) => any>(cls: T): ParamSchema;
|
|
25
|
-
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/schema/primitives.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EACH,MAAM,GACN,KAAK,GACL,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,UAAU,GACV,OAAO,GACP,OAAO,GACP,WAAW,GACX,YAAY,GACZ,YAAY,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,mBAAmB,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAOD,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAEtD;AA8BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAInF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAMxD;AAED,wBAAgB,UAAU,IAAI,WAAW,CAIxC;AAED,wBAAgB,SAAS,IAAI,WAAW,CAIvC;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAI1D;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAKtE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAKzD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAKhE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAC1F,WAAW,CA8Bb;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAKxD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAKzD;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,CAKtF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,CAa7D;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,WAAW,CAOrF;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,CAO9F"}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export function getMeta(schema) {
|
|
3
|
-
return schema.__meta ?? {};
|
|
4
|
-
}
|
|
5
|
-
function withMeta(schema, meta) {
|
|
6
|
-
const target = schema;
|
|
7
|
-
target.__meta = meta;
|
|
8
|
-
return schema;
|
|
9
|
-
}
|
|
10
|
-
function describe(meta) {
|
|
11
|
-
const kind = meta.kind ?? 'any';
|
|
12
|
-
switch (kind) {
|
|
13
|
-
case 'void':
|
|
14
|
-
return 'void';
|
|
15
|
-
case 'injectable':
|
|
16
|
-
return `injectable:${meta.injectable ?? 'unknown'}`;
|
|
17
|
-
case 'arrayOf':
|
|
18
|
-
return `arrayOf(${String(meta.of ?? 'any')})`;
|
|
19
|
-
case 'objectOf':
|
|
20
|
-
return `objectOf(${String(meta.of ?? 'any')})`;
|
|
21
|
-
case 'oneOf':
|
|
22
|
-
return `oneOf(${JSON.stringify(meta.of ?? [])})`;
|
|
23
|
-
case 'oneOfType':
|
|
24
|
-
return `oneOfType(${JSON.stringify(meta.of ?? [])})`;
|
|
25
|
-
case 'shape':
|
|
26
|
-
return `shape(${JSON.stringify(meta.of ?? {})})`;
|
|
27
|
-
default:
|
|
28
|
-
return kind;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export function setJSONString(schema, description) {
|
|
32
|
-
const target = schema;
|
|
33
|
-
target.toJSONString = () => description;
|
|
34
|
-
return schema;
|
|
35
|
-
}
|
|
36
|
-
export function toJSONString(schema) {
|
|
37
|
-
const target = schema;
|
|
38
|
-
if (typeof target.toJSONString === 'function') {
|
|
39
|
-
return target.toJSONString();
|
|
40
|
-
}
|
|
41
|
-
return describe(getMeta(schema));
|
|
42
|
-
}
|
|
43
|
-
export function voidSchema() {
|
|
44
|
-
const schema = z.undefined();
|
|
45
|
-
const result = withMeta(schema, { kind: 'void', required: 'none' });
|
|
46
|
-
return setJSONString(result, 'void');
|
|
47
|
-
}
|
|
48
|
-
export function anySchema() {
|
|
49
|
-
const schema = z.any();
|
|
50
|
-
const result = withMeta(schema, { kind: 'any' });
|
|
51
|
-
return setJSONString(result, 'any');
|
|
52
|
-
}
|
|
53
|
-
export function injectableSchema(name) {
|
|
54
|
-
const schema = z.any();
|
|
55
|
-
const result = withMeta(schema, { kind: 'injectable', injectable: name });
|
|
56
|
-
return setJSONString(result, `injectable:${name}`);
|
|
57
|
-
}
|
|
58
|
-
export function named(schema, naming) {
|
|
59
|
-
const meta = getMeta(schema);
|
|
60
|
-
withMeta(schema, { ...meta, naming });
|
|
61
|
-
const base = toJSONString(schema);
|
|
62
|
-
return setJSONString(schema, `${base}.named(${naming})`);
|
|
63
|
-
}
|
|
64
|
-
export function required(schema) {
|
|
65
|
-
const meta = getMeta(schema);
|
|
66
|
-
withMeta(schema, { ...meta, required: 'isRequired' });
|
|
67
|
-
const base = toJSONString(schema);
|
|
68
|
-
return setJSONString(schema, `${base}.isRequired`);
|
|
69
|
-
}
|
|
70
|
-
export function requiredNotNull(schema) {
|
|
71
|
-
const meta = getMeta(schema);
|
|
72
|
-
withMeta(schema, { ...meta, required: 'isRequiredNotNull' });
|
|
73
|
-
const base = toJSONString(schema);
|
|
74
|
-
return setJSONString(schema, `${base}.isRequiredNotNull`);
|
|
75
|
-
}
|
|
76
|
-
export function primitiveSchema(kind) {
|
|
77
|
-
let schema;
|
|
78
|
-
switch (kind) {
|
|
79
|
-
case 'string':
|
|
80
|
-
schema = z.string();
|
|
81
|
-
break;
|
|
82
|
-
case 'number':
|
|
83
|
-
schema = z.number();
|
|
84
|
-
break;
|
|
85
|
-
case 'boolean':
|
|
86
|
-
schema = z.boolean();
|
|
87
|
-
break;
|
|
88
|
-
case 'function':
|
|
89
|
-
schema = z.function();
|
|
90
|
-
break;
|
|
91
|
-
case 'object':
|
|
92
|
-
schema = z.object({}).passthrough();
|
|
93
|
-
break;
|
|
94
|
-
case 'array':
|
|
95
|
-
schema = z.array(z.any());
|
|
96
|
-
break;
|
|
97
|
-
case 'symbol':
|
|
98
|
-
schema = z.custom((value) => typeof value === 'symbol');
|
|
99
|
-
break;
|
|
100
|
-
case 'void':
|
|
101
|
-
schema = z.void();
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
const result = withMeta(schema, { kind });
|
|
105
|
-
return setJSONString(result, kind);
|
|
106
|
-
}
|
|
107
|
-
export function arrayOf(schema) {
|
|
108
|
-
const inner = z.array(schema);
|
|
109
|
-
const description = describe({ kind: 'arrayOf', of: toJSONString(schema) });
|
|
110
|
-
const result = withMeta(inner, { kind: 'arrayOf', of: toJSONString(schema) });
|
|
111
|
-
return setJSONString(result, description);
|
|
112
|
-
}
|
|
113
|
-
export function objectOf(schema) {
|
|
114
|
-
const inner = z.record(schema);
|
|
115
|
-
const description = describe({ kind: 'objectOf', of: toJSONString(schema) });
|
|
116
|
-
const result = withMeta(inner, { kind: 'objectOf', of: toJSONString(schema) });
|
|
117
|
-
return setJSONString(result, description);
|
|
118
|
-
}
|
|
119
|
-
export function oneOf(values) {
|
|
120
|
-
const schema = z.enum(values);
|
|
121
|
-
const description = `oneOf(${JSON.stringify(values)})`;
|
|
122
|
-
const result = withMeta(schema, { kind: 'oneOf', of: values });
|
|
123
|
-
return setJSONString(result, description);
|
|
124
|
-
}
|
|
125
|
-
export function oneOfType(schemas) {
|
|
126
|
-
if (schemas.length === 0) {
|
|
127
|
-
throw new Error('oneOfType requires at least one schema.');
|
|
128
|
-
}
|
|
129
|
-
const [first, ...rest] = schemas;
|
|
130
|
-
if (!first)
|
|
131
|
-
throw new Error('oneOfType requires at least one schema.');
|
|
132
|
-
const union = rest.length === 0
|
|
133
|
-
? first
|
|
134
|
-
: z.union([first, ...rest]);
|
|
135
|
-
const description = `oneOfType(${JSON.stringify(schemas.map((s) => toJSONString(s)))})`;
|
|
136
|
-
const result = withMeta(union, { kind: 'oneOfType', of: schemas.map((s) => toJSONString(s)) });
|
|
137
|
-
return setJSONString(result, description);
|
|
138
|
-
}
|
|
139
|
-
export function shape(shapeMap) {
|
|
140
|
-
const objectShape = z.object(shapeMap);
|
|
141
|
-
const description = `shape(${JSON.stringify(Object.fromEntries(Object.entries(shapeMap).map(([k, v]) => [k, toJSONString(v)])))})`;
|
|
142
|
-
const result = withMeta(objectShape, { kind: 'shape', of: shapeMap });
|
|
143
|
-
return setJSONString(result, description);
|
|
144
|
-
}
|
|
145
|
-
export function instanceOf(cls) {
|
|
146
|
-
// zod's instanceof typing is strict about concrete constructors;
|
|
147
|
-
// runtime behaviour is identical, so we bridge via unknown.
|
|
148
|
-
const schema = z.instanceof(cls);
|
|
149
|
-
const name = cls.name || '<<anonymous>>';
|
|
150
|
-
const result = withMeta(schema, { kind: 'instanceOf', of: name });
|
|
151
|
-
return setJSONString(result, `instanceOf(${name})`);
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=primitives.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/schema/primitives.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/rpc.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
/** Strict JSON-RPC 2.0 request: id is required (string | number). */
|
|
3
|
-
export declare const RequestSchema: z.ZodObject<{
|
|
4
|
-
jsonrpc: z.ZodLiteral<"2.0">;
|
|
5
|
-
method: z.ZodString;
|
|
6
|
-
params: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodUnknown, "many">, z.ZodRecord<z.ZodString, z.ZodUnknown>]>>;
|
|
7
|
-
id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
8
|
-
}, "strip", z.ZodTypeAny, {
|
|
9
|
-
jsonrpc: "2.0";
|
|
10
|
-
method: string;
|
|
11
|
-
id: string | number;
|
|
12
|
-
params?: Record<string, unknown> | unknown[] | undefined;
|
|
13
|
-
}, {
|
|
14
|
-
jsonrpc: "2.0";
|
|
15
|
-
method: string;
|
|
16
|
-
id: string | number;
|
|
17
|
-
params?: Record<string, unknown> | unknown[] | undefined;
|
|
18
|
-
}>;
|
|
19
|
-
export type ParsedRequest = z.infer<typeof RequestSchema>;
|
|
20
|
-
export declare function formatIssues(error: z.ZodError): string;
|
|
21
|
-
//# sourceMappingURL=rpc.d.ts.map
|
package/dist/schema/rpc.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/schema/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qEAAqE;AACrE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;EAKxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,wBAAgB,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAOtD"}
|
package/dist/schema/rpc.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
/** Strict JSON-RPC 2.0 request: id is required (string | number). */
|
|
3
|
-
export const RequestSchema = z.object({
|
|
4
|
-
jsonrpc: z.literal('2.0'),
|
|
5
|
-
method: z.string().min(1),
|
|
6
|
-
params: z.union([z.array(z.unknown()), z.record(z.unknown())]).optional(),
|
|
7
|
-
id: z.union([z.string(), z.number()]),
|
|
8
|
-
});
|
|
9
|
-
export function formatIssues(error) {
|
|
10
|
-
return error.issues
|
|
11
|
-
.map((issue) => {
|
|
12
|
-
const path = issue.path.length > 0 ? issue.path.join('.') : '(root)';
|
|
13
|
-
return `${path}: ${issue.message}`;
|
|
14
|
-
})
|
|
15
|
-
.join('; ');
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=rpc.js.map
|
package/dist/schema/rpc.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/schema/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qEAAqE;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;CACtC,CAAC,CAAC;AAIH,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,OAAO,KAAK,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
package/dist/stream/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/stream/index.js
DELETED
package/dist/stream/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Writable } from 'node:stream';
|
|
2
|
-
/** Synchronous serializer that mirrors JSON.stringify but tolerates undefined values. */
|
|
3
|
-
export declare function stringifySync(input: unknown): string;
|
|
4
|
-
export interface PipeOptions {
|
|
5
|
-
/** HTTP status for streaming success (default 200). */
|
|
6
|
-
status?: number;
|
|
7
|
-
/** Additional headers to merge. */
|
|
8
|
-
headers?: Record<string, string>;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Streams `value` to a writable (typically `express.Response`).
|
|
12
|
-
* Sets headers on first chunk and always ends the response.
|
|
13
|
-
*/
|
|
14
|
-
export declare function pipeStringify(value: unknown, res: Writable & {
|
|
15
|
-
setHeader(name: string, value: string): unknown;
|
|
16
|
-
status?(code: number): unknown;
|
|
17
|
-
end(): unknown;
|
|
18
|
-
}, options?: PipeOptions): Promise<void>;
|
|
19
|
-
//# sourceMappingURL=stringify.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../src/stream/stringify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgDpD;AA0GD,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG;IAClE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,GAAG,IAAI,OAAO,CAAC;CAChB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC3C"}
|