@toa.io/core 1.0.0-alpha.3 → 1.0.0-alpha.300

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 (256) 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 +146 -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 +93 -0
  16. package/transpiled/component.js.map +1 -0
  17. package/transpiled/composition.d.ts +6 -0
  18. package/transpiled/composition.js +23 -0
  19. package/transpiled/composition.js.map +1 -0
  20. package/transpiled/connector.d.ts +54 -0
  21. package/transpiled/connector.js +193 -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/contract.d.ts +10 -0
  27. package/transpiled/contract/contract.js +14 -0
  28. package/transpiled/contract/contract.js.map +1 -0
  29. package/transpiled/contract/index.d.ts +2 -0
  30. package/transpiled/contract/index.js +3 -0
  31. package/transpiled/contract/index.js.map +1 -0
  32. package/transpiled/contract/reply.d.ts +7 -0
  33. package/transpiled/contract/reply.js +48 -0
  34. package/transpiled/contract/reply.js.map +1 -0
  35. package/transpiled/contract/request.d.ts +39 -0
  36. package/transpiled/contract/request.js +111 -0
  37. package/transpiled/contract/request.js.map +1 -0
  38. package/transpiled/contract/schemas.d.ts +4 -0
  39. package/transpiled/contract/schemas.js +36 -0
  40. package/transpiled/contract/schemas.js.map +1 -0
  41. package/transpiled/discovery.d.ts +19 -0
  42. package/transpiled/discovery.js +52 -0
  43. package/transpiled/discovery.js.map +1 -0
  44. package/transpiled/effect.d.ts +5 -0
  45. package/transpiled/effect.js +11 -0
  46. package/transpiled/effect.js.map +1 -0
  47. package/transpiled/emission.d.ts +10 -0
  48. package/transpiled/emission.js +16 -0
  49. package/transpiled/emission.js.map +1 -0
  50. package/transpiled/entities/changeset.d.ts +10 -0
  51. package/transpiled/entities/changeset.js +27 -0
  52. package/transpiled/entities/changeset.js.map +1 -0
  53. package/transpiled/entities/entity.d.ts +19 -0
  54. package/transpiled/entities/entity.js +137 -0
  55. package/transpiled/entities/entity.js.map +1 -0
  56. package/transpiled/entities/factory.d.ts +27 -0
  57. package/transpiled/entities/factory.js +38 -0
  58. package/transpiled/entities/factory.js.map +1 -0
  59. package/transpiled/entities/index.d.ts +5 -0
  60. package/transpiled/entities/index.js +6 -0
  61. package/transpiled/entities/index.js.map +1 -0
  62. package/transpiled/entities/newid.d.ts +10 -0
  63. package/transpiled/entities/newid.js +35 -0
  64. package/transpiled/entities/newid.js.map +1 -0
  65. package/transpiled/entities/set.d.ts +10 -0
  66. package/transpiled/entities/set.js +19 -0
  67. package/transpiled/entities/set.js.map +1 -0
  68. package/transpiled/event.d.ts +14 -0
  69. package/transpiled/event.js +51 -0
  70. package/transpiled/event.js.map +1 -0
  71. package/transpiled/exceptions.d.ts +89 -0
  72. package/transpiled/exceptions.js +180 -0
  73. package/transpiled/exceptions.js.map +1 -0
  74. package/transpiled/exposition.d.ts +18 -0
  75. package/transpiled/exposition.js +18 -0
  76. package/transpiled/exposition.js.map +1 -0
  77. package/transpiled/guard.d.ts +7 -0
  78. package/transpiled/guard.js +12 -0
  79. package/transpiled/guard.js.map +1 -0
  80. package/transpiled/index.d.ts +37 -0
  81. package/transpiled/index.js +31 -0
  82. package/transpiled/index.js.map +1 -0
  83. package/transpiled/instance.d.ts +10 -0
  84. package/transpiled/instance.js +30 -0
  85. package/transpiled/instance.js.map +1 -0
  86. package/transpiled/locator.d.ts +12 -0
  87. package/transpiled/locator.js +32 -0
  88. package/transpiled/locator.js.map +1 -0
  89. package/transpiled/observation.d.ts +5 -0
  90. package/transpiled/observation.js +12 -0
  91. package/transpiled/observation.js.map +1 -0
  92. package/transpiled/operation.d.ts +67 -0
  93. package/transpiled/operation.js +127 -0
  94. package/transpiled/operation.js.map +1 -0
  95. package/transpiled/outbox.d.ts +45 -0
  96. package/transpiled/outbox.js +430 -0
  97. package/transpiled/outbox.js.map +1 -0
  98. package/transpiled/query/criteria.d.ts +6 -0
  99. package/transpiled/query/criteria.js +74 -0
  100. package/transpiled/query/criteria.js.map +1 -0
  101. package/transpiled/query/options.d.ts +3 -0
  102. package/transpiled/query/options.js +27 -0
  103. package/transpiled/query/options.js.map +1 -0
  104. package/transpiled/query.d.ts +9 -0
  105. package/transpiled/query.js +57 -0
  106. package/transpiled/query.js.map +1 -0
  107. package/transpiled/receiver.d.ts +20 -0
  108. package/transpiled/receiver.js +113 -0
  109. package/transpiled/receiver.js.map +1 -0
  110. package/transpiled/reflection.d.ts +9 -0
  111. package/transpiled/reflection.js +13 -0
  112. package/transpiled/reflection.js.map +1 -0
  113. package/transpiled/remote.d.ts +10 -0
  114. package/transpiled/remote.js +11 -0
  115. package/transpiled/remote.js.map +1 -0
  116. package/transpiled/state.d.ts +36 -0
  117. package/transpiled/state.js +131 -0
  118. package/transpiled/state.js.map +1 -0
  119. package/transpiled/trail.d.ts +71 -0
  120. package/transpiled/trail.js +110 -0
  121. package/transpiled/trail.js.map +1 -0
  122. package/transpiled/transition.d.ts +14 -0
  123. package/transpiled/transition.js +51 -0
  124. package/transpiled/transition.js.map +1 -0
  125. package/transpiled/transmission.d.ts +8 -0
  126. package/transpiled/transmission.js +30 -0
  127. package/transpiled/transmission.js.map +1 -0
  128. package/transpiled/types/atomicity.d.ts +56 -0
  129. package/transpiled/types/atomicity.js +2 -0
  130. package/transpiled/types/atomicity.js.map +1 -0
  131. package/transpiled/types/bindings.d.ts +77 -0
  132. package/transpiled/types/bindings.js +2 -0
  133. package/transpiled/types/bindings.js.map +1 -0
  134. package/transpiled/types/bridges.d.ts +38 -0
  135. package/transpiled/types/bridges.js +2 -0
  136. package/transpiled/types/bridges.js.map +1 -0
  137. package/transpiled/types/extensions.d.ts +92 -0
  138. package/transpiled/types/extensions.js +2 -0
  139. package/transpiled/types/extensions.js.map +1 -0
  140. package/transpiled/types/inbox.d.ts +22 -0
  141. package/transpiled/types/inbox.js +2 -0
  142. package/transpiled/types/inbox.js.map +1 -0
  143. package/transpiled/types/index.d.ts +14 -0
  144. package/transpiled/types/index.js +9 -0
  145. package/transpiled/types/index.js.map +1 -0
  146. package/transpiled/types/message.d.ts +16 -0
  147. package/transpiled/types/message.js +2 -0
  148. package/transpiled/types/message.js.map +1 -0
  149. package/transpiled/types/operations.d.ts +15 -0
  150. package/transpiled/types/operations.js +2 -0
  151. package/transpiled/types/operations.js.map +1 -0
  152. package/transpiled/types/outbox.d.ts +54 -0
  153. package/transpiled/types/outbox.js +2 -0
  154. package/transpiled/types/outbox.js.map +1 -0
  155. package/transpiled/types/receiver.d.ts +9 -0
  156. package/transpiled/types/receiver.js +2 -0
  157. package/transpiled/types/receiver.js.map +1 -0
  158. package/transpiled/types/request.d.ts +103 -0
  159. package/transpiled/types/request.js +2 -0
  160. package/transpiled/types/request.js.map +1 -0
  161. package/transpiled/types/state.d.ts +9 -0
  162. package/transpiled/types/state.js +2 -0
  163. package/transpiled/types/state.js.map +1 -0
  164. package/transpiled/types/storages.d.ts +146 -0
  165. package/transpiled/types/storages.js +2 -0
  166. package/transpiled/types/storages.js.map +1 -0
  167. package/transpiled/unmanaged.d.ts +5 -0
  168. package/transpiled/unmanaged.js +7 -0
  169. package/transpiled/unmanaged.js.map +1 -0
  170. package/src/assignment.js +0 -22
  171. package/src/call.js +0 -42
  172. package/src/cascade.js +0 -36
  173. package/src/component.js +0 -41
  174. package/src/composition.js +0 -25
  175. package/src/connector.js +0 -183
  176. package/src/context.js +0 -55
  177. package/src/contract/conditions.js +0 -21
  178. package/src/contract/index.js +0 -7
  179. package/src/contract/reply.js +0 -25
  180. package/src/contract/request.js +0 -67
  181. package/src/contract/schemas/error.yaml +0 -9
  182. package/src/contract/schemas/index.js +0 -7
  183. package/src/contract/schemas/query.yaml +0 -31
  184. package/src/discovery.js +0 -44
  185. package/src/emission.js +0 -23
  186. package/src/entities/changeset.js +0 -47
  187. package/src/entities/entity.js +0 -58
  188. package/src/entities/factory.js +0 -33
  189. package/src/entities/index.js +0 -5
  190. package/src/entities/set.js +0 -15
  191. package/src/event.js +0 -40
  192. package/src/exceptions.js +0 -99
  193. package/src/exposition.js +0 -27
  194. package/src/index.js +0 -47
  195. package/src/locator.js +0 -49
  196. package/src/observation.js +0 -20
  197. package/src/operation.js +0 -69
  198. package/src/query/criteria.js +0 -41
  199. package/src/query/options.js +0 -40
  200. package/src/query.js +0 -41
  201. package/src/receiver.js +0 -65
  202. package/src/reflection.js +0 -28
  203. package/src/remote.js +0 -17
  204. package/src/state.js +0 -98
  205. package/src/transition.js +0 -60
  206. package/src/transmission.js +0 -33
  207. package/test/call.fixtures.js +0 -27
  208. package/test/call.test.js +0 -46
  209. package/test/component.fixtures.js +0 -21
  210. package/test/component.test.js +0 -40
  211. package/test/connector.fixtures.js +0 -40
  212. package/test/connector.test.js +0 -176
  213. package/test/context.fixtures.js +0 -18
  214. package/test/context.test.js +0 -29
  215. package/test/contract/conditions.test.js +0 -26
  216. package/test/contract/contract.fixtures.js +0 -33
  217. package/test/contract/request.test.js +0 -112
  218. package/test/emission.fixtures.js +0 -17
  219. package/test/emission.test.js +0 -35
  220. package/test/entities/entity.fixtures.js +0 -26
  221. package/test/entities/entity.test.js +0 -76
  222. package/test/entities/factory.fixtures.js +0 -18
  223. package/test/entities/factory.test.js +0 -48
  224. package/test/entities/set.fixtures.js +0 -11
  225. package/test/entities/set.test.js +0 -12
  226. package/test/event.fixtures.js +0 -29
  227. package/test/event.test.js +0 -118
  228. package/test/locator.test.js +0 -113
  229. package/test/query.fixtures.js +0 -100
  230. package/test/query.test.js +0 -86
  231. package/test/receiver.fixtures.js +0 -23
  232. package/test/receiver.test.js +0 -95
  233. package/test/reflection.test.js +0 -30
  234. package/test/state.fixtures.js +0 -47
  235. package/test/state.test.js +0 -46
  236. package/test/transmission.fixtures.js +0 -15
  237. package/test/transmission.test.js +0 -46
  238. package/types/bindings.d.ts +0 -40
  239. package/types/bridges.ts +0 -30
  240. package/types/component.d.ts +0 -9
  241. package/types/connector.d.ts +0 -18
  242. package/types/context.d.ts +0 -21
  243. package/types/entity.d.ts +0 -46
  244. package/types/event.d.ts +0 -11
  245. package/types/exception.d.ts +0 -4
  246. package/types/extensions.d.ts +0 -29
  247. package/types/index.ts +0 -14
  248. package/types/locator.d.ts +0 -12
  249. package/types/message.d.ts +0 -3
  250. package/types/operations.d.ts +0 -2
  251. package/types/query.d.ts +0 -15
  252. package/types/receiver.d.ts +0 -12
  253. package/types/reflection.d.ts +0 -14
  254. package/types/request.d.ts +0 -23
  255. package/types/state.d.ts +0 -35
  256. package/types/storages.d.ts +0 -71
package/src/exceptions.js DELETED
@@ -1,99 +0,0 @@
1
- 'use strict'
2
-
3
- const { swap } = require('@toa.io/generic')
4
-
5
- const codes = {
6
- System: 0,
7
- NotImplemented: 10,
8
-
9
- Contract: 200,
10
- RequestSyntax: 201,
11
- RequestContract: 202,
12
- RequestConflict: 203,
13
- ResponseContract: 211,
14
- EntityContract: 212,
15
- QuerySyntax: 221,
16
-
17
- State: 300,
18
- StateNotFound: 302,
19
- StatePrecondition: 303,
20
- StateConcurrency: 304,
21
- StateInitialization: 305,
22
-
23
- Communication: 400,
24
- Transmission: 401
25
- }
26
-
27
- /**
28
- * @implements {toa.core.Exception}
29
- */
30
- class Exception {
31
- code
32
- message
33
-
34
- constructor (code, message) {
35
- this.code = code
36
- this.message = message
37
- }
38
- }
39
-
40
- class SystemException extends Exception {
41
- stack
42
-
43
- constructor (error) {
44
- super(codes.System, error.message)
45
-
46
- if (error.stack !== undefined) this.stack = error.stack
47
- }
48
- }
49
-
50
- class ContractException extends Exception {
51
- keyword
52
- property
53
- schema
54
- path
55
-
56
- constructor (code, error) {
57
- super(code || codes.Contract, error.message)
58
-
59
- this.keyword = error.keyword
60
- this.property = error.property
61
- this.schema = error.schema
62
- this.path = error.path
63
- }
64
- }
65
-
66
- class RequestContractException extends ContractException {
67
- constructor (error) { super(codes.RequestContract, error) }
68
- }
69
-
70
- class ResponseContractException extends ContractException {
71
- constructor (error) { super(codes.ResponseContract, error) }
72
- }
73
-
74
- class EntityContractException extends ContractException {
75
- constructor (error) { super(codes.EntityContract, error) }
76
- }
77
-
78
- // #region exports
79
- exports.Exception = Exception
80
- exports.SystemException = SystemException
81
- exports.RequestContractException = RequestContractException
82
- exports.ResponseContractException = ResponseContractException
83
- exports.EntityContractException = EntityContractException
84
-
85
- for (const [name, code] of Object.entries(codes)) {
86
- const classname = name + 'Exception'
87
-
88
- if (exports[classname] === undefined) {
89
- exports[classname] = class extends Exception {
90
- constructor (message) {
91
- super(code, message || classname)
92
- }
93
- }
94
- }
95
- }
96
-
97
- exports.codes = codes
98
- exports.names = swap(codes)
99
- // #endregion
package/src/exposition.js DELETED
@@ -1,27 +0,0 @@
1
- 'use strict'
2
-
3
- const { Connector } = require('./connector')
4
-
5
- class Exposition extends Connector {
6
- locator
7
-
8
- #exposition
9
-
10
- constructor (locator, manifest) {
11
- super()
12
-
13
- this.locator = locator
14
- this.#exposition = expose(manifest)
15
- }
16
-
17
- async invoke () {
18
- return { output: this.#exposition }
19
- }
20
- }
21
-
22
- const expose = (manifest) => {
23
- const { namespace, name, operations, events, entity } = manifest
24
- return { namespace, name, operations, events, entity }
25
- }
26
-
27
- exports.Exposition = Exposition
package/src/index.js DELETED
@@ -1,47 +0,0 @@
1
- const { Assignment } = require('./assignment')
2
- const { Call } = require('./call')
3
- const { Cascade } = require('./cascade')
4
- const { Composition } = require('./composition')
5
- const { Connector } = require('./connector')
6
- const { Context } = require('./context')
7
- const { Discovery } = require('./discovery')
8
- const { Emission } = require('./emission')
9
- const { Event } = require('./event')
10
- const { Exposition } = require('./exposition')
11
- const { Locator } = require('./locator')
12
- const { Observation } = require('./observation')
13
- const { Operation } = require('./operation')
14
- const { Query } = require('./query')
15
- const { Receiver } = require('./receiver')
16
- const { Reflection } = require('./reflection')
17
- const { Remote } = require('./remote')
18
- const { Component } = require('./component')
19
- const { State } = require('./state')
20
- const { Transition } = require('./transition')
21
- const { Transmission } = require('./transmission')
22
-
23
- exports.entities = require('./entities')
24
- exports.exceptions = require('./exceptions')
25
- exports.contract = require('./contract')
26
-
27
- exports.Assignment = Assignment
28
- exports.Call = Call
29
- exports.Cascade = Cascade
30
- exports.Component = Component
31
- exports.Composition = Composition
32
- exports.Connector = Connector
33
- exports.Context = Context
34
- exports.Discovery = Discovery
35
- exports.Emission = Emission
36
- exports.Event = Event
37
- exports.Exposition = Exposition
38
- exports.Locator = Locator
39
- exports.Observation = Observation
40
- exports.Operation = Operation
41
- exports.Query = Query
42
- exports.Receiver = Receiver
43
- exports.Reflection = Reflection
44
- exports.Remote = Remote
45
- exports.State = State
46
- exports.Transition = Transition
47
- exports.Transmission = Transmission
package/src/locator.js DELETED
@@ -1,49 +0,0 @@
1
- 'use strict'
2
-
3
- const { concat } = require('@toa.io/generic')
4
-
5
- /**
6
- * @implements {toa.core.Locator}
7
- */
8
- class Locator {
9
- name
10
- namespace
11
-
12
- id
13
- label
14
- uppercase
15
-
16
- /**
17
- * @param {string} name
18
- * @param {string} [namespace]
19
- */
20
- constructor (name, namespace) {
21
- if (name === undefined) throw new TypeError('Locator name must be defined')
22
-
23
- this.name = name
24
- this.namespace = namespace
25
-
26
- this.id = concat(namespace, '.') + name
27
- this.label = (concat(namespace, '-') + name).toLowerCase()
28
- this.uppercase = (concat(namespace, '_') + name).toUpperCase()
29
- }
30
-
31
- hostname (prefix) {
32
- return concat(prefix?.toLowerCase(), '-') + this.label
33
- }
34
-
35
- /**
36
- * @param {string} string
37
- * @returns {Locator}
38
- */
39
- static parse (string) {
40
- const [namespace, name] = string.split(DOT)
41
-
42
- if (name === undefined) return new Locator(namespace)
43
- else return new Locator(name, namespace)
44
- }
45
- }
46
-
47
- const DOT = '.'
48
-
49
- exports.Locator = Locator
@@ -1,20 +0,0 @@
1
- 'use strict'
2
-
3
- const { Operation } = require('./operation')
4
-
5
- class Observation extends Operation {
6
- async acquire (store) {
7
- const scope = await this.query(store.request.query)
8
- const state = scope === null ? null : scope.get()
9
-
10
- store.scope = scope
11
- store.state = state
12
- }
13
-
14
- async run (store) {
15
- if (store.scope === null) store.reply = null
16
- else await super.run(store)
17
- }
18
- }
19
-
20
- exports.Observation = Observation
package/src/operation.js DELETED
@@ -1,69 +0,0 @@
1
- 'use strict'
2
-
3
- const { Connector } = require('./connector')
4
- const { SystemException } = require('./exceptions')
5
-
6
- class Operation extends Connector {
7
- scope
8
-
9
- #cascade
10
- #contracts
11
- #query
12
- #scope
13
-
14
- constructor (cascade, scope, contracts, query, definition) {
15
- super()
16
-
17
- this.scope = scope
18
-
19
- this.#cascade = cascade
20
- this.#contracts = contracts
21
- this.#query = query
22
- this.#scope = definition.scope
23
-
24
- this.depends(cascade)
25
- }
26
-
27
- async invoke (request) {
28
- try {
29
- if (request.authentic !== true) this.#contracts.request.fit(request)
30
- if ('query' in request) request.query = this.#query.parse(request.query)
31
-
32
- const store = { request }
33
-
34
- return await this.process(store)
35
- } catch (e) {
36
- const exception = e instanceof Error ? new SystemException(e) : e
37
-
38
- return { exception }
39
- }
40
- }
41
-
42
- async process (store) {
43
- await this.acquire(store)
44
- await this.run(store)
45
- await this.commit(store)
46
-
47
- return store.reply
48
- }
49
-
50
- async acquire () {}
51
-
52
- async run (store) {
53
- const { request, state } = store
54
- // noinspection UnnecessaryLocalVariableJS
55
- const reply = await this.#cascade.run(request.input, state) || {}
56
-
57
- // this.#contracts.reply.fit(reply)
58
-
59
- store.reply = reply
60
- }
61
-
62
- async commit () {}
63
-
64
- async query (query) {
65
- return this.scope[this.#scope](query)
66
- }
67
- }
68
-
69
- exports.Operation = Operation
@@ -1,41 +0,0 @@
1
- 'use strict'
2
-
3
- const { parse } = require('@rsql/parser')
4
- const { QuerySyntaxException } = require('../exceptions')
5
-
6
- const criteria = (criteria, properties) => {
7
- let ast
8
-
9
- try {
10
- ast = parse(criteria)
11
- } catch (e) {
12
- throw new QuerySyntaxException(e.message)
13
- }
14
-
15
- if (properties !== undefined) coerce(ast, properties)
16
-
17
- return ast
18
- }
19
-
20
- const coerce = (node, properties) => {
21
- if (node.type === 'COMPARISON' && node.left?.type === 'SELECTOR' && node.right?.type === 'VALUE') {
22
- const property = properties[node.left.selector]
23
-
24
- if (property === undefined) {
25
- throw new QuerySyntaxException(`Criteria selector '${node.left.selector}' is not defined`)
26
- }
27
-
28
- if (COERCE[property.type] !== undefined) { node.right.value = COERCE[property.type](node.right.value) }
29
- } else {
30
- if (node.left !== undefined) coerce(node.left, properties)
31
- if (node.right !== undefined) coerce(node.right, properties)
32
- }
33
- }
34
-
35
- const COERCE = {
36
- number: Number,
37
- integer: parseInt,
38
- boolean: Boolean
39
- }
40
-
41
- exports.criteria = criteria
@@ -1,40 +0,0 @@
1
- 'use strict'
2
-
3
- const { QuerySyntaxException } = require('../exceptions')
4
-
5
- const options = (options, properties, system) => {
6
- if (options.sort !== undefined) options.sort = sort(options.sort, properties)
7
-
8
- if (options.projection !== undefined) projection(options.projection, properties)
9
-
10
- return options
11
- }
12
-
13
- const sort = (sort, properties) => {
14
- const result = []
15
-
16
- for (const sorting of sort) {
17
- const [property, direction] = sorting.split(':')
18
-
19
- if (properties[property] === undefined) {
20
- throw new QuerySyntaxException(`Sort property '${property}' is not defined`)
21
- }
22
-
23
- result.push([property, direction || 'asc'])
24
- }
25
-
26
- return result
27
- }
28
-
29
- const projection = (projection, properties) => {
30
- for (const property of projection) {
31
- if (properties[property] === undefined) {
32
- throw new QuerySyntaxException(`Projection property '${property}' is not defined`)
33
- }
34
- }
35
-
36
- if (projection.includes('_version') === false)
37
- projection.push('_version')
38
- }
39
-
40
- exports.options = options
package/src/query.js DELETED
@@ -1,41 +0,0 @@
1
- 'use strict'
2
-
3
- const { empty } = require('@toa.io/generic')
4
- const parse = { ...require('./query/criteria'), ...require('./query/options') }
5
-
6
- class Query {
7
- #properties
8
- #system
9
-
10
- constructor (properties) {
11
- this.#properties = properties
12
- this.#system = Object.keys(properties).filter((key) => properties[key].system === true)
13
- }
14
-
15
- /**
16
- * @param {toa.core.request.Query} query
17
- * @returns {toa.core.storages.Query}
18
- */
19
- parse (query) {
20
- /** @type {toa.core.storages.Query} */
21
- const result = {}
22
- const { id, version, criteria, ...rest } = query
23
-
24
- const options = this.#options(rest)
25
-
26
- if (id !== undefined) result.id = id
27
- if (version !== undefined) result.version = version
28
- if (criteria !== undefined) result.criteria = parse.criteria(criteria, this.#properties)
29
- if (options !== undefined) result.options = options
30
-
31
- return result
32
- }
33
-
34
- #options (options) {
35
- if (empty(options)) return
36
-
37
- return parse.options(options, this.#properties, this.#system)
38
- }
39
- }
40
-
41
- exports.Query = Query
package/src/receiver.js DELETED
@@ -1,65 +0,0 @@
1
- 'use strict'
2
-
3
- const { add } = require('@toa.io/generic')
4
- const { Connector } = require('./connector')
5
-
6
- /**
7
- * @implements {toa.core.Receiver}
8
- */
9
- class Receiver extends Connector {
10
- /** @type {boolean} */
11
- #conditioned
12
-
13
- /** @type {boolean} */
14
- #adaptive
15
-
16
- /** @type {string} */
17
- #endpoint
18
-
19
- /** @type {toa.core.Component} */
20
- #local
21
-
22
- /** @type {toa.core.bridges.Receiver} */
23
- #bridge
24
-
25
- /**
26
- *
27
- * @param {toa.norm.component.Receiver} definition
28
- * @param {toa.core.Component} local
29
- * @param {toa.core.bridges.Receiver} bridge
30
- */
31
- constructor (definition, local, bridge) {
32
- super()
33
-
34
- const { conditioned, adaptive, operation } = definition
35
-
36
- this.#conditioned = conditioned
37
- this.#adaptive = adaptive
38
- this.#endpoint = operation
39
-
40
- this.#local = local
41
- this.#bridge = bridge
42
-
43
- this.depends(local)
44
- if (bridge !== undefined) this.depends(bridge)
45
- }
46
-
47
- /** @hot */
48
- async receive (message) {
49
- const { payload, ...extensions } = message
50
-
51
- if (this.#conditioned && await this.#bridge.condition(payload) === false) return
52
-
53
- const request = await this.#request(payload)
54
-
55
- add(request, extensions)
56
-
57
- await this.#local.invoke(this.#endpoint, request)
58
- }
59
-
60
- async #request (payload) {
61
- return this.#adaptive ? await this.#bridge.request(payload) : { input: payload }
62
- }
63
- }
64
-
65
- exports.Receiver = Receiver
package/src/reflection.js DELETED
@@ -1,28 +0,0 @@
1
- 'use strict'
2
-
3
- const { Connector } = require('./connector')
4
-
5
- /**
6
- * @implements {toa.core.Reflection}
7
- */
8
- class Reflection extends Connector {
9
- /** @type {toa.core.reflection.Source} */
10
- #source
11
-
12
- value
13
-
14
- /**
15
- * @param {toa.core.reflection.Source} source
16
- */
17
- constructor (source) {
18
- super()
19
-
20
- this.#source = source
21
- }
22
-
23
- async open () {
24
- this.value = await this.#source()
25
- }
26
- }
27
-
28
- exports.Reflection = Reflection
package/src/remote.js DELETED
@@ -1,17 +0,0 @@
1
- 'use strict'
2
-
3
- const { console } = require('@toa.io/console')
4
-
5
- const { Component } = require('./component')
6
-
7
- class Remote extends Component {
8
- async open () {
9
- console.info(`Remote '${this.locator.id}' connected`)
10
- }
11
-
12
- async dispose () {
13
- console.info(`Remote '${this.locator.id}' disconnected`)
14
- }
15
- }
16
-
17
- exports.Remote = Remote
package/src/state.js DELETED
@@ -1,98 +0,0 @@
1
- 'use strict'
2
-
3
- const { empty } = require('@toa.io/generic')
4
-
5
- const {
6
- StatePreconditionException,
7
- StateNotFoundException,
8
- StateInitializationException
9
- } = require('./exceptions')
10
-
11
- /**
12
- * @implements {toa.core.State}
13
- */
14
- class State {
15
- /** @type {toa.core.Storage} */
16
- #storage
17
-
18
- /** @type {toa.core.entity.Factory} */
19
- #entity
20
- #emission
21
- #dependent
22
-
23
- constructor (storage, entity, emission, dependent) {
24
- this.#storage = storage
25
- this.#entity = entity
26
- this.#emission = emission
27
- this.#dependent = dependent === true
28
- }
29
-
30
- init (id) {
31
- return this.#entity.init(id)
32
- }
33
-
34
- async object (query) {
35
- const record = await this.#storage.get(query)
36
-
37
- if (record === null) {
38
- if (this.#dependent && query.id !== undefined && query.version === undefined) return this.init(query.id)
39
- else if (query.version !== undefined) throw new StatePreconditionException()
40
- }
41
-
42
- if (record === null) return null
43
- else return this.#entity.object(record)
44
- }
45
-
46
- async objects (query) {
47
- const recordset = await this.#storage.find(query)
48
-
49
- return this.#entity.objects(recordset)
50
- }
51
-
52
- changeset (query) {
53
- return this.#entity.changeset(query)
54
- }
55
-
56
- none () {
57
- return null
58
- }
59
-
60
- async commit (state) {
61
- const event = state.event()
62
-
63
- let ok = true
64
-
65
- if (!empty(event.changeset)) {
66
- const object = state.get()
67
-
68
- ok = await this.#storage.store(object)
69
-
70
- // #20
71
- await this.#emission.emit(event)
72
- }
73
-
74
- return ok
75
- }
76
-
77
- async apply (state) {
78
- const { changeset, insert } = state.export()
79
-
80
- let upsert
81
-
82
- if (this.#dependent && state.query.id !== undefined && state.query.version === undefined) {
83
- upsert = insert
84
- }
85
-
86
- const result = await this.#storage.upsert(state.query, changeset, upsert)
87
-
88
- if (result === null) {
89
- if (state.query.version !== undefined) throw new StatePreconditionException()
90
- else throw new StateNotFoundException()
91
- }
92
-
93
- // same as above
94
- await this.#emission.emit({ changeset, state: result })
95
- }
96
- }
97
-
98
- exports.State = State
package/src/transition.js DELETED
@@ -1,60 +0,0 @@
1
- 'use strict'
2
-
3
- const { retry } = require('@toa.io/generic')
4
-
5
- const { Operation } = require('./operation')
6
- const { StateConcurrencyException, StateNotFoundException } = require('./exceptions')
7
-
8
- class Transition extends Operation {
9
- #concurrency
10
-
11
- constructor (cascade, scope, contract, query, definition) {
12
- super(cascade, scope, contract, query, definition)
13
-
14
- this.#concurrency = definition.concurrency
15
- }
16
-
17
- async process (store) {
18
- return retry((retry) => this.#retry(store, retry), RETRY)
19
- }
20
-
21
- async acquire (store) {
22
- const { request } = store
23
-
24
- store.scope = request.query ? await this.query(request.query) : this.scope.init()
25
-
26
- if (store.scope === null) throw new StateNotFoundException()
27
-
28
- store.state = store.scope.get()
29
- }
30
-
31
- async commit (store) {
32
- const { scope, state, reply, retry } = store
33
-
34
- if (reply.error !== undefined) return
35
-
36
- scope.set(state)
37
-
38
- const ok = await this.scope.commit(scope)
39
-
40
- if (ok !== true) {
41
- if (this.#concurrency === 'retry') retry()
42
- else throw new StateConcurrencyException()
43
- }
44
- }
45
-
46
- async #retry (store, retry) {
47
- store.retry = retry
48
-
49
- return super.process(store)
50
- }
51
- }
52
-
53
- const RETRY = {
54
- base: 10,
55
- max: 5000,
56
- dispersion: 1,
57
- retries: Infinity
58
- }
59
-
60
- exports.Transition = Transition