comq 0.8.0 → 0.10.0

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 (67) hide show
  1. package/.github/dependabot.yml +2 -2
  2. package/.github/workflows/codeql.yml +1 -1
  3. package/.github/workflows/release.yaml +16 -15
  4. package/docs/reply-stream-topology-dark.jpg +0 -0
  5. package/docs/reply-stream-topology-light.jpg +0 -0
  6. package/examples/readme.md +19 -3
  7. package/examples/streams/consumer.js +36 -0
  8. package/examples/streams/producer.js +44 -0
  9. package/features/backpressure.feature +2 -2
  10. package/features/events.feature +5 -0
  11. package/features/readme.md +2 -2
  12. package/features/recovery.feature +0 -3
  13. package/features/rpc.feature +15 -10
  14. package/features/rpc.streams.feature +81 -0
  15. package/features/rpc.streams.shards.feature +37 -0
  16. package/features/steps/.test/context.test.js +1 -1
  17. package/features/steps/.test/events.test.js +2 -2
  18. package/features/steps/.test/rpc.test.js +1 -1
  19. package/features/steps/.types/context.d.ts +9 -1
  20. package/features/steps/common.js +12 -0
  21. package/features/steps/context.js +9 -2
  22. package/features/steps/events.js +29 -0
  23. package/features/steps/rpc.js +273 -0
  24. package/lerna.json +1 -2
  25. package/package.json +2 -2
  26. package/readme.md +159 -31
  27. package/source/.io/ReplyPipe.js +158 -0
  28. package/source/.io/ReplyStream.js +142 -0
  29. package/source/.io/const.js +10 -0
  30. package/source/.io/{replies.js → createReplyEmitter.js} +3 -6
  31. package/source/.io/index.js +5 -1
  32. package/source/attributes/failsafe.js +34 -0
  33. package/source/attributes/failsafe.test.js +133 -0
  34. package/source/attributes/index.js +13 -0
  35. package/source/attributes/lazy.js +79 -0
  36. package/source/attributes/lazy.test.js +299 -0
  37. package/source/attributes/memo.js +13 -0
  38. package/source/attributes/memo.test.js +36 -0
  39. package/source/attributes/recall.js +42 -0
  40. package/source/attributes/recall.test.js +92 -0
  41. package/source/attributes/track.js +32 -0
  42. package/source/attributes/track.test.js +133 -0
  43. package/source/channel.js +33 -18
  44. package/source/connect.js +2 -2
  45. package/source/connection.js +4 -11
  46. package/source/emitter.js +13 -0
  47. package/source/encode.js +1 -1
  48. package/source/events.js +3 -3
  49. package/source/io.js +184 -48
  50. package/source/pipeline.js +43 -0
  51. package/source/shards/channel.js +28 -12
  52. package/source/shards/connection.js +2 -2
  53. package/test/channel.test.js +9 -1
  54. package/test/encode.test.js +2 -2
  55. package/test/encodings.js +1 -1
  56. package/test/io.diagnostics.test.js +3 -3
  57. package/test/io.emit.test.js +18 -3
  58. package/test/io.request.test.js +45 -23
  59. package/test/pipeline.test.js +81 -0
  60. package/test/shards/channel.test.js +39 -3
  61. package/test/shards/connection.test.js +1 -1
  62. package/types/channel.d.ts +13 -11
  63. package/types/connection.d.ts +3 -3
  64. package/types/diagnostic.d.ts +4 -3
  65. package/types/encoding.d.ts +2 -2
  66. package/types/index.d.ts +4 -4
  67. package/types/io.d.ts +40 -32
package/types/io.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { Readable } from 'node:stream'
2
+ import type { EventEmitter } from 'node:events'
1
3
  import * as _diagnostics from './diagnostic'
2
4
  import * as _encoding from './encoding'
3
5
  import * as _topology from './topology'
@@ -5,59 +7,65 @@ import * as _amqp from './amqp'
5
7
 
6
8
  declare namespace comq {
7
9
 
8
- type producer = (message: any) => any | Promise<any>
9
- type consumer = (message: any, headers?: _amqp.Properties) => void | Promise<void>
10
+ type Producer<Input = any, Output = any> = (message: Input) => Output | Promise<Output>
11
+ type Consumer<T = any> = (message: T, headers?: _amqp.Properties) => void | Promise<void>
10
12
 
11
- interface ReplyEmitter {
12
- queue: string
13
-
14
- once(name: string, callback: Function): void
15
-
16
- emit(name: string, value: any): void
13
+ interface ReplyEmitter extends EventEmitter {
14
+ readonly queue: string
15
+ }
17
16
 
18
- clear(): void
17
+ interface Destroyable extends EventEmitter {
18
+ destroy (): void
19
19
  }
20
20
 
21
- type ReplyToPropertyFormatter = (queue: string) => string
21
+ interface Request {
22
+ buffer: Buffer
23
+ emitter: ReplyEmitter
24
+ properties: _amqp.Properties
25
+ reply: any
26
+ }
22
27
 
23
28
  interface IO extends _diagnostics.Diagnosable {
24
- reply(queue: string, produce: producer): Promise<void>
29
+ reply (queue: string, produce: Producer): Promise<void>
30
+
31
+ request<Reply = any, Request = any> (queue: string, payload: Request, encoding?: _encoding.Encoding): Promise<Reply>
32
+
33
+ request (queue: string, stream: Readable, encoding?: _encoding.Encoding): Promise<Readable>
34
+
35
+ fetch (queue: string, payload: any, encoding?: _encoding.Encoding): Promise<Readable>
36
+
37
+ consume<T = any> (exchange: string, group: string, consumer: Consumer<T>): Promise<void>
25
38
 
26
- request(
27
- queue: string,
28
- payload: any,
29
- encoding?: _encoding.encoding,
30
- replyToFormatter?: ReplyToPropertyFormatter)
31
- : Promise<any>
39
+ consume<T = any> (exchange: string, consumer: Consumer<T>): Promise<void>
32
40
 
33
- consume(exchange: string, group: string, consumer: consumer): Promise<void>
41
+ emit (exchange: string, payload: any, encoding?: _encoding.Encoding): Promise<void>
34
42
 
35
- consume(exchange: string, consumer: consumer): Promise<void>
43
+ emit (exchange: string, payload: any, properties?: _amqp.Properties): Promise<void>
36
44
 
37
- emit(exchange: string, payload: any, encoding?: _encoding.encoding): Promise<void>
45
+ emit (exchange: string, stream: Readable, encoding?: _encoding.Encoding): Promise<void>
38
46
 
39
- emit(exchange: string, payload: any, properties?: _amqp.Properties): Promise<void>
47
+ emit (exchange: string, stream: Readable, properties?: _amqp.Properties): Promise<void>
40
48
 
41
- seal(): Promise<void>
49
+ seal (): Promise<void>
42
50
 
43
- close(): Promise<void>
51
+ close (): Promise<void>
44
52
 
45
- diagnose(event: 'open', listener: (index?: number) => void)
53
+ diagnose (event: 'open', listener: (index?: number) => void): void
46
54
 
47
- diagnose(event: 'close', listener: (index?: number) => void)
55
+ diagnose (event: 'close', listener: (index?: number) => void): void
48
56
 
49
- diagnose(event: 'flow', listener: (channel: _topology.type, index?: number) => void)
57
+ diagnose (event: 'flow', listener: (channel: _topology.type, index?: number) => void): void
50
58
 
51
- diagnose(event: 'drain', listener: (channel: _topology.type, index?: number) => void)
59
+ diagnose (event: 'drain', listener: (channel: _topology.type, index?: number) => void): void
52
60
 
53
- diagnose(event: 'remove', listener: (index?: number) => void)
61
+ diagnose (event: 'remove', listener: (index?: number) => void): void
54
62
 
55
- diagnose(event: 'recover', listener: (channel: _topology.type, index?: number) => void)
63
+ diagnose (event: 'recover', listener: (channel: _topology.type, index?: number) => void): void
56
64
 
57
- diagnose(event: 'discard', listener: (channel: _topology.type, message: any, index?: number) => void)
65
+ diagnose (event: 'discard', listener: (channel: _topology.type, message: any, index?: number) => void): void
58
66
  }
59
67
  }
60
68
 
61
- export type producer = comq.producer
62
- export type consumer = comq.consumer
69
+ export type Producer = comq.Producer
70
+ export type Consumer = comq.Consumer
63
71
  export type IO = comq.IO