js-rpc2 1.2.0 → 1.2.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.
- package/package.json +2 -2
- package/src/lib.js +6 -16
- package/src/lib.test.js +28 -1
package/package.json
CHANGED
package/src/lib.js
CHANGED
@@ -544,9 +544,8 @@ export function parseRpcItemData(array) {
|
|
544
544
|
* @param {WritableStreamDefaultWriter<Uint8Array>} writer
|
545
545
|
* @param {Uint8Array} buffer
|
546
546
|
* @param {(msg:string)=>void} logger
|
547
|
-
* @param {any} context
|
548
547
|
*/
|
549
|
-
export async function rpcRunServerDecodeBuffer(extension, writer, buffer, logger
|
548
|
+
export async function rpcRunServerDecodeBuffer(extension, writer, buffer, logger) {
|
550
549
|
/** @type{RPC_DATA} */
|
551
550
|
let box = null
|
552
551
|
let dataId = 0
|
@@ -576,17 +575,7 @@ export async function rpcRunServerDecodeBuffer(extension, writer, buffer, logger
|
|
576
575
|
params.push(p.data)
|
577
576
|
}
|
578
577
|
}
|
579
|
-
let
|
580
|
-
let ret = await new Promise((resolve, reject) => {
|
581
|
-
store.run(context, async () => {
|
582
|
-
try {
|
583
|
-
let ret = await extension[fnName](...params)
|
584
|
-
resolve(ret)
|
585
|
-
} catch (error) {
|
586
|
-
reject(error)
|
587
|
-
}
|
588
|
-
})
|
589
|
-
})
|
578
|
+
let ret = await extension[fnName](...params)
|
590
579
|
if (Array.isArray(ret)) {
|
591
580
|
box = { id: o.id, type: RPC_TYPE_RETURN_ARRAY, data: buildRpcItemData(ret), }
|
592
581
|
} else {
|
@@ -662,13 +651,14 @@ export function createRpcServerHelper(param) {
|
|
662
651
|
const encode = createEncodeStream(rpc_key_iv)
|
663
652
|
const decode = createDecodeStream(rpc_key_iv)
|
664
653
|
let writer = encode.writable.getWriter()
|
665
|
-
let context = param.context
|
666
654
|
decode.readable.pipeTo(new WritableStream({
|
667
655
|
async write(buffer) {
|
656
|
+
let asyncLocalStorage = param.extension.asyncLocalStorage
|
657
|
+
asyncLocalStorage.enterWith(param.context)
|
668
658
|
if (param.async) {
|
669
|
-
rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger
|
659
|
+
rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger).catch(console.error)
|
670
660
|
} else {
|
671
|
-
await rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger
|
661
|
+
await rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger)
|
672
662
|
}
|
673
663
|
},
|
674
664
|
async close() {
|
package/src/lib.test.js
CHANGED
@@ -286,9 +286,11 @@ test('测试RPC调用-KoaRouter', async () => {
|
|
286
286
|
test('测试RPC调用-KoaRouter-AsyncLocalStorage', async () => {
|
287
287
|
// node --test-name-pattern="^测试RPC调用-KoaRouter-AsyncLocalStorage$" src/lib.test.js
|
288
288
|
const extension = {
|
289
|
+
/** @type{AsyncLocalStorage<Koa.ParameterizedContext<Koa.DefaultState, Koa.DefaultContext, any>>} */
|
289
290
|
asyncLocalStorage: new AsyncLocalStorage(),
|
290
291
|
hello: async function (/** @type {string} */ name) {
|
291
|
-
|
292
|
+
let ctx = this.asyncLocalStorage.getStore()
|
293
|
+
strictEqual(ctx.path, '/abc')
|
292
294
|
return `hello ${name}`
|
293
295
|
},
|
294
296
|
}
|
@@ -327,6 +329,7 @@ test('测试RPC调用-KoaRouter-AsyncLocalStorage', async () => {
|
|
327
329
|
let string = await client.hello('asdfghjkl')
|
328
330
|
console.info(string)
|
329
331
|
strictEqual(string, 'hello asdfghjkl')
|
332
|
+
strictEqual(extension.asyncLocalStorage.getStore(), undefined)
|
330
333
|
})
|
331
334
|
console.info('over!')
|
332
335
|
})
|
@@ -408,6 +411,30 @@ test('async-local-storage', async () => {
|
|
408
411
|
await Promise.all([p1.promise, p2.promise])
|
409
412
|
})
|
410
413
|
|
414
|
+
test('async-local-storage-enterWith', async () => {
|
415
|
+
// node --test-name-pattern="^async-local-storage-enterWith$" src/lib.test.js
|
416
|
+
let store = new AsyncLocalStorage()
|
417
|
+
let p1 = Promise.withResolvers()
|
418
|
+
strictEqual(store.getStore(), undefined)
|
419
|
+
store.enterWith('v1')
|
420
|
+
strictEqual(store.getStore(), 'v1')
|
421
|
+
store.run('v2', async () => {
|
422
|
+
strictEqual(store.getStore(), 'v2')
|
423
|
+
let p2 = Promise.withResolvers()
|
424
|
+
setTimeout(() => {
|
425
|
+
strictEqual(store.getStore(), 'v2')
|
426
|
+
store.enterWith('v3')
|
427
|
+
strictEqual(store.getStore(), 'v3')
|
428
|
+
p2.resolve()
|
429
|
+
})
|
430
|
+
await p2.promise
|
431
|
+
strictEqual(store.getStore(), 'v2')
|
432
|
+
p1.resolve()
|
433
|
+
})
|
434
|
+
await p1.promise
|
435
|
+
strictEqual(store.getStore(), 'v1')
|
436
|
+
})
|
437
|
+
|
411
438
|
test('async-local-storage-stream', async () => {
|
412
439
|
// node --test-name-pattern="^async-local-storage-stream$" src/lib.test.js
|
413
440
|
let store = new AsyncLocalStorage()
|