@bigmistqke/rpc 0.1.2 → 0.1.4
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/.claude/settings.local.json +7 -0
- package/dist/fetch-node.js +139 -0
- package/dist/fetch-node.js.map +1 -1
- package/dist/fetch.d.ts +1 -1
- package/dist/fetch.js +148 -7
- package/dist/fetch.js.map +1 -1
- package/dist/handle-18d6fe9b.d.ts +24 -0
- package/dist/messenger.d.ts +80 -9
- package/dist/messenger.js +186 -40
- package/dist/messenger.js.map +1 -1
- package/dist/stream.d.ts +1 -1
- package/dist/stream.js +69 -28
- package/dist/stream.js.map +1 -1
- package/dist/{types-4d4495dd.d.ts → types-9f54da43.d.ts} +5 -1
- package/dist/websocket.d.ts +50 -0
- package/dist/websocket.js +617 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +13 -7
- package/src/core.ts +100 -0
- package/src/fetch/index.ts +2 -1
- package/src/fetch/node.ts +1 -1
- package/src/handle.ts +48 -0
- package/src/{messenger.ts → messenger/index.ts} +163 -21
- package/src/{message-protocol.ts → protocol.ts} +11 -1
- package/src/server-send-events/index.ts +3 -2
- package/src/stream/encoding.ts +2 -2
- package/src/stream/index.ts +3 -14
- package/src/types.ts +6 -1
- package/src/utils.ts +0 -32
- package/src/websocket/index.ts +142 -0
- package/test/encoding.test.ts +4 -4
- package/test/fetch.test.ts +3 -3
- package/test/messenger.test.ts +255 -41
- package/test/{message-protocol.test.ts → protocol.test.ts} +7 -7
- package/test/sse.test.ts +3 -3
- package/test/stream.test.ts +4 -8
- package/test/utils.test.ts +1 -2
- package/test/websocket.test.ts +514 -0
- package/tsup.config.ts +2 -1
- package/LICENSE +0 -21
package/dist/fetch.d.ts
CHANGED
package/dist/fetch.js
CHANGED
|
@@ -167,6 +167,48 @@ function array(item, message) {
|
|
|
167
167
|
}
|
|
168
168
|
};
|
|
169
169
|
}
|
|
170
|
+
function boolean(message) {
|
|
171
|
+
return {
|
|
172
|
+
kind: "schema",
|
|
173
|
+
type: "boolean",
|
|
174
|
+
reference: boolean,
|
|
175
|
+
expects: "boolean",
|
|
176
|
+
async: false,
|
|
177
|
+
message,
|
|
178
|
+
get "~standard"() {
|
|
179
|
+
return _getStandardProps(this);
|
|
180
|
+
},
|
|
181
|
+
"~run"(dataset, config2) {
|
|
182
|
+
if (typeof dataset.value === "boolean") {
|
|
183
|
+
dataset.typed = true;
|
|
184
|
+
} else {
|
|
185
|
+
_addIssue(this, "type", dataset, config2);
|
|
186
|
+
}
|
|
187
|
+
return dataset;
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function number(message) {
|
|
192
|
+
return {
|
|
193
|
+
kind: "schema",
|
|
194
|
+
type: "number",
|
|
195
|
+
reference: number,
|
|
196
|
+
expects: "number",
|
|
197
|
+
async: false,
|
|
198
|
+
message,
|
|
199
|
+
get "~standard"() {
|
|
200
|
+
return _getStandardProps(this);
|
|
201
|
+
},
|
|
202
|
+
"~run"(dataset, config2) {
|
|
203
|
+
if (typeof dataset.value === "number" && !isNaN(dataset.value)) {
|
|
204
|
+
dataset.typed = true;
|
|
205
|
+
} else {
|
|
206
|
+
_addIssue(this, "type", dataset, config2);
|
|
207
|
+
}
|
|
208
|
+
return dataset;
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
}
|
|
170
212
|
function object(entries, message) {
|
|
171
213
|
return {
|
|
172
214
|
kind: "schema",
|
|
@@ -250,6 +292,32 @@ function object(entries, message) {
|
|
|
250
292
|
}
|
|
251
293
|
};
|
|
252
294
|
}
|
|
295
|
+
function optional(wrapped, default_) {
|
|
296
|
+
return {
|
|
297
|
+
kind: "schema",
|
|
298
|
+
type: "optional",
|
|
299
|
+
reference: optional,
|
|
300
|
+
expects: `(${wrapped.expects} | undefined)`,
|
|
301
|
+
async: false,
|
|
302
|
+
wrapped,
|
|
303
|
+
default: default_,
|
|
304
|
+
get "~standard"() {
|
|
305
|
+
return _getStandardProps(this);
|
|
306
|
+
},
|
|
307
|
+
"~run"(dataset, config2) {
|
|
308
|
+
if (dataset.value === void 0) {
|
|
309
|
+
if (this.default !== void 0) {
|
|
310
|
+
dataset.value = getDefault(this, dataset, config2);
|
|
311
|
+
}
|
|
312
|
+
if (dataset.value === void 0) {
|
|
313
|
+
dataset.typed = true;
|
|
314
|
+
return dataset;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return this.wrapped["~run"](dataset, config2);
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
}
|
|
253
321
|
function string(message) {
|
|
254
322
|
return {
|
|
255
323
|
kind: "schema",
|
|
@@ -271,6 +339,22 @@ function string(message) {
|
|
|
271
339
|
}
|
|
272
340
|
};
|
|
273
341
|
}
|
|
342
|
+
function unknown() {
|
|
343
|
+
return {
|
|
344
|
+
kind: "schema",
|
|
345
|
+
type: "unknown",
|
|
346
|
+
reference: unknown,
|
|
347
|
+
expects: "unknown",
|
|
348
|
+
async: false,
|
|
349
|
+
get "~standard"() {
|
|
350
|
+
return _getStandardProps(this);
|
|
351
|
+
},
|
|
352
|
+
"~run"(dataset) {
|
|
353
|
+
dataset.typed = true;
|
|
354
|
+
return dataset;
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
}
|
|
274
358
|
function safeParse(schema, input, config2) {
|
|
275
359
|
const dataset = schema["~run"]({ value: input }, getGlobalConfig(config2));
|
|
276
360
|
return {
|
|
@@ -281,13 +365,76 @@ function safeParse(schema, input, config2) {
|
|
|
281
365
|
};
|
|
282
366
|
}
|
|
283
367
|
|
|
368
|
+
// src/handle.ts
|
|
369
|
+
var $HANDLE_MARKER = Symbol("RPC-HANDLE-MARKER");
|
|
370
|
+
|
|
284
371
|
// src/utils.ts
|
|
372
|
+
function createShape(schema, create) {
|
|
373
|
+
return {
|
|
374
|
+
validate: (value) => safeParse(schema, value).success,
|
|
375
|
+
create
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// src/protocol.ts
|
|
380
|
+
var $MESSENGER_REQUEST = "RPC_PROXY_REQUEST";
|
|
381
|
+
var requestSchema = object({
|
|
382
|
+
[$MESSENGER_REQUEST]: number(),
|
|
383
|
+
payload: unknown()
|
|
384
|
+
});
|
|
385
|
+
var RequestShape = createShape(requestSchema, (id, payload) => ({
|
|
386
|
+
[$MESSENGER_REQUEST]: id,
|
|
387
|
+
payload
|
|
388
|
+
}));
|
|
389
|
+
var $MESSENGER_RESPONSE = "RPC_PROXY_RESPONSE";
|
|
390
|
+
var ResponseShape = createShape(
|
|
391
|
+
object({
|
|
392
|
+
[$MESSENGER_RESPONSE]: number(),
|
|
393
|
+
payload: optional(unknown())
|
|
394
|
+
}),
|
|
395
|
+
(request, payload) => ({
|
|
396
|
+
[$MESSENGER_RESPONSE]: request[$MESSENGER_REQUEST],
|
|
397
|
+
payload
|
|
398
|
+
})
|
|
399
|
+
);
|
|
400
|
+
var $MESSENGER_ERROR = "RPC_PROXY_ERROR";
|
|
401
|
+
var ErrorShape = createShape(
|
|
402
|
+
object({
|
|
403
|
+
[$MESSENGER_ERROR]: number(),
|
|
404
|
+
error: unknown()
|
|
405
|
+
}),
|
|
406
|
+
(data, error) => ({
|
|
407
|
+
[$MESSENGER_ERROR]: data[$MESSENGER_REQUEST],
|
|
408
|
+
error
|
|
409
|
+
})
|
|
410
|
+
);
|
|
411
|
+
var $MESSENGER_RPC_REQUEST = "RPC_PROXY_RPC_REQUEST";
|
|
412
|
+
var RPCPayloadShape = createShape(
|
|
413
|
+
object({
|
|
414
|
+
[$MESSENGER_RPC_REQUEST]: boolean(),
|
|
415
|
+
topics: array(string()),
|
|
416
|
+
args: array(any())
|
|
417
|
+
}),
|
|
418
|
+
(topics, args) => ({ [$MESSENGER_RPC_REQUEST]: true, topics, args })
|
|
419
|
+
);
|
|
420
|
+
var $MESSENGER_HANDLE = "RPC_PROXY_HANDLE";
|
|
421
|
+
var HandleResponseShape = createShape(
|
|
422
|
+
object({
|
|
423
|
+
[$MESSENGER_HANDLE]: string()
|
|
424
|
+
// namespace ID
|
|
425
|
+
}),
|
|
426
|
+
(namespaceId) => ({ [$MESSENGER_HANDLE]: namespaceId })
|
|
427
|
+
);
|
|
428
|
+
|
|
429
|
+
// src/core.ts
|
|
285
430
|
function createCommander(apply) {
|
|
286
431
|
function _createCommander(topics, apply2) {
|
|
287
432
|
return new Proxy(function() {
|
|
288
433
|
}, {
|
|
289
|
-
get(
|
|
434
|
+
get(target, topic) {
|
|
290
435
|
if (typeof topic === "symbol")
|
|
436
|
+
return target[topic];
|
|
437
|
+
if (topic === "then")
|
|
291
438
|
return void 0;
|
|
292
439
|
return _createCommander([...topics, topic], apply2);
|
|
293
440
|
},
|
|
@@ -298,12 +445,6 @@ function createCommander(apply) {
|
|
|
298
445
|
}
|
|
299
446
|
return _createCommander([], apply);
|
|
300
447
|
}
|
|
301
|
-
function createShape(schema, create) {
|
|
302
|
-
return {
|
|
303
|
-
validate: (value) => safeParse(schema, value).success,
|
|
304
|
-
create
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
448
|
function callMethod(methods, topics, args) {
|
|
308
449
|
const method = topics.reduce((acc, topic) => {
|
|
309
450
|
const result = acc?.[topic];
|