@yuhere/js-jsonrpc2 2.1.2 → 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.
Files changed (81) hide show
  1. package/dist/cli/cli.js +4 -4
  2. package/dist/cli/demo-methods.d.ts +1 -1
  3. package/dist/cli/demo-methods.js +1 -1
  4. package/dist/cli/express.js +2 -2
  5. package/dist/cli/stdio.js +1 -1
  6. package/dist/core/Repository.d.ts +2 -2
  7. package/dist/core/Repository.js +9 -9
  8. package/dist/core/convert.d.ts +2 -2
  9. package/dist/core/convert.js +2 -2
  10. package/dist/core/descriptor.d.ts +3 -3
  11. package/dist/core/descriptor.js +3 -3
  12. package/dist/core/index.d.ts +3 -3
  13. package/dist/core/index.js +2 -2
  14. package/dist/core/permission.d.ts +2 -2
  15. package/dist/core/permission.js +2 -2
  16. package/dist/core/spec-check.d.ts +1 -1
  17. package/dist/core/spec-check.js +3 -3
  18. package/dist/core/system-methods.d.ts +1 -1
  19. package/dist/core/system-methods.js +4 -4
  20. package/dist/errors/{RpcError.d.ts → RPCError.d.ts} +1 -1
  21. package/dist/errors/index.d.ts +2 -2
  22. package/dist/errors/index.js +2 -2
  23. package/dist/index.d.ts +11 -11
  24. package/dist/index.js +8 -8
  25. package/dist/schema/json/index.d.ts +16 -16
  26. package/dist/schema/json/index.js +4 -4
  27. package/dist/schema/json/marker.d.ts +1 -1
  28. package/dist/schema/z/protocol.d.ts +5 -5
  29. package/dist/schema/z/protocol.js +1 -1
  30. package/dist/schema/z/register.d.ts +1 -1
  31. package/dist/schema/z/register.js +1 -1
  32. package/dist/transport/express/body.js +2 -2
  33. package/dist/transport/express/index.d.ts +2 -2
  34. package/dist/transport/express/index.js +1 -1
  35. package/dist/transport/express/middleware.d.ts +2 -2
  36. package/dist/transport/express/middleware.js +5 -5
  37. package/dist/transport/express/respond.d.ts +1 -1
  38. package/dist/transport/express/respond.js +1 -1
  39. package/dist/transport/stdio/index.d.ts +1 -1
  40. package/dist/transport/stdio/index.js +1 -1
  41. package/dist/transport/stdio/middleware.d.ts +2 -2
  42. package/dist/transport/stdio/middleware.js +4 -4
  43. package/dist/transport/ws/index.d.ts +2 -2
  44. package/dist/transport/ws/index.js +2 -2
  45. package/dist/transport/ws/middleware.d.ts +2 -2
  46. package/dist/transport/ws/middleware.js +3 -3
  47. package/dist/transport/ws/standalone.d.ts +1 -1
  48. package/dist/transport/ws/standalone.js +2 -2
  49. package/dist/types.d.ts +4 -4
  50. package/htdoc/assets/{index-CQr-lnlD.js → index-BEVUmX2-.js} +170 -20
  51. package/htdoc/assets/index-BEVUmX2-.js.map +1 -0
  52. package/htdoc/index.html +1 -1
  53. package/package.json +4 -3
  54. package/webui/src/App.tsx +30 -3
  55. package/webui/src/api/docGen.ts +188 -0
  56. package/webui/src/components/SchemaForm.tsx +0 -1
  57. package/webui/src/components/Toolbar.tsx +13 -1
  58. package/dist/schema/index.d.ts +0 -4
  59. package/dist/schema/index.d.ts.map +0 -1
  60. package/dist/schema/index.js +0 -4
  61. package/dist/schema/index.js.map +0 -1
  62. package/dist/schema/primitives.d.ts +0 -25
  63. package/dist/schema/primitives.d.ts.map +0 -1
  64. package/dist/schema/primitives.js +0 -153
  65. package/dist/schema/primitives.js.map +0 -1
  66. package/dist/schema/rpc.d.ts +0 -21
  67. package/dist/schema/rpc.d.ts.map +0 -1
  68. package/dist/schema/rpc.js +0 -17
  69. package/dist/schema/rpc.js.map +0 -1
  70. package/dist/stream/index.d.ts +0 -3
  71. package/dist/stream/index.d.ts.map +0 -1
  72. package/dist/stream/index.js +0 -2
  73. package/dist/stream/index.js.map +0 -1
  74. package/dist/stream/stringify.d.ts +0 -19
  75. package/dist/stream/stringify.d.ts.map +0 -1
  76. package/dist/stream/stringify.js +0 -217
  77. package/dist/stream/stringify.js.map +0 -1
  78. package/htdoc/assets/index-CQr-lnlD.js.map +0 -1
  79. /package/dist/errors/{RpcError.d.ts.map → RPCError.d.ts.map} +0 -0
  80. /package/dist/errors/{RpcError.js → RPCError.js} +0 -0
  81. /package/dist/errors/{RpcError.js.map → RPCError.js.map} +0 -0
@@ -1,217 +0,0 @@
1
- import { Readable } from 'node:stream';
2
- const FLUSH_THRESHOLD = 1024 * 128;
3
- /** Synchronous serializer that mirrors JSON.stringify but tolerates undefined values. */
4
- export function stringifySync(input) {
5
- let buffer = '';
6
- const walk = (value) => {
7
- const type = typeof value;
8
- if (type === 'undefined') {
9
- buffer += 'undefined';
10
- return;
11
- }
12
- if (type === 'string') {
13
- buffer += JSON.stringify(value);
14
- return;
15
- }
16
- if (type === 'number' || type === 'boolean') {
17
- buffer += JSON.stringify(value);
18
- return;
19
- }
20
- if (type === 'object') {
21
- if (value === null) {
22
- buffer += 'null';
23
- return;
24
- }
25
- if (Array.isArray(value)) {
26
- buffer += '[';
27
- for (let i = 0; i < value.length; i++) {
28
- if (i !== 0)
29
- buffer += ',';
30
- walk(value[i]);
31
- }
32
- buffer += ']';
33
- return;
34
- }
35
- buffer += '{';
36
- let written = 0;
37
- for (const key of Object.keys(value)) {
38
- const child = value[key];
39
- if (child === undefined)
40
- continue;
41
- if (written !== 0)
42
- buffer += ',';
43
- buffer += JSON.stringify(key) + ':';
44
- walk(child);
45
- written++;
46
- }
47
- buffer += '}';
48
- return;
49
- }
50
- };
51
- walk(input);
52
- return buffer;
53
- }
54
- async function* walkStream(input, level = 0) {
55
- let buffer = '';
56
- const write = (chunk, force = false) => {
57
- buffer += chunk;
58
- if (buffer.length >= FLUSH_THRESHOLD || force) {
59
- const out = buffer;
60
- buffer = '';
61
- return out;
62
- }
63
- return undefined;
64
- };
65
- const type = typeof input;
66
- if (type === 'undefined') {
67
- const out = write('undefined');
68
- if (out)
69
- yield out;
70
- }
71
- else if (type === 'string' || type === 'number' || type === 'boolean') {
72
- const out = write(JSON.stringify(input));
73
- if (out)
74
- yield out;
75
- }
76
- else if (type === 'object') {
77
- if (input === null) {
78
- const out = write('null');
79
- if (out)
80
- yield out;
81
- }
82
- else if (Array.isArray(input)) {
83
- {
84
- const out = write('[');
85
- if (out)
86
- yield out;
87
- }
88
- for (let i = 0; i < input.length; i++) {
89
- if (i !== 0) {
90
- const out = write(',');
91
- if (out)
92
- yield out;
93
- }
94
- for await (const chunk of walkStream(input[i], level + 1)) {
95
- const out = write(chunk);
96
- if (out)
97
- yield out;
98
- }
99
- }
100
- {
101
- const out = write(']');
102
- if (out)
103
- yield out;
104
- }
105
- }
106
- else if (typeof input.next === 'function') {
107
- // Generator support (legacy behaviour).
108
- const iterator = input;
109
- {
110
- const out = write('[');
111
- if (out)
112
- yield out;
113
- }
114
- let index = 0;
115
- for (;;) {
116
- const next = await Promise.resolve(iterator.next());
117
- if (next.done)
118
- break;
119
- if (index !== 0) {
120
- const out = write(',');
121
- if (out)
122
- yield out;
123
- }
124
- for await (const chunk of walkStream(next.value, level + 1)) {
125
- const out = write(chunk);
126
- if (out)
127
- yield out;
128
- }
129
- index++;
130
- }
131
- {
132
- const out = write(']');
133
- if (out)
134
- yield out;
135
- }
136
- }
137
- else {
138
- {
139
- const out = write('{');
140
- if (out)
141
- yield out;
142
- }
143
- const record = input;
144
- let written = 0;
145
- for (const key of Object.keys(record)) {
146
- const child = record[key];
147
- if (child === undefined)
148
- continue;
149
- if (written !== 0) {
150
- const out = write(',');
151
- if (out)
152
- yield out;
153
- }
154
- {
155
- const out = write(JSON.stringify(key) + ':');
156
- if (out)
157
- yield out;
158
- }
159
- for await (const chunk of walkStream(child, level + 1)) {
160
- const out = write(chunk);
161
- if (out)
162
- yield out;
163
- }
164
- written++;
165
- }
166
- {
167
- const out = write('}');
168
- if (out)
169
- yield out;
170
- }
171
- }
172
- }
173
- if (level === 0) {
174
- const out = write('', true);
175
- if (out)
176
- yield out;
177
- }
178
- }
179
- /**
180
- * Streams `value` to a writable (typically `express.Response`).
181
- * Sets headers on first chunk and always ends the response.
182
- */
183
- export async function pipeStringify(value, res, options = {}) {
184
- const readable = Readable.from(walkStream(value));
185
- let bytesSent = 0;
186
- await new Promise((resolve) => {
187
- readable.on('data', (chunk) => {
188
- if (bytesSent === 0) {
189
- res.setHeader('Cache-Control', 'no-cache');
190
- res.setHeader('Content-Type', 'application/json');
191
- if (options.headers) {
192
- for (const [name, headerValue] of Object.entries(options.headers)) {
193
- res.setHeader(name, headerValue);
194
- }
195
- }
196
- if (options.status && typeof res.status === 'function') {
197
- res.status(options.status);
198
- }
199
- }
200
- bytesSent += typeof chunk === 'string' ? Buffer.byteLength(chunk) : chunk.length;
201
- });
202
- readable.on('end', () => {
203
- res.end();
204
- resolve();
205
- });
206
- readable.on('error', (error) => {
207
- console.error(error);
208
- if (typeof res.status === 'function') {
209
- res.status(500);
210
- }
211
- res.end();
212
- resolve();
213
- });
214
- readable.pipe(res, { end: false });
215
- });
216
- }
217
- //# sourceMappingURL=stringify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stream/stringify.ts"],"names":[],"mappings":"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"}