@toa.io/core 1.0.0-alpha.32 → 1.0.0-alpha.320

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 (283) hide show
  1. package/package.json +28 -12
  2. package/transpiled/abandon.d.ts +9 -0
  3. package/transpiled/abandon.js +37 -0
  4. package/transpiled/abandon.js.map +1 -0
  5. package/transpiled/assignment.d.ts +6 -0
  6. package/transpiled/assignment.js +25 -0
  7. package/transpiled/assignment.js.map +1 -0
  8. package/transpiled/call.d.ts +10 -0
  9. package/transpiled/call.js +187 -0
  10. package/transpiled/call.js.map +1 -0
  11. package/transpiled/cascade.d.ts +7 -0
  12. package/transpiled/cascade.js +28 -0
  13. package/transpiled/cascade.js.map +1 -0
  14. package/transpiled/component.d.ts +15 -0
  15. package/transpiled/component.js +148 -0
  16. package/transpiled/component.js.map +1 -0
  17. package/transpiled/composition.d.ts +6 -0
  18. package/transpiled/composition.js +20 -0
  19. package/transpiled/composition.js.map +1 -0
  20. package/transpiled/connector.d.ts +71 -0
  21. package/transpiled/connector.js +248 -0
  22. package/transpiled/connector.js.map +1 -0
  23. package/transpiled/context.d.ts +25 -0
  24. package/transpiled/context.js +55 -0
  25. package/transpiled/context.js.map +1 -0
  26. package/transpiled/contract/component.d.ts +37 -0
  27. package/transpiled/contract/component.js +94 -0
  28. package/transpiled/contract/component.js.map +1 -0
  29. package/transpiled/contract/contract.d.ts +10 -0
  30. package/transpiled/contract/contract.js +14 -0
  31. package/transpiled/contract/contract.js.map +1 -0
  32. package/transpiled/contract/index.d.ts +4 -0
  33. package/transpiled/contract/index.js +5 -0
  34. package/transpiled/contract/index.js.map +1 -0
  35. package/transpiled/contract/reply.d.ts +7 -0
  36. package/transpiled/contract/reply.js +48 -0
  37. package/transpiled/contract/reply.js.map +1 -0
  38. package/transpiled/contract/request.d.ts +49 -0
  39. package/transpiled/contract/request.js +152 -0
  40. package/transpiled/contract/request.js.map +1 -0
  41. package/transpiled/contract/schemas.d.ts +4 -0
  42. package/transpiled/contract/schemas.js +38 -0
  43. package/transpiled/contract/schemas.js.map +1 -0
  44. package/transpiled/contract/system.d.ts +33 -0
  45. package/transpiled/contract/system.js +76 -0
  46. package/transpiled/contract/system.js.map +1 -0
  47. package/transpiled/deliveries.d.ts +22 -0
  48. package/transpiled/deliveries.js +31 -0
  49. package/transpiled/deliveries.js.map +1 -0
  50. package/transpiled/effect.d.ts +7 -0
  51. package/transpiled/effect.js +13 -0
  52. package/transpiled/effect.js.map +1 -0
  53. package/transpiled/emission.d.ts +10 -0
  54. package/transpiled/emission.js +16 -0
  55. package/transpiled/emission.js.map +1 -0
  56. package/transpiled/encoded.d.ts +16 -0
  57. package/transpiled/encoded.js +25 -0
  58. package/transpiled/encoded.js.map +1 -0
  59. package/transpiled/entities/changeset.d.ts +10 -0
  60. package/transpiled/entities/changeset.js +27 -0
  61. package/transpiled/entities/changeset.js.map +1 -0
  62. package/transpiled/entities/entity.d.ts +19 -0
  63. package/transpiled/entities/entity.js +137 -0
  64. package/transpiled/entities/entity.js.map +1 -0
  65. package/transpiled/entities/factory.d.ts +27 -0
  66. package/transpiled/entities/factory.js +38 -0
  67. package/transpiled/entities/factory.js.map +1 -0
  68. package/transpiled/entities/index.d.ts +5 -0
  69. package/transpiled/entities/index.js +6 -0
  70. package/transpiled/entities/index.js.map +1 -0
  71. package/transpiled/entities/newid.d.ts +11 -0
  72. package/transpiled/entities/newid.js +41 -0
  73. package/transpiled/entities/newid.js.map +1 -0
  74. package/transpiled/entities/set.d.ts +10 -0
  75. package/transpiled/entities/set.js +19 -0
  76. package/transpiled/entities/set.js.map +1 -0
  77. package/transpiled/event.d.ts +20 -0
  78. package/transpiled/event.js +65 -0
  79. package/transpiled/event.js.map +1 -0
  80. package/transpiled/exceptions.d.ts +110 -0
  81. package/transpiled/exceptions.js +215 -0
  82. package/transpiled/exceptions.js.map +1 -0
  83. package/transpiled/gate.d.ts +40 -0
  84. package/transpiled/gate.js +84 -0
  85. package/transpiled/gate.js.map +1 -0
  86. package/transpiled/guard.d.ts +7 -0
  87. package/transpiled/guard.js +12 -0
  88. package/transpiled/guard.js.map +1 -0
  89. package/transpiled/halting.d.ts +16 -0
  90. package/transpiled/halting.js +25 -0
  91. package/transpiled/halting.js.map +1 -0
  92. package/transpiled/index.d.ts +44 -0
  93. package/transpiled/index.js +36 -0
  94. package/transpiled/index.js.map +1 -0
  95. package/transpiled/instance.d.ts +10 -0
  96. package/transpiled/instance.js +30 -0
  97. package/transpiled/instance.js.map +1 -0
  98. package/transpiled/locator.d.ts +12 -0
  99. package/transpiled/locator.js +32 -0
  100. package/transpiled/locator.js.map +1 -0
  101. package/transpiled/measurements.d.ts +20 -0
  102. package/transpiled/measurements.js +40 -0
  103. package/transpiled/measurements.js.map +1 -0
  104. package/transpiled/observation.d.ts +7 -0
  105. package/transpiled/observation.js +14 -0
  106. package/transpiled/observation.js.map +1 -0
  107. package/transpiled/operation.d.ts +73 -0
  108. package/transpiled/operation.js +213 -0
  109. package/transpiled/operation.js.map +1 -0
  110. package/transpiled/outbox.d.ts +45 -0
  111. package/transpiled/outbox.js +448 -0
  112. package/transpiled/outbox.js.map +1 -0
  113. package/transpiled/outbox.measurements.d.ts +4 -0
  114. package/transpiled/outbox.measurements.js +38 -0
  115. package/transpiled/outbox.measurements.js.map +1 -0
  116. package/transpiled/parts.d.ts +20 -0
  117. package/transpiled/parts.js +23 -0
  118. package/transpiled/parts.js.map +1 -0
  119. package/transpiled/query/criteria.d.ts +6 -0
  120. package/transpiled/query/criteria.js +177 -0
  121. package/transpiled/query/criteria.js.map +1 -0
  122. package/transpiled/query/options.d.ts +3 -0
  123. package/transpiled/query/options.js +34 -0
  124. package/transpiled/query/options.js.map +1 -0
  125. package/transpiled/query.d.ts +9 -0
  126. package/transpiled/query.js +57 -0
  127. package/transpiled/query.js.map +1 -0
  128. package/transpiled/receiver.d.ts +20 -0
  129. package/transpiled/receiver.js +113 -0
  130. package/transpiled/receiver.js.map +1 -0
  131. package/transpiled/reflection.d.ts +9 -0
  132. package/transpiled/reflection.js +13 -0
  133. package/transpiled/reflection.js.map +1 -0
  134. package/transpiled/remote.d.ts +10 -0
  135. package/transpiled/remote.js +11 -0
  136. package/transpiled/remote.js.map +1 -0
  137. package/transpiled/rendering.d.ts +13 -0
  138. package/transpiled/rendering.js +21 -0
  139. package/transpiled/rendering.js.map +1 -0
  140. package/transpiled/safety.d.ts +5 -0
  141. package/transpiled/safety.js +26 -0
  142. package/transpiled/safety.js.map +1 -0
  143. package/transpiled/state.d.ts +36 -0
  144. package/transpiled/state.js +131 -0
  145. package/transpiled/state.js.map +1 -0
  146. package/transpiled/trail.d.ts +78 -0
  147. package/transpiled/trail.js +112 -0
  148. package/transpiled/trail.js.map +1 -0
  149. package/transpiled/transition.d.ts +14 -0
  150. package/transpiled/transition.js +51 -0
  151. package/transpiled/transition.js.map +1 -0
  152. package/transpiled/transmission.d.ts +8 -0
  153. package/transpiled/transmission.js +30 -0
  154. package/transpiled/transmission.js.map +1 -0
  155. package/transpiled/types/atomicity.d.ts +58 -0
  156. package/transpiled/types/atomicity.js +2 -0
  157. package/transpiled/types/atomicity.js.map +1 -0
  158. package/transpiled/types/bindings.d.ts +82 -0
  159. package/transpiled/types/bindings.js +2 -0
  160. package/transpiled/types/bindings.js.map +1 -0
  161. package/transpiled/types/bridges.d.ts +41 -0
  162. package/transpiled/types/bridges.js +2 -0
  163. package/transpiled/types/bridges.js.map +1 -0
  164. package/transpiled/types/extensions.d.ts +121 -0
  165. package/transpiled/types/extensions.js +2 -0
  166. package/transpiled/types/extensions.js.map +1 -0
  167. package/transpiled/types/inbox.d.ts +27 -0
  168. package/transpiled/types/inbox.js +2 -0
  169. package/transpiled/types/inbox.js.map +1 -0
  170. package/transpiled/types/index.d.ts +14 -0
  171. package/transpiled/types/index.js +9 -0
  172. package/transpiled/types/index.js.map +1 -0
  173. package/transpiled/types/message.d.ts +16 -0
  174. package/transpiled/types/message.js +2 -0
  175. package/transpiled/types/message.js.map +1 -0
  176. package/transpiled/types/operations.d.ts +15 -0
  177. package/transpiled/types/operations.js +2 -0
  178. package/transpiled/types/operations.js.map +1 -0
  179. package/transpiled/types/outbox.d.ts +68 -0
  180. package/transpiled/types/outbox.js +2 -0
  181. package/transpiled/types/outbox.js.map +1 -0
  182. package/transpiled/types/receiver.d.ts +9 -0
  183. package/transpiled/types/receiver.js +2 -0
  184. package/transpiled/types/receiver.js.map +1 -0
  185. package/transpiled/types/request.d.ts +119 -0
  186. package/transpiled/types/request.js +2 -0
  187. package/transpiled/types/request.js.map +1 -0
  188. package/transpiled/types/state.d.ts +9 -0
  189. package/transpiled/types/state.js +2 -0
  190. package/transpiled/types/state.js.map +1 -0
  191. package/transpiled/types/storages.d.ts +154 -0
  192. package/transpiled/types/storages.js +2 -0
  193. package/transpiled/types/storages.js.map +1 -0
  194. package/transpiled/unmanaged.d.ts +5 -0
  195. package/transpiled/unmanaged.js +7 -0
  196. package/transpiled/unmanaged.js.map +1 -0
  197. package/src/assignment.js +0 -31
  198. package/src/call.js +0 -42
  199. package/src/cascade.js +0 -35
  200. package/src/component.js +0 -41
  201. package/src/composition.js +0 -25
  202. package/src/connector.js +0 -183
  203. package/src/context.js +0 -55
  204. package/src/contract/conditions.js +0 -21
  205. package/src/contract/index.js +0 -7
  206. package/src/contract/reply.js +0 -25
  207. package/src/contract/request.js +0 -67
  208. package/src/contract/schemas/error.yaml +0 -9
  209. package/src/contract/schemas/index.js +0 -7
  210. package/src/contract/schemas/query.yaml +0 -30
  211. package/src/discovery.js +0 -44
  212. package/src/emission.js +0 -23
  213. package/src/entities/changeset.js +0 -38
  214. package/src/entities/entity.js +0 -74
  215. package/src/entities/factory.js +0 -33
  216. package/src/entities/index.js +0 -5
  217. package/src/entities/set.js +0 -15
  218. package/src/event.js +0 -40
  219. package/src/exceptions.js +0 -100
  220. package/src/exposition.js +0 -27
  221. package/src/index.js +0 -47
  222. package/src/locator.js +0 -54
  223. package/src/observation.js +0 -20
  224. package/src/operation.js +0 -69
  225. package/src/query/criteria.js +0 -41
  226. package/src/query/options.js +0 -40
  227. package/src/query.js +0 -41
  228. package/src/receiver.js +0 -61
  229. package/src/reflection.js +0 -28
  230. package/src/remote.js +0 -17
  231. package/src/state.js +0 -99
  232. package/src/transition.js +0 -67
  233. package/src/transmission.js +0 -33
  234. package/test/call.fixtures.js +0 -27
  235. package/test/call.test.js +0 -46
  236. package/test/component.fixtures.js +0 -21
  237. package/test/component.test.js +0 -40
  238. package/test/connector.fixtures.js +0 -40
  239. package/test/connector.test.js +0 -176
  240. package/test/context.fixtures.js +0 -18
  241. package/test/context.test.js +0 -29
  242. package/test/contract/conditions.test.js +0 -26
  243. package/test/contract/contract.fixtures.js +0 -33
  244. package/test/contract/request.test.js +0 -112
  245. package/test/emission.fixtures.js +0 -17
  246. package/test/emission.test.js +0 -35
  247. package/test/entities/entity.fixtures.js +0 -29
  248. package/test/entities/entity.test.js +0 -65
  249. package/test/entities/factory.fixtures.js +0 -18
  250. package/test/entities/factory.test.js +0 -48
  251. package/test/entities/set.fixtures.js +0 -11
  252. package/test/entities/set.test.js +0 -12
  253. package/test/event.fixtures.js +0 -29
  254. package/test/event.test.js +0 -118
  255. package/test/locator.test.js +0 -113
  256. package/test/query.fixtures.js +0 -100
  257. package/test/query.test.js +0 -86
  258. package/test/receiver.fixtures.js +0 -23
  259. package/test/receiver.test.js +0 -95
  260. package/test/reflection.test.js +0 -30
  261. package/test/state.fixtures.js +0 -47
  262. package/test/state.test.js +0 -46
  263. package/test/transmission.fixtures.js +0 -15
  264. package/test/transmission.test.js +0 -46
  265. package/types/bindings.d.ts +0 -40
  266. package/types/bridges.ts +0 -30
  267. package/types/component.d.ts +0 -9
  268. package/types/connector.d.ts +0 -18
  269. package/types/context.d.ts +0 -21
  270. package/types/entity.d.ts +0 -46
  271. package/types/event.d.ts +0 -11
  272. package/types/exception.d.ts +0 -4
  273. package/types/extensions.d.ts +0 -29
  274. package/types/index.ts +0 -14
  275. package/types/locator.d.ts +0 -13
  276. package/types/message.d.ts +0 -3
  277. package/types/operations.d.ts +0 -2
  278. package/types/query.d.ts +0 -15
  279. package/types/receiver.d.ts +0 -12
  280. package/types/reflection.d.ts +0 -14
  281. package/types/request.d.ts +0 -23
  282. package/types/state.d.ts +0 -35
  283. package/types/storages.d.ts +0 -71
@@ -0,0 +1,5 @@
1
+ import { Operation } from './operation.ts';
2
+ import type { Store } from './operation.ts';
3
+ export declare class Unmanaged extends Operation {
4
+ protected acquire(store: Store): Promise<void>;
5
+ }
@@ -0,0 +1,7 @@
1
+ import { Operation } from './operation.js';
2
+ export class Unmanaged extends Operation {
3
+ async acquire(store) {
4
+ store.state = this.scope.storage.raw;
5
+ }
6
+ }
7
+ //# sourceMappingURL=unmanaged.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unmanaged.js","sourceRoot":"","sources":["../source/unmanaged.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,MAAM,OAAO,SAAU,SAAQ,SAAS;IACnB,KAAK,CAAC,OAAO,CAAC,KAAY;QAC3C,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAA;IACtC,CAAC;CACF"}
package/src/assignment.js DELETED
@@ -1,31 +0,0 @@
1
- 'use strict'
2
-
3
- const { Operation } = require('./operation')
4
-
5
- class Assignment extends Operation {
6
- async acquire (store) {
7
- store.scope = this.scope.changeset(store.request.query)
8
- store.state = store.scope.get()
9
- }
10
-
11
- async commit (store) {
12
- const {
13
- scope,
14
- state,
15
- reply
16
- } = store
17
-
18
- if (reply.error !== undefined) return
19
-
20
- scope.set(state)
21
-
22
- const output = await this.scope.apply(scope)
23
-
24
- // assignment returns new state by default
25
- if (store.reply.output === undefined) {
26
- store.reply.output = output
27
- }
28
- }
29
- }
30
-
31
- exports.Assignment = Assignment
package/src/call.js DELETED
@@ -1,42 +0,0 @@
1
- 'use strict'
2
-
3
- const { Readable } = require('node:stream')
4
- const { Connector } = require('./connector')
5
- const { Err } = require('error-value')
6
-
7
- class Call extends Connector {
8
- #transmitter
9
- #contract
10
-
11
- constructor (transmitter, contract) {
12
- super()
13
-
14
- this.#transmitter = transmitter
15
- this.#contract = contract
16
-
17
- this.depends(transmitter)
18
- }
19
-
20
- async invoke (request = {}) {
21
- this.#contract.fit(request)
22
-
23
- // avoid validation on the recipient's side
24
- request.authentic = true
25
-
26
- const reply = await this.#transmitter.request(request)
27
-
28
- if (reply === null) return null
29
- else if (reply instanceof Readable) return reply
30
- else {
31
- if (reply.exception !== undefined)
32
- throw reply.exception
33
-
34
- if (reply.error !== undefined)
35
- return Err(reply.error.code, reply.error)
36
- else
37
- return reply.output
38
- }
39
- }
40
- }
41
-
42
- exports.Call = Call
package/src/cascade.js DELETED
@@ -1,35 +0,0 @@
1
- 'use strict'
2
-
3
- const { Connector } = require('./connector')
4
-
5
- class Cascade extends Connector {
6
- // #bridges
7
- #last
8
-
9
- constructor (bridges) {
10
- super()
11
-
12
- // this.#bridges = bridges
13
- this.#last = bridges[bridges.length - 1]
14
-
15
- this.depends(bridges)
16
- }
17
-
18
- async run (...args) {
19
- // const reply = {}
20
- //
21
- // for (const bridge of this.#bridges) {
22
- // const partial = await bridge.execute(...args)
23
- //
24
- // if (partial.error) return { error: partial.error }
25
- //
26
- // merge(reply, partial)
27
- // }
28
- //
29
- // return reply
30
-
31
- return this.#last.execute(...args)
32
- }
33
- }
34
-
35
- exports.Cascade = Cascade
package/src/component.js DELETED
@@ -1,41 +0,0 @@
1
- 'use strict'
2
-
3
- const { console } = require('@toa.io/console')
4
- const { Connector } = require('./connector')
5
- const { NotImplementedException } = require('./exceptions')
6
-
7
- /**
8
- * @implements {toa.core.Component}
9
- */
10
- class Component extends Connector {
11
- locator
12
-
13
- #operations
14
-
15
- constructor (locator, operations) {
16
- super()
17
-
18
- this.locator = locator
19
- this.#operations = operations
20
-
21
- Object.values(operations).forEach((operation) => this.depends(operation))
22
- }
23
-
24
- async open () {
25
- console.info(`Runtime '${this.locator.id}' connected`)
26
- }
27
-
28
- async dispose () {
29
- console.info(`Runtime '${this.locator.id}' disconnected`)
30
- }
31
-
32
- async invoke (endpoint, request) {
33
- if (!(endpoint in this.#operations)) {
34
- throw new NotImplementedException(`Endpoint '${endpoint}' not found in '${this.locator.id}'`)
35
- }
36
-
37
- return this.#operations[endpoint].invoke(request)
38
- }
39
- }
40
-
41
- exports.Component = Component
@@ -1,25 +0,0 @@
1
- 'use strict'
2
-
3
- const { console } = require('@toa.io/console')
4
- const { Connector } = require('./connector')
5
-
6
- class Composition extends Connector {
7
- constructor (expositions, producers, receivers, tenants) {
8
- super()
9
-
10
- if (expositions.length > 0) this.depends(expositions)
11
- if (producers.length > 0) this.depends(producers)
12
- if (receivers.length > 0) this.depends(receivers)
13
- if (tenants.length > 0) this.depends(tenants)
14
- }
15
-
16
- async open () {
17
- console.info('Composition complete')
18
- }
19
-
20
- async dispose () {
21
- console.info('Composition shutdown complete')
22
- }
23
- }
24
-
25
- exports.Composition = Composition
package/src/connector.js DELETED
@@ -1,183 +0,0 @@
1
- 'use strict'
2
-
3
- const { console } = require('@toa.io/console')
4
- const { newid } = require('@toa.io/generic')
5
-
6
- /**
7
- * Abstract connections hierarchy
8
- * @implements {toa.core.Connector}
9
- */
10
- class Connector {
11
- /** @type {Array<Connector>} */
12
- #dependencies = []
13
-
14
- /** @type {Array<Connector>} */
15
- #links = []
16
-
17
- /** @type {Promise} */
18
- #connecting
19
-
20
- /** @type {Promise} */
21
- #disconnecting
22
-
23
- /** @type {string} */
24
- id
25
- /** @type {boolean} */
26
- connected = false
27
-
28
- constructor () {
29
- this.id = this.constructor.name + '#' + newid().substring(0, 8)
30
- }
31
-
32
- /**
33
- * Creates a dependency and backlink with another Connector or a set of Connectors
34
- *
35
- * See .connect() and .disconnect()
36
- *
37
- * @param connector {Connector | any | Array<Connector | any>}
38
- * @returns {Connector}
39
- */
40
- depends (connector) {
41
- /** @type {Connector} */
42
- let next
43
-
44
- if (connector instanceof Array) {
45
- if (connector.length === 0) throw new Error('Connectors array must not be empty')
46
-
47
- if (connector.length > 1) {
48
- next = new Connector()
49
-
50
- for (const item of connector) {
51
- this.#dependencies.push(item)
52
- item.depends(next)
53
- }
54
- } else next = connector[0]
55
- } else next = connector
56
-
57
- this.#dependencies.push(next)
58
- next.link(this)
59
-
60
- return next
61
- }
62
-
63
- /**
64
- * Creates a backlink to another Connector
65
- *
66
- * See .connect() and .disconnect()
67
- *
68
- * @param connector {Connector}
69
- * @returns {void}
70
- */
71
- link (connector) {
72
- this.#links.push(connector)
73
- }
74
-
75
- /**
76
- * Connects dependants then self
77
- *
78
- * In case of exception disconnects with current connection interruption
79
- *
80
- * Method is idempotent
81
- *
82
- * @returns {Promise<void>}
83
- */
84
- async connect () {
85
- if (this.#connecting) return this.#connecting
86
-
87
- this.#disconnecting = undefined
88
-
89
- console.debug(`Connecting '${this.id}' with ${this.#dependencies.length} dependencies...`)
90
-
91
- this.#connecting = (async () => {
92
- await Promise.all(this.#dependencies.map((connector) => connector.connect()))
93
- await this.open()
94
- })()
95
-
96
- try {
97
- await this.#connecting
98
- this.connected = true
99
- } catch (e) {
100
- await this.disconnect(true)
101
- throw e
102
- }
103
-
104
- console.debug(`Connector '${this.id}' connected`)
105
- }
106
-
107
- /**
108
- * Disconnects self then dependants
109
- *
110
- * Does nothing if there are connected linked Connectors
111
- *
112
- * Method is idempotent
113
- *
114
- * @param [interrupt] {boolean}
115
- * @returns {Promise<void>}
116
- */
117
- async disconnect (interrupt) {
118
- if (interrupt !== true) await this.#connecting
119
-
120
- if (this.#disconnecting) return this.#disconnecting
121
-
122
- const linked = this.#links.reduce((acc, parent) => acc || parent.connected, false)
123
-
124
- if (linked && interrupt !== true) return
125
-
126
- this.connected = false
127
- this.#connecting = undefined
128
-
129
- this.#disconnecting = (async () => {
130
- const start = +new Date()
131
-
132
- const interval = setInterval(() => {
133
- const delay = +new Date() - start
134
-
135
- if (delay > DELAY) console.warn(`Connector ${this.id} still disconnecting (${delay})`)
136
- }, DELAY)
137
-
138
- if (interrupt !== true) await this.close()
139
-
140
- clearInterval(interval)
141
-
142
- await Promise.all(this.#dependencies.map(connector => connector.disconnect()))
143
-
144
- await this.dispose()
145
- })()
146
-
147
- await this.#disconnecting
148
-
149
- console.debug(`Connector '${this.id}' disconnected`)
150
- }
151
-
152
- async reconnect () {
153
- await this.disconnect()
154
- await this.connect()
155
- }
156
-
157
- debug (node = {}) {
158
- node[this.id] = { connected: this.connected }
159
-
160
- if (this.#dependencies.length > 0) for (const connector of this.#dependencies) connector.debug?.(node[this.id])
161
-
162
- return node
163
- }
164
-
165
- /**
166
- * Called on connection
167
- */
168
- async open () {}
169
-
170
- /**
171
- * Called on disconnection
172
- */
173
- async close () {}
174
-
175
- /**
176
- * Called after self and dependants disconnection is complete
177
- */
178
- async dispose () {}
179
- }
180
-
181
- const DELAY = 5000
182
-
183
- exports.Connector = Connector
package/src/context.js DELETED
@@ -1,55 +0,0 @@
1
- 'use strict'
2
-
3
- const { Connector } = require('./connector')
4
-
5
- /**
6
- * @implements {toa.core.Context}
7
- */
8
- class Context extends Connector {
9
- aspects
10
-
11
- #local
12
- #discover
13
- #remotes = {}
14
-
15
- constructor (local, discover, aspects = []) {
16
- super()
17
-
18
- this.aspects = aspects
19
-
20
- this.#local = local
21
- this.#discover = discover
22
-
23
- this.depends(local)
24
-
25
- if (aspects.length > 0) this.depends(aspects)
26
- }
27
-
28
- async apply (endpoint, request) {
29
- return this.#local.invoke(endpoint, request)
30
- }
31
-
32
- async call (namespace, name, endpoint, request) {
33
- const remote = await this.#remote(namespace, name)
34
-
35
- return remote.invoke(endpoint, request)
36
- }
37
-
38
- async #remote (namespace, name) {
39
- const key = namespace + '.' + name
40
-
41
- this.#remotes[key] ??= this.#connect(namespace, name)
42
-
43
- return this.#remotes[key]
44
- }
45
-
46
- async #connect (namespace, name) {
47
- const remote = await this.#discover(namespace, name)
48
-
49
- this.depends(remote)
50
-
51
- return remote
52
- }
53
- }
54
-
55
- exports.Context = Context
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- const { SystemException } = require('../exceptions')
4
-
5
- class Conditions {
6
- #schema
7
-
8
- constructor (schema) {
9
- this.#schema = schema
10
- }
11
-
12
- fit (value) {
13
- const error = this.#schema.fit(value)
14
-
15
- if (error !== null) throw new this.constructor.Exception(error)
16
- }
17
-
18
- static Exception = SystemException
19
- }
20
-
21
- exports.Conditions = Conditions
@@ -1,7 +0,0 @@
1
- 'use strict'
2
-
3
- const { Request } = require('./request')
4
- const { Reply } = require('./reply')
5
-
6
- exports.Request = Request
7
- exports.Reply = Reply
@@ -1,25 +0,0 @@
1
- 'use strict'
2
-
3
- const schemas = require('./schemas')
4
- const { Conditions } = require('./conditions')
5
- const { ResponseContractException } = require('../exceptions')
6
-
7
- class Reply extends Conditions {
8
- static Exception = ResponseContractException
9
-
10
- /**
11
- * @returns {toa.schema.JSON}
12
- */
13
- static schema (output, error) {
14
- const schema = { type: 'object', properties: {}, additionalProperties: false }
15
-
16
- if (output !== undefined) schema.properties.output = output
17
-
18
- if (error !== undefined) schema.properties.error = error
19
- else schema.properties.error = schemas.error
20
-
21
- return schema
22
- }
23
- }
24
-
25
- exports.Reply = Reply
@@ -1,67 +0,0 @@
1
- 'use strict'
2
-
3
- const schemas = require('./schemas')
4
- const { RequestContractException } = require('../exceptions')
5
- const { Conditions } = require('./conditions')
6
-
7
- class Request extends Conditions {
8
- static Exception = RequestContractException
9
-
10
- /**
11
- * @returns {toa.schema.JSON}
12
- */
13
- static schema (definition, entity) {
14
- const schema = {
15
- type: 'object',
16
- properties: { authentic: { type: 'boolean' } },
17
- additionalProperties: true
18
- }
19
-
20
- const required = []
21
-
22
- if (definition.input !== undefined) {
23
- schema.properties.input = definition.input
24
- required.push('input')
25
- } else {
26
- schema.properties.input = { type: 'null' }
27
- }
28
-
29
- if (entity === undefined)
30
- definition.query = false
31
-
32
- if (definition.query === true)
33
- required.push('query')
34
-
35
- if (definition.query === false)
36
- schema.properties.query = { type: 'null' }
37
-
38
- if (definition.query !== false) {
39
- const query = structuredClone(schemas.query)
40
-
41
- query.properties.id = entity.schema.properties.id
42
-
43
- if (definition.type === 'observation') {
44
- delete query.properties.version
45
- } else {
46
- delete query.properties.projection
47
- }
48
-
49
- if (definition.type !== 'observation' || definition.scope !== 'objects') {
50
- delete query.properties.omit
51
- delete query.properties.limit
52
- } else {
53
- if (query.required === undefined) query.required = ['limit']
54
- else query.required.push('limit')
55
- }
56
-
57
- schema.properties.query = query
58
- }
59
-
60
- if (required.length > 0)
61
- schema.required = required
62
-
63
- return schema
64
- }
65
- }
66
-
67
- exports.Request = Request
@@ -1,9 +0,0 @@
1
- type: object
2
- properties:
3
- code:
4
- anyOf:
5
- - type: integer
6
- - type: string
7
- message:
8
- type: string
9
- required: [code]
@@ -1,7 +0,0 @@
1
- 'use strict'
2
-
3
- const { resolve } = require('path')
4
- const { load } = require('@toa.io/yaml')
5
-
6
- exports.query = load.sync(resolve(__dirname, './query.yaml'))
7
- exports.error = load.sync(resolve(__dirname, './error.yaml'))
@@ -1,30 +0,0 @@
1
- type: object
2
- properties:
3
- id: { }
4
- version:
5
- type: integer
6
- minimum: 0
7
- criteria:
8
- type: string
9
- omit:
10
- type: integer
11
- minimum: 0
12
- limit:
13
- type: integer
14
- minimum: 0
15
- sort:
16
- type: array
17
- uniqueItems: true
18
- minItems: 1
19
- items:
20
- type: string
21
- pattern: ^\w{1,32}(?::(?:asc|desc))?$
22
- projection:
23
- type: array
24
- uniqueItems: true
25
- minItems: 1
26
- items:
27
- type: string
28
- not:
29
- const: id
30
- additionalProperties: false
package/src/discovery.js DELETED
@@ -1,44 +0,0 @@
1
- 'use strict'
2
-
3
- const { console } = require('@toa.io/console')
4
- const { Connector } = require('./connector')
5
-
6
- class Discovery extends Connector {
7
- #lookup
8
- #lookups
9
-
10
- constructor (lookup) {
11
- super()
12
-
13
- this.#lookup = lookup
14
- }
15
-
16
- async open () {
17
- this.#lookups = {}
18
- }
19
-
20
- async lookup (locator) {
21
- const id = locator.id
22
-
23
- if (this.#lookups[id] === undefined) {
24
- this.#lookups[id] = await this.#lookup(locator)
25
- this.depends(this.#lookups[id])
26
- }
27
-
28
- console.debug(`Sending lookup request to '${id}'`)
29
-
30
- const warning = () => console.warn(`Waiting for lookup response from '${id}'...`)
31
- const timeout = setTimeout(warning, TIMEOUT)
32
-
33
- const output = await this.#lookups[id].invoke()
34
-
35
- console.debug(`Lookup response from '${id}' received`)
36
- clearTimeout(timeout)
37
-
38
- return output
39
- }
40
- }
41
-
42
- const TIMEOUT = 5000
43
-
44
- exports.Discovery = Discovery
package/src/emission.js DELETED
@@ -1,23 +0,0 @@
1
- 'use strict'
2
-
3
- const { Connector } = require('./connector')
4
-
5
- class Emission extends Connector {
6
- #events
7
-
8
- constructor (events) {
9
- super()
10
-
11
- this.#events = events
12
-
13
- this.depends(events)
14
- }
15
-
16
- async emit (event) {
17
- const emission = this.#events.map((e) => e.emit(event))
18
-
19
- await Promise.all(emission)
20
- }
21
- }
22
-
23
- exports.Emission = Emission