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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "js-rpc2",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "js web websocket http rpc",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -31,4 +31,4 @@
31
31
  "koa-router": "^13.0.1",
32
32
  "ws": "^8.18.0"
33
33
  }
34
- }
34
+ }
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, context) {
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 store = extension.asyncLocalStorage
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, context).catch(console.error)
659
+ rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger).catch(console.error)
670
660
  } else {
671
- await rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger, context)
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
- console.info('asyncLocalStorage.getStore', this.asyncLocalStorage.getStore())
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()