@toa.io/core 1.0.0-alpha.284 → 1.0.0-alpha.286

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 (290) hide show
  1. package/package.json +19 -7
  2. package/source/assignment.ts +27 -0
  3. package/{src/call.js → source/call.ts} +16 -21
  4. package/{src/cascade.js → source/cascade.ts} +6 -8
  5. package/{src/component.js → source/component.ts} +27 -25
  6. package/{src/composition.js → source/composition.ts} +9 -3
  7. package/{src/connector.js → source/connector.ts} +36 -55
  8. package/source/context.ts +67 -0
  9. package/source/contract/contract.ts +23 -0
  10. package/{src/contract/reply.js → source/contract/reply.ts} +26 -19
  11. package/source/contract/request.ts +85 -0
  12. package/source/contract/schemas.ts +39 -0
  13. package/{src/discovery.js → source/discovery.ts} +15 -8
  14. package/source/effect.ts +14 -0
  15. package/{src/emission.js → source/emission.ts} +5 -3
  16. package/source/entities/changeset.ts +37 -0
  17. package/source/entities/entity.ts +137 -0
  18. package/source/entities/factory.ts +52 -0
  19. package/source/entities/index.ts +4 -0
  20. package/{src/entities/newid.js → source/entities/newid.ts} +1 -1
  21. package/{src/entities/set.js → source/entities/set.ts} +8 -5
  22. package/source/event.ts +57 -0
  23. package/{src/exceptions.js → source/exceptions.ts} +52 -33
  24. package/source/exposition.ts +33 -0
  25. package/source/guard.ts +16 -0
  26. package/{src/index.js → source/index.ts} +8 -0
  27. package/{src/locator.js → source/locator.ts} +17 -30
  28. package/source/observation.ts +16 -0
  29. package/source/operation.ts +138 -0
  30. package/{src/outbox/outbox.js → source/outbox/outbox.ts} +87 -53
  31. package/source/query/criteria.ts +90 -0
  32. package/source/query/options.ts +35 -0
  33. package/{src/query.js → source/query.ts} +14 -17
  34. package/source/receiver.ts +120 -0
  35. package/source/reflection.ts +20 -0
  36. package/source/remote.ts +20 -0
  37. package/source/state.ts +179 -0
  38. package/source/transition.ts +79 -0
  39. package/{src/transmission.js → source/transmission.ts} +8 -8
  40. package/source/types/atomicity.ts +63 -0
  41. package/source/types/bindings.ts +59 -0
  42. package/source/types/bridges.ts +54 -0
  43. package/source/types/extensions.ts +89 -0
  44. package/{types → source/types}/index.ts +9 -16
  45. package/{types/message.d.ts → source/types/message.ts} +2 -1
  46. package/source/types/operations.ts +31 -0
  47. package/source/types/outbox.ts +35 -0
  48. package/source/types/receiver.ts +10 -0
  49. package/{types/request.d.ts → source/types/request.ts} +8 -9
  50. package/source/types/state.ts +9 -0
  51. package/source/types/storages.ts +129 -0
  52. package/source/unmanaged.ts +8 -0
  53. package/test/call.fixtures.js +3 -1
  54. package/test/call.test.js +28 -7
  55. package/test/component.test.js +10 -5
  56. package/test/connector.fixtures.js +7 -7
  57. package/test/connector.test.js +15 -2
  58. package/test/context.fixtures.js +1 -1
  59. package/test/context.test.js +4 -4
  60. package/test/contract/conditions.test.js +6 -2
  61. package/test/contract/contract.fixtures.js +3 -4
  62. package/test/contract/request.test.js +68 -34
  63. package/test/discovery.test.js +10 -3
  64. package/test/emission.test.js +16 -8
  65. package/test/entities/entity.fixtures.js +5 -6
  66. package/test/entities/entity.test.js +54 -20
  67. package/test/entities/factory.fixtures.js +11 -10
  68. package/test/entities/factory.test.js +47 -10
  69. package/test/entities/set.test.js +1 -1
  70. package/test/event.test.js +29 -11
  71. package/test/locator.test.js +10 -4
  72. package/test/outbox.test.js +49 -15
  73. package/test/query.test.js +69 -7
  74. package/test/receiver.fixtures.js +2 -2
  75. package/test/receiver.test.js +53 -27
  76. package/test/reflection.test.js +3 -3
  77. package/test/state.fixtures.js +10 -3
  78. package/test/state.test.js +77 -14
  79. package/test/transmission.test.js +25 -12
  80. package/transpiled/assignment.d.ts +6 -0
  81. package/transpiled/assignment.js +20 -0
  82. package/transpiled/assignment.js.map +1 -0
  83. package/transpiled/call.d.ts +10 -0
  84. package/transpiled/call.js +52 -0
  85. package/transpiled/call.js.map +1 -0
  86. package/transpiled/cascade.d.ts +7 -0
  87. package/transpiled/cascade.js +28 -0
  88. package/transpiled/cascade.js.map +1 -0
  89. package/transpiled/component.d.ts +15 -0
  90. package/transpiled/component.js +61 -0
  91. package/transpiled/component.js.map +1 -0
  92. package/transpiled/composition.d.ts +6 -0
  93. package/transpiled/composition.js +23 -0
  94. package/transpiled/composition.js.map +1 -0
  95. package/transpiled/connector.d.ts +47 -0
  96. package/transpiled/connector.js +143 -0
  97. package/transpiled/connector.js.map +1 -0
  98. package/transpiled/context.d.ts +18 -0
  99. package/transpiled/context.js +41 -0
  100. package/transpiled/context.js.map +1 -0
  101. package/transpiled/contract/contract.d.ts +10 -0
  102. package/transpiled/contract/contract.js +14 -0
  103. package/transpiled/contract/contract.js.map +1 -0
  104. package/transpiled/contract/index.d.ts +2 -0
  105. package/transpiled/contract/index.js +3 -0
  106. package/transpiled/contract/index.js.map +1 -0
  107. package/transpiled/contract/reply.d.ts +7 -0
  108. package/transpiled/contract/reply.js +48 -0
  109. package/transpiled/contract/reply.js.map +1 -0
  110. package/transpiled/contract/request.d.ts +24 -0
  111. package/transpiled/contract/request.js +59 -0
  112. package/transpiled/contract/request.js.map +1 -0
  113. package/transpiled/contract/schemas.d.ts +4 -0
  114. package/transpiled/contract/schemas.js +36 -0
  115. package/transpiled/contract/schemas.js.map +1 -0
  116. package/transpiled/discovery.d.ts +12 -0
  117. package/transpiled/discovery.js +34 -0
  118. package/transpiled/discovery.js.map +1 -0
  119. package/transpiled/effect.d.ts +5 -0
  120. package/transpiled/effect.js +11 -0
  121. package/transpiled/effect.js.map +1 -0
  122. package/transpiled/emission.d.ts +8 -0
  123. package/transpiled/emission.js +14 -0
  124. package/transpiled/emission.js.map +1 -0
  125. package/transpiled/entities/changeset.d.ts +10 -0
  126. package/transpiled/entities/changeset.js +27 -0
  127. package/transpiled/entities/changeset.js.map +1 -0
  128. package/transpiled/entities/entity.d.ts +19 -0
  129. package/transpiled/entities/entity.js +109 -0
  130. package/transpiled/entities/entity.js.map +1 -0
  131. package/transpiled/entities/factory.d.ts +22 -0
  132. package/transpiled/entities/factory.js +34 -0
  133. package/transpiled/entities/factory.js.map +1 -0
  134. package/transpiled/entities/index.d.ts +4 -0
  135. package/transpiled/entities/index.js +5 -0
  136. package/transpiled/entities/index.js.map +1 -0
  137. package/transpiled/entities/newid.d.ts +1 -0
  138. package/transpiled/entities/newid.js +7 -0
  139. package/transpiled/entities/newid.js.map +1 -0
  140. package/transpiled/entities/set.d.ts +10 -0
  141. package/transpiled/entities/set.js +19 -0
  142. package/transpiled/entities/set.js.map +1 -0
  143. package/transpiled/event.d.ts +14 -0
  144. package/transpiled/event.js +38 -0
  145. package/transpiled/event.js.map +1 -0
  146. package/transpiled/exceptions.d.ts +61 -0
  147. package/transpiled/exceptions.js +93 -0
  148. package/transpiled/exceptions.js.map +1 -0
  149. package/transpiled/exposition.d.ts +18 -0
  150. package/transpiled/exposition.js +18 -0
  151. package/transpiled/exposition.js.map +1 -0
  152. package/transpiled/guard.d.ts +7 -0
  153. package/transpiled/guard.js +12 -0
  154. package/transpiled/guard.js.map +1 -0
  155. package/transpiled/index.d.ts +35 -0
  156. package/transpiled/index.js +29 -0
  157. package/transpiled/index.js.map +1 -0
  158. package/transpiled/locator.d.ts +12 -0
  159. package/transpiled/locator.js +32 -0
  160. package/transpiled/locator.js.map +1 -0
  161. package/transpiled/observation.d.ts +5 -0
  162. package/transpiled/observation.js +12 -0
  163. package/transpiled/observation.js.map +1 -0
  164. package/transpiled/operation.d.ts +49 -0
  165. package/transpiled/operation.js +77 -0
  166. package/transpiled/operation.js.map +1 -0
  167. package/transpiled/outbox/index.d.ts +1 -0
  168. package/transpiled/outbox/index.js +2 -0
  169. package/transpiled/outbox/index.js.map +1 -0
  170. package/transpiled/outbox/outbox.d.ts +46 -0
  171. package/transpiled/outbox/outbox.js +267 -0
  172. package/transpiled/outbox/outbox.js.map +1 -0
  173. package/transpiled/query/criteria.d.ts +6 -0
  174. package/transpiled/query/criteria.js +74 -0
  175. package/transpiled/query/criteria.js.map +1 -0
  176. package/transpiled/query/options.d.ts +3 -0
  177. package/transpiled/query/options.js +27 -0
  178. package/transpiled/query/options.js.map +1 -0
  179. package/transpiled/query.d.ts +9 -0
  180. package/transpiled/query.js +57 -0
  181. package/transpiled/query.js.map +1 -0
  182. package/transpiled/receiver.d.ts +20 -0
  183. package/transpiled/receiver.js +92 -0
  184. package/transpiled/receiver.js.map +1 -0
  185. package/transpiled/reflection.d.ts +9 -0
  186. package/transpiled/reflection.js +13 -0
  187. package/transpiled/reflection.js.map +1 -0
  188. package/transpiled/remote.d.ts +10 -0
  189. package/transpiled/remote.js +12 -0
  190. package/transpiled/remote.js.map +1 -0
  191. package/transpiled/state.d.ts +33 -0
  192. package/transpiled/state.js +126 -0
  193. package/transpiled/state.js.map +1 -0
  194. package/transpiled/transition.d.ts +14 -0
  195. package/transpiled/transition.js +51 -0
  196. package/transpiled/transition.js.map +1 -0
  197. package/transpiled/transmission.d.ts +8 -0
  198. package/transpiled/transmission.js +30 -0
  199. package/transpiled/transmission.js.map +1 -0
  200. package/transpiled/types/atomicity.d.ts +56 -0
  201. package/transpiled/types/atomicity.js +2 -0
  202. package/transpiled/types/atomicity.js.map +1 -0
  203. package/transpiled/types/bindings.d.ts +42 -0
  204. package/transpiled/types/bindings.js +2 -0
  205. package/transpiled/types/bindings.js.map +1 -0
  206. package/transpiled/types/bridges.d.ts +38 -0
  207. package/transpiled/types/bridges.js +2 -0
  208. package/transpiled/types/bridges.js.map +1 -0
  209. package/transpiled/types/extensions.d.ts +62 -0
  210. package/transpiled/types/extensions.js +2 -0
  211. package/transpiled/types/extensions.js.map +1 -0
  212. package/transpiled/types/index.d.ts +13 -0
  213. package/transpiled/types/index.js +8 -0
  214. package/transpiled/types/index.js.map +1 -0
  215. package/transpiled/types/message.d.ts +5 -0
  216. package/transpiled/types/message.js +2 -0
  217. package/transpiled/types/message.js.map +1 -0
  218. package/transpiled/types/operations.d.ts +15 -0
  219. package/transpiled/types/operations.js +2 -0
  220. package/transpiled/types/operations.js.map +1 -0
  221. package/transpiled/types/outbox.d.ts +28 -0
  222. package/transpiled/types/outbox.js +2 -0
  223. package/transpiled/types/outbox.js.map +1 -0
  224. package/transpiled/types/receiver.d.ts +9 -0
  225. package/transpiled/types/receiver.js +2 -0
  226. package/transpiled/types/receiver.js.map +1 -0
  227. package/transpiled/types/request.d.ts +55 -0
  228. package/transpiled/types/request.js +2 -0
  229. package/transpiled/types/request.js.map +1 -0
  230. package/transpiled/types/state.d.ts +9 -0
  231. package/transpiled/types/state.js +2 -0
  232. package/transpiled/types/state.js.map +1 -0
  233. package/transpiled/types/storages.d.ts +106 -0
  234. package/transpiled/types/storages.js +2 -0
  235. package/transpiled/types/storages.js.map +1 -0
  236. package/transpiled/unmanaged.d.ts +5 -0
  237. package/transpiled/unmanaged.js +7 -0
  238. package/transpiled/unmanaged.js.map +1 -0
  239. package/tsconfig.json +10 -0
  240. package/tsconfig.tsbuildinfo +1 -0
  241. package/CHANGELOG.md +0 -192
  242. package/src/assignment.js +0 -28
  243. package/src/context.js +0 -57
  244. package/src/contract/contract.js +0 -18
  245. package/src/contract/request.js +0 -77
  246. package/src/contract/schemas/error.yaml +0 -9
  247. package/src/contract/schemas/index.js +0 -11
  248. package/src/contract/schemas/query.yaml +0 -43
  249. package/src/contract/schemas/source.yaml +0 -23
  250. package/src/effect.js +0 -15
  251. package/src/entities/changeset.js +0 -36
  252. package/src/entities/entity.js +0 -119
  253. package/src/entities/factory.js +0 -40
  254. package/src/entities/index.js +0 -1
  255. package/src/event.js +0 -54
  256. package/src/exposition.js +0 -24
  257. package/src/guard.js +0 -13
  258. package/src/observation.js +0 -8
  259. package/src/operation.js +0 -95
  260. package/src/query/criteria.js +0 -44
  261. package/src/query/options.js +0 -37
  262. package/src/receiver.js +0 -123
  263. package/src/reflection.js +0 -24
  264. package/src/remote.js +0 -14
  265. package/src/state.js +0 -138
  266. package/src/transition.js +0 -61
  267. package/src/unmanaged.js +0 -7
  268. package/types/atomicity.d.ts +0 -79
  269. package/types/bindings.d.ts +0 -42
  270. package/types/bridges.ts +0 -33
  271. package/types/call.d.ts +0 -13
  272. package/types/component.d.ts +0 -12
  273. package/types/connector.d.ts +0 -18
  274. package/types/context.d.ts +0 -24
  275. package/types/entity.d.ts +0 -46
  276. package/types/event.d.ts +0 -11
  277. package/types/exception.d.ts +0 -4
  278. package/types/extensions.d.ts +0 -73
  279. package/types/guard.d.ts +0 -5
  280. package/types/locator.d.ts +0 -13
  281. package/types/operations.d.ts +0 -8
  282. package/types/outbox.d.ts +0 -53
  283. package/types/query.d.ts +0 -17
  284. package/types/receiver.d.ts +0 -12
  285. package/types/reflection.d.ts +0 -14
  286. package/types/remote.d.ts +0 -19
  287. package/types/state.d.ts +0 -38
  288. package/types/storages.d.ts +0 -96
  289. /package/{src/contract/index.js → source/contract/index.ts} +0 -0
  290. /package/{src/outbox/index.js → source/outbox/index.ts} +0 -0
@@ -1,73 +0,0 @@
1
- import * as _core from './index.js'
2
- import * as _component from './component.js'
3
- import * as _context from './context.js'
4
- import * as _storages from './storages.js'
5
- import * as _bindings from './bindings.js'
6
- import { Manifest } from '@toa.io/norm'
7
-
8
- /**
9
- * What the process hosting an extension provides to it: the counterpart of a component's
10
- * `Context`. What is returned is a connector the extension depends on.
11
- */
12
- export interface Host {
13
- /** a component of the context, by locator */
14
- remote (locator: _core.Locator, source?: _core.Source): Promise<_core.Remote>
15
-
16
- /** a channel of the messaging binding */
17
- broadcast<T = unknown> (channel: string, group?: string): Promise<_bindings.Broadcast<T>>
18
-
19
- /** components to run inside the extension's own process */
20
- composition (paths: string[]): Promise<_core.Connector>
21
-
22
- /** a consumer of an event of the context, `namespace.component.event` */
23
- receive (label: string, receiver: _core.Receiver): Promise<_core.Connector>
24
-
25
- /** what the replicas of one group decide together */
26
- atom (group: string): _core.atomicity.Atom
27
- }
28
-
29
- export interface Factory {
30
- tenant? (locator: _core.Locator, manifest: object, component: Manifest):
31
- _core.Connector | Promise<_core.Connector>
32
-
33
- aspect? (locator: _core.Locator, manifest: object | null): Aspect | Aspect[]
34
-
35
- service? (name?: string): _core.Connector | null | Promise<_core.Connector | null>
36
-
37
- component? (component: _component.Component): _component.Component
38
-
39
- context? (context: _context.Context): _context.Context
40
-
41
- manage? (composition: _core.Connector): _core.Connector
42
-
43
- storage? (storage: _storages.Storage): _storages.Storage
44
-
45
- emitter? (emitter: _bindings.Emitter, label: string, locator: _core.Locator): _bindings.Emitter
46
-
47
- receiver? (receiver: _core.Receiver, locator: _core.Locator): _core.Receiver
48
- }
49
-
50
- /**
51
- * What an extension puts on a component's context, as the extension states it. How it is
52
- * presented there is the bridge's — a bash bridge has no context to put anything on — and
53
- * what is declared here is the key and what it holds.
54
- */
55
- export interface Contribution {
56
- /** the key on the context */
57
- name: string
58
-
59
- /** what the key holds, as TypeScript */
60
- type?: string
61
-
62
- /** what `type` names, by the module it comes from */
63
- imports?: Record<string, string[]>
64
-
65
- /** a JSON Schema to read the type from instead, where a component states one */
66
- schema?: object
67
- }
68
-
69
- export interface Aspect extends _core.Connector {
70
- name: string
71
-
72
- invoke (...args: any[]): any
73
- }
package/types/guard.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Runs on every change to an entity's state, before the contract is applied. `false` refuses
3
- * the change as `EntityGuard`.
4
- */
5
- export type Guard<T, C = unknown> = (state: T, origin: T | null, context: C) => boolean
@@ -1,13 +0,0 @@
1
- export class Locator{
2
- public readonly name: string
3
- public readonly namespace: string
4
-
5
- public readonly id: string
6
- public readonly label: string
7
- public readonly uppercase: string
8
- public readonly lowercase: string
9
-
10
- constructor (name: string, namespace?: string)
11
-
12
- hostname (type?: string): string
13
- }
@@ -1,8 +0,0 @@
1
- import { Request } from './request.js'
2
-
3
- export type type = 'transition' | 'observation' | 'assignment' | 'computation' | 'effect'
4
- export type scope = 'object' | 'objects' | 'changeset'
5
-
6
- export class Operation {
7
- invoke<T = any> (request: Request): Promise<T>
8
- }
package/types/outbox.d.ts DELETED
@@ -1,53 +0,0 @@
1
- import * as _state from './state.js'
2
- import * as _atomicity from './atomicity.js'
3
-
4
- declare namespace toa.core {
5
-
6
- namespace outbox {
7
-
8
- /**
9
- * The intent to publish, committed with the state change it belongs to. Everything about
10
- * it is core's: the storage writes it and, where the images are the write's own, fills
11
- * `event.origin` and `event.state` in.
12
- */
13
- interface Row {
14
- id: string
15
-
16
- /** which replica pumps this row; carries no other meaning, and no ordering */
17
- lane: number
18
-
19
- published: boolean
20
-
21
- /** not before this */
22
- pending: number
23
-
24
- event: _state.Event
25
- }
26
-
27
- /** What a storage offers when it can commit a row atomically with the entity. */
28
- interface Storage {
29
- insert (row: Row, session?: unknown): Promise<void>
30
-
31
- insertMany (rows: Row[], session?: unknown): Promise<void>
32
-
33
- /**
34
- * One page of what is due, still unpublished, and in one of the given lanes, in the
35
- * order the rows were written. `after` continues from the last id of the page before.
36
- */
37
- pending (lanes: number[], now: number, limit: number, after?: string): Promise<Row[]>
38
-
39
- settle (ids: string[]): Promise<void>
40
- }
41
-
42
- }
43
-
44
- }
45
-
46
- export type Row = toa.core.outbox.Row
47
- export type Storage = toa.core.outbox.Storage
48
-
49
- /**
50
- * A lane is a slot of `atomicity`: which replica pumps a row, and nothing else. The outbox is
51
- * the first thing to claim slots this way, not the last.
52
- */
53
- export type Atom = _atomicity.Atom
package/types/query.d.ts DELETED
@@ -1,17 +0,0 @@
1
- declare namespace toa.core {
2
-
3
- type Query = {
4
- id?: string
5
- version?: number
6
- criteria?: Object
7
- search?: string
8
- sample?: number
9
- omit?: number
10
- limit?: number
11
- sort?: string[]
12
- projection?: string[]
13
- }
14
-
15
- }
16
-
17
- export type Query = toa.core.Query
@@ -1,12 +0,0 @@
1
- import * as _message from './message.js'
2
- import * as _connector from './connector.js'
3
-
4
- declare namespace toa.core {
5
-
6
- interface Receiver extends _connector.Connector {
7
- receive(message: _message.Message): Promise<void>
8
- }
9
-
10
- }
11
-
12
- export type Receiver = toa.core.Receiver
@@ -1,14 +0,0 @@
1
- import * as _core from './connector.js'
2
-
3
- declare namespace toa.core {
4
-
5
- namespace reflection {
6
- type Source = () => Promise<any>
7
- }
8
-
9
- interface Reflection<T> extends _core.Connector {
10
- value: T
11
- }
12
- }
13
-
14
- export type Source = toa.core.reflection.Source
package/types/remote.d.ts DELETED
@@ -1,19 +0,0 @@
1
- import { Component } from './component.js'
2
-
3
- export class Remote extends Component {
4
- explain (endpoint: string): Promise<Explanation>
5
- }
6
-
7
- interface Explanation {
8
- description?: string
9
- input: Schema | null
10
- output: Schema | null
11
- errors?: string[]
12
- }
13
-
14
- interface Schema {
15
- type: string
16
- properties: {
17
- [key: string]: Schema
18
- }
19
- }
package/types/state.d.ts DELETED
@@ -1,38 +0,0 @@
1
- import * as _entity from './entity.js'
2
- import * as _storages from './storages.js'
3
-
4
- declare namespace toa.core {
5
-
6
- namespace transition {
7
-
8
- type Event<State = Object, Trailers = Object> = {
9
- /** the pre-image; null when the entity did not exist before */
10
- origin: State | null
11
- state: State
12
- /** out-of-band values an algorithm wrote into `state._trailers`; must be serializable */
13
- trailers?: Trailers
14
- input?: Object
15
- }
16
-
17
- }
18
-
19
- interface State {
20
- init(id: string): _entity.Entity
21
-
22
- object(query: _storages.Query, mutable?: boolean): Promise<_entity.Entity>
23
-
24
- objects(query: _storages.Query, mutable?: boolean): Promise<_entity.Entity[]>
25
-
26
- changeset(query: _storages.Query): _entity.Changeset
27
-
28
- none(): null
29
-
30
- commit(entity: _entity.Entity, input?: Object): Promise<boolean>
31
-
32
- apply(changeset: _entity.Changeset, input?: Object): Promise<_storages.Record>
33
- }
34
-
35
- }
36
-
37
- export type State = toa.core.State
38
- export type Event<State = Object, Trailers = Object> = toa.core.transition.Event<State, Trailers>
@@ -1,96 +0,0 @@
1
- // noinspection ES6UnusedImports
2
-
3
- import { Locator } from './locator.js'
4
- import { Connector } from './connector.js'
5
- import * as outbox from './outbox.js'
6
-
7
- declare namespace toa.core {
8
-
9
- namespace storages {
10
- namespace ast {
11
-
12
- interface Node {
13
- type: 'LOGIC' | 'COMPARISON' | 'SELECTOR' | 'VALUE'
14
- left?: Node
15
- right?: Node
16
- operator?: string
17
- selector?: string
18
- value?: string
19
- }
20
-
21
- }
22
-
23
- interface Record {
24
- id: string
25
- _version: number
26
-
27
- [key: string]: any
28
- }
29
-
30
- interface Query {
31
- id?: string
32
- version?: number
33
- criteria?: ast.Node
34
- search?: string
35
- sample?: number
36
- options?: Object
37
- }
38
-
39
- interface Migration {
40
- disconnect (): Promise<void>
41
-
42
- database (name: string): Promise<void>
43
-
44
- table (database: string, locator: Locator, schema: Object, reset?: boolean): Promise<string>
45
- }
46
-
47
- interface Options {
48
- /** whether this component publishes anything, and so needs an outbox */
49
- outbox?: boolean
50
- }
51
-
52
- interface Factory {
53
- storage (locator: Locator, properties?: object, options?: Options): Storage
54
-
55
- migration? (driver?: string): Migration
56
- }
57
- }
58
-
59
- interface Storage extends Connector {
60
- // object observation
61
- get? (query: storages.Query): Promise<storages.Record | null>
62
-
63
- // objects observation
64
- find? (query: storages.Query): Promise<storages.Record[]>
65
-
66
- // commit
67
- store? (record: storages.Record, row?: outbox.Row): Promise<boolean>
68
-
69
- // mass commit
70
- massStore? (records: storages.Record[], rows?: outbox.Row[]): Promise<boolean>
71
-
72
- // assignment
73
- upsert? (query: storages.Query, changeset: Object, row?: outbox.Row): Promise<storages.Record>
74
-
75
- // atomic get-or-create
76
- ensure? (query: storages.Query, properties: Object, record: storages.Record, row?: outbox.Row): Promise<storages.Record>
77
-
78
- /**
79
- * Present only where a row can be committed atomically with the entity. Its absence is
80
- * what makes the runtime fall back to publishing inline, so a storage that cannot do
81
- * this must not offer it: a row written outside the transaction would be a second write
82
- * with a crash window in front of it, which is the defect the outbox exists to close.
83
- *
84
- * The row schema is the connector's own — it also owns `pending` and `settle` — and
85
- * never crosses this boundary.
86
- */
87
- outbox?: outbox.Storage
88
- }
89
-
90
- }
91
-
92
- export type Storage = toa.core.Storage
93
- export type Record = toa.core.storages.Record
94
- export type Factory = toa.core.storages.Factory
95
- export type Query = toa.core.storages.Query
96
- export type Migration = toa.core.storages.Migration
File without changes