@toa.io/core 0.4.0-dev.9 → 0.5.0-dev.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toa.io/core",
3
- "version": "0.4.0-dev.9",
3
+ "version": "0.5.0-dev.0",
4
4
  "description": "Toa Core",
5
5
  "author": "temich <tema.gurtovoy@gmail.com>",
6
6
  "homepage": "https://github.com/toa-io/toa#readme",
@@ -20,9 +20,9 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@rsql/parser": "1.2.4",
23
- "@toa.io/console": "0.4.0-dev.9",
24
- "@toa.io/generic": "0.4.0-dev.9",
25
- "@toa.io/yaml": "0.4.0-dev.9",
23
+ "@toa.io/console": "0.4.0",
24
+ "@toa.io/generic": "0.4.0",
25
+ "@toa.io/yaml": "0.4.0",
26
26
  "clone-deep": "4.0.1"
27
27
  },
28
28
  "gitHead": "2be07592325b2e4dc823e81d882a4e50bf50de24"
package/src/receiver.js CHANGED
@@ -13,6 +13,9 @@ class Receiver extends Connector {
13
13
  /** @type {boolean} */
14
14
  #adaptive
15
15
 
16
+ /** @type {boolean} */
17
+ #foreign
18
+
16
19
  /** @type {string} */
17
20
  #endpoint
18
21
 
@@ -31,10 +34,11 @@ class Receiver extends Connector {
31
34
  constructor (definition, local, bridge) {
32
35
  super()
33
36
 
34
- const { conditioned, adaptive, transition } = definition
37
+ const { conditioned, adaptive, foreign, transition } = definition
35
38
 
36
39
  this.#conditioned = conditioned
37
40
  this.#adaptive = adaptive
41
+ this.#foreign = foreign
38
42
  this.#endpoint = transition
39
43
 
40
44
  this.#local = local
@@ -46,13 +50,13 @@ class Receiver extends Connector {
46
50
 
47
51
  /** @hot */
48
52
  async receive (message) {
49
- const { payload, ...extensions } = message
53
+ const { payload, extensions } = this.#parse(message)
50
54
 
51
55
  if (this.#conditioned && await this.#bridge.condition(payload) === false) return
52
56
 
53
57
  const request = await this.#request(payload)
54
58
 
55
- if (extensions) add(request, extensions)
59
+ if (extensions !== undefined) add(request, extensions)
56
60
 
57
61
  await this.#local.invoke(this.#endpoint, request)
58
62
  }
@@ -60,6 +64,23 @@ class Receiver extends Connector {
60
64
  async #request (payload) {
61
65
  return this.#adaptive ? await this.#bridge.request(payload) : payload
62
66
  }
67
+
68
+ /**
69
+ * @param {toa.core.Message | any} message
70
+ * @return {{payload: any, extensions: object | undefined}}
71
+ */
72
+ #parse (message) {
73
+ if (this.#foreign) {
74
+ return {
75
+ payload: message,
76
+ extensions: undefined
77
+ }
78
+ }
79
+
80
+ const { payload, ...extensions } = message
81
+
82
+ return { payload, extensions }
83
+ }
63
84
  }
64
85
 
65
86
  exports.Receiver = Receiver
@@ -93,3 +93,18 @@ describe('adaptive', () => {
93
93
  .toHaveBeenCalledWith(definition.transition, await fixtures.bridge.request.mock.results[0].value)
94
94
  })
95
95
  })
96
+
97
+ describe('foreign', () => {
98
+ beforeEach(() => {
99
+ definition.foreign = true
100
+ receiver = new Receiver(definition, fixtures.local, fixtures.bridge)
101
+ })
102
+
103
+ it('should wrap data from foreign event to payload', async () => {
104
+ const payload = { foo: generate() }
105
+
106
+ await receiver.receive(payload)
107
+
108
+ expect(fixtures.local.invoke).toHaveBeenCalledWith(definition.transition, payload)
109
+ })
110
+ })
@@ -4,7 +4,7 @@ import * as _connector from './connector'
4
4
  declare namespace toa.core {
5
5
 
6
6
  interface Receiver extends _connector.Connector {
7
- receive(message: _message.Message): Promise<void>
7
+ receive(message: _message.Message | any): Promise<void>
8
8
  }
9
9
 
10
10
  }