@toa.io/boot 1.0.0-alpha.33 → 1.0.0-alpha.331
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/CHANGELOG.md +396 -0
- package/package.json +11 -8
- package/src/atom.js +41 -0
- package/src/atomicity.js +11 -0
- package/src/bindings/broadcast.js +3 -6
- package/src/bindings/constants.js +1 -3
- package/src/bindings/consume.js +18 -6
- package/src/bindings/emit.js +3 -6
- package/src/bindings/factory.js +5 -9
- package/src/bindings/inbound.js +11 -0
- package/src/bindings/index.js +7 -13
- package/src/bindings/outbound.js +10 -0
- package/src/bindings/produce.js +62 -17
- package/src/bindings/receive.js +3 -6
- package/src/bridge.js +22 -16
- package/src/call.js +29 -9
- package/src/cascade.js +16 -10
- package/src/component.js +101 -32
- package/src/composition.js +115 -15
- package/src/context.js +7 -8
- package/src/contract.js +11 -12
- package/src/emission.js +21 -14
- package/src/env.js +19 -12
- package/src/events.js +27 -0
- package/src/extensions/aspects.js +4 -8
- package/src/extensions/component.js +4 -8
- package/src/extensions/context.js +4 -8
- package/src/extensions/destinations.js +27 -0
- package/src/extensions/emitter.js +7 -9
- package/src/extensions/index.js +10 -19
- package/src/extensions/instances.js +2 -4
- package/src/extensions/load.js +7 -7
- package/src/extensions/manage.js +15 -0
- package/src/extensions/receiver.js +5 -9
- package/src/extensions/resolve.js +62 -13
- package/src/extensions/storage.js +6 -9
- package/src/extensions/tenants.js +5 -9
- package/src/guards.js +20 -0
- package/src/host.js +29 -0
- package/src/inbox.js +12 -0
- package/src/index.js +29 -34
- package/src/manifest.js +78 -36
- package/src/manifest.test.js +89 -8
- package/src/map.js +108 -0
- package/src/operation.js +29 -14
- package/src/outbox.js +22 -0
- package/src/rc.js +5 -0
- package/src/receivers.js +53 -23
- package/src/regional.js +18 -0
- package/src/regional.test.js +28 -0
- package/src/remote.js +41 -22
- package/src/rendering.js +50 -0
- package/src/span.js +19 -0
- package/src/storage.js +50 -16
- package/src/storage.test.js +57 -0
- package/src/workload.js +283 -0
- package/src/workload.test.js +321 -0
- package/types/bindings.d.ts +6 -2
- package/types/index.d.ts +62 -10
- package/types/manifest.d.ts +5 -4
- package/src/discovery.js +0 -43
- package/src/exposition.js +0 -17
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
# [1.0.0-alpha.331](https://github.com/toa-io/toa/compare/v1.0.0-alpha.330...v1.0.0-alpha.331) (2026-10-16)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [1.0.0-alpha.330](https://github.com/toa-io/toa/compare/v1.0.0-alpha.329...v1.0.0-alpha.330) (2026-10-15)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [1.0.0-alpha.329](https://github.com/toa-io/toa/compare/v1.0.0-alpha.328...v1.0.0-alpha.329) (2026-10-11)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# [1.0.0-alpha.328](https://github.com/toa-io/toa/compare/v1.0.0-alpha.327...v1.0.0-alpha.328) (2026-10-10)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# [1.0.0-alpha.327](https://github.com/toa-io/toa/compare/v1.0.0-alpha.326...v1.0.0-alpha.327) (2026-10-10)
|
|
39
|
+
|
|
40
|
+
* feat(core)!: refuse a call to an operation declaring once made by a retried transition ([71db669](https://github.com/toa-io/toa/commit/71db6697d06f9854910ec6785733f4e896cbe756))
|
|
41
|
+
|
|
42
|
+
### BREAKING CHANGES
|
|
43
|
+
|
|
44
|
+
* a transition declared `concurrency: retry` that calls an
|
|
45
|
+
operation declaring `once` raises an Unrepeatable exception (604) on that
|
|
46
|
+
call. Declare it `concurrency: none`, make the call from a receiver of the
|
|
47
|
+
event the change publishes, or call both from an effect.
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# [1.0.0-alpha.326](https://github.com/toa-io/toa/compare/v1.0.0-alpha.325...v1.0.0-alpha.326) (2026-10-06)
|
|
51
|
+
|
|
52
|
+
### Bug Fixes
|
|
53
|
+
|
|
54
|
+
* **boot:** close a tenant before its component stops serving ([c327a12](https://github.com/toa-io/toa/commit/c327a1291032c3d2a66488d1d5b75770f0211a40))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# [1.0.0-alpha.325](https://github.com/toa-io/toa/compare/v1.0.0-alpha.324...v1.0.0-alpha.325) (2026-10-02)
|
|
58
|
+
|
|
59
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# [1.0.0-alpha.324](https://github.com/toa-io/toa/compare/v1.0.0-alpha.323...v1.0.0-alpha.324) (2026-10-02)
|
|
66
|
+
|
|
67
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# [1.0.0-alpha.323](https://github.com/toa-io/toa/compare/v1.0.0-alpha.322...v1.0.0-alpha.323) (2026-10-01)
|
|
74
|
+
|
|
75
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
# [1.0.0-alpha.322](https://github.com/toa-io/toa/compare/v1.0.0-alpha.321...v1.0.0-alpha.322) (2026-09-29)
|
|
82
|
+
|
|
83
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# [1.0.0-alpha.321](https://github.com/toa-io/toa/compare/v1.0.0-alpha.320...v1.0.0-alpha.321) (2026-09-28)
|
|
90
|
+
|
|
91
|
+
### Features
|
|
92
|
+
|
|
93
|
+
* **core:** give a destination that carries changes to other regions what the regional ones write ([a7d2fd1](https://github.com/toa-io/toa/commit/a7d2fd1eecd50645d14f7cb5c588069c3073ba72))
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# [1.0.0-alpha.320](https://github.com/toa-io/toa/compare/v1.0.0-alpha.319...v1.0.0-alpha.320) (2026-09-28)
|
|
97
|
+
|
|
98
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# [1.0.0-alpha.319](https://github.com/toa-io/toa/compare/v1.0.0-alpha.318...v1.0.0-alpha.319) (2026-09-27)
|
|
105
|
+
|
|
106
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
# [1.0.0-alpha.318](https://github.com/toa-io/toa/compare/v1.0.0-alpha.317...v1.0.0-alpha.318) (2026-09-23)
|
|
113
|
+
|
|
114
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# [1.0.0-alpha.317](https://github.com/toa-io/toa/compare/v1.0.0-alpha.316...v1.0.0-alpha.317) (2026-09-23)
|
|
121
|
+
|
|
122
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
# [1.0.0-alpha.316](https://github.com/toa-io/toa/compare/v1.0.0-alpha.315...v1.0.0-alpha.316) (2026-09-23)
|
|
129
|
+
|
|
130
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
# [1.0.0-alpha.315](https://github.com/toa-io/toa/compare/v1.0.0-alpha.314...v1.0.0-alpha.315) (2026-09-23)
|
|
137
|
+
|
|
138
|
+
* feat(map)!: leave out of a contract what the runtime gives every component ([b81837a](https://github.com/toa-io/toa/commit/b81837a3bc4771d7ee1c10fe613c9a1d7501bf1a))
|
|
139
|
+
|
|
140
|
+
### BREAKING CHANGES
|
|
141
|
+
|
|
142
|
+
* the deployed component map is `/etc/toa/.map.json.gz`.
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# [1.0.0-alpha.314](https://github.com/toa-io/toa/compare/v1.0.0-alpha.313...v1.0.0-alpha.314) (2026-09-19)
|
|
146
|
+
|
|
147
|
+
* feat(core)!: let an operation state how long its calls are remembered ([af177c2](https://github.com/toa-io/toa/commit/af177c2ab3d00d475840b5ef9e612f04e82b72bd))
|
|
148
|
+
|
|
149
|
+
### Features
|
|
150
|
+
|
|
151
|
+
* **core:** a destination renders the component's events ([2f93b28](https://github.com/toa-io/toa/commit/2f93b28bed61a0afe99cb8cfa646ed7815467497))
|
|
152
|
+
* **core:** a reference may name a declaration its package claims ([8040f60](https://github.com/toa-io/toa/commit/8040f60976549ab90497675bb54e664261f5b6bb))
|
|
153
|
+
|
|
154
|
+
### BREAKING CHANGES
|
|
155
|
+
|
|
156
|
+
* `inbox.retention` under 600 is refused. See
|
|
157
|
+
migrations/313.md.
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
# [1.0.0-alpha.313](https://github.com/toa-io/toa/compare/v1.0.0-alpha.312...v1.0.0-alpha.313) (2026-09-18)
|
|
161
|
+
|
|
162
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
# [1.0.0-alpha.312](https://github.com/toa-io/toa/compare/v1.0.0-alpha.311...v1.0.0-alpha.312) (2026-09-18)
|
|
169
|
+
|
|
170
|
+
### Features
|
|
171
|
+
|
|
172
|
+
* **boot:** offer a streamed endpoint to the bindings that carry a stream ([0099b4e](https://github.com/toa-io/toa/commit/0099b4e12bff4ce5dba2d0098f0b8c6a18fff2c5))
|
|
173
|
+
* **boot:** tell a producer which of its endpoints take a stream ([6383adc](https://github.com/toa-io/toa/commit/6383adcebf38d889db80d8cbd19fe38f3ba4eb2e))
|
|
174
|
+
* **core:** refuse a call that carries no stream where the operation takes one ([fb78e02](https://github.com/toa-io/toa/commit/fb78e02fa620b15f6aa7bac184dd8a6ede923150))
|
|
175
|
+
* **core:** require the property that carries a stream, and refuse a task that carries one ([fdc7e6b](https://github.com/toa-io/toa/commit/fdc7e6b345ee22b030a52f1fda0e91e6bf63a392))
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
# [1.0.0-alpha.311](https://github.com/toa-io/toa/compare/v1.0.0-alpha.310...v1.0.0-alpha.311) (2026-09-17)
|
|
179
|
+
|
|
180
|
+
### Features
|
|
181
|
+
|
|
182
|
+
* read the scope of a process once, as it boots ([0d65de5](https://github.com/toa-io/toa/commit/0d65de58ffc655ff872b8e66f95c5609ada3370a))
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
# [1.0.0-alpha.310](https://github.com/toa-io/toa/compare/v1.0.0-alpha.309...v1.0.0-alpha.310) (2026-09-16)
|
|
186
|
+
|
|
187
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
# [1.0.0-alpha.309](https://github.com/toa-io/toa/compare/v1.0.0-alpha.308...v1.0.0-alpha.309) (2026-09-16)
|
|
194
|
+
|
|
195
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
# [1.0.0-alpha.308](https://github.com/toa-io/toa/compare/v1.0.0-alpha.307...v1.0.0-alpha.308) (2026-09-15)
|
|
202
|
+
|
|
203
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
# [1.0.0-alpha.307](https://github.com/toa-io/toa/compare/v1.0.0-alpha.306...v1.0.0-alpha.307) (2026-09-15)
|
|
210
|
+
|
|
211
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
# [1.0.0-alpha.306](https://github.com/toa-io/toa/compare/v1.0.0-alpha.305...v1.0.0-alpha.306) (2026-09-14)
|
|
218
|
+
|
|
219
|
+
* refactor(core)!: name the quiesce hooks pause and unpause ([6e4e5f5](https://github.com/toa-io/toa/commit/6e4e5f55d43f03ea95ca8bbdaae57b949564dfa2))
|
|
220
|
+
* feat(boot)!: a process can be halted and come back ([7196fa5](https://github.com/toa-io/toa/commit/7196fa51a9c882e84c3767a4fdd329fd2df319f5))
|
|
221
|
+
|
|
222
|
+
### Bug Fixes
|
|
223
|
+
|
|
224
|
+
* **boot:** declare what a workload does with a quiesce ([0e1521d](https://github.com/toa-io/toa/commit/0e1521d7abae3a3860a29978d267927d814c1d3a))
|
|
225
|
+
* **boot:** keep a halted process alive until it comes back ([3d3cc23](https://github.com/toa-io/toa/commit/3d3cc23835f836f9f98b1d9a448090a2b0d473c8))
|
|
226
|
+
|
|
227
|
+
### Features
|
|
228
|
+
|
|
229
|
+
* **boot:** let a process go quiet and be let go again ([0fc3e66](https://github.com/toa-io/toa/commit/0fc3e66f217ab45e85f70271ab0768232b3fa088))
|
|
230
|
+
* **boot:** quiet a tree before taking it down ([7a339ca](https://github.com/toa-io/toa/commit/7a339caea4499509b55daf91061fc9836c0f6e68))
|
|
231
|
+
* **bridges.node:** let a component stop what it started and start it again ([d10d5d1](https://github.com/toa-io/toa/commit/d10d5d16fcd181e717d9d2cef4c7814ae8f2a93f))
|
|
232
|
+
|
|
233
|
+
### BREAKING CHANGES
|
|
234
|
+
|
|
235
|
+
* `Host.halt` is `Host.stop`.
|
|
236
|
+
* `Host` gains `gate` and `halt`, and `Factory.service` may answer a gate. An
|
|
237
|
+
extension that gates nothing keeps its connections through a halt.
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
# [1.0.0-alpha.305](https://github.com/toa-io/toa/compare/v1.0.0-alpha.304...v1.0.0-alpha.305) (2026-09-13)
|
|
241
|
+
|
|
242
|
+
### Features
|
|
243
|
+
|
|
244
|
+
* **core:** refuse a call that writes, made under a request that only reads ([92951d0](https://github.com/toa-io/toa/commit/92951d0f7b95bd5b838097dd6a42db5586968d0b))
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
# [1.0.0-alpha.304](https://github.com/toa-io/toa/compare/v1.0.0-alpha.303...v1.0.0-alpha.304) (2026-09-13)
|
|
248
|
+
|
|
249
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
# [1.0.0-alpha.303](https://github.com/toa-io/toa/compare/v1.0.0-alpha.302...v1.0.0-alpha.303) (2026-09-12)
|
|
256
|
+
|
|
257
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
# [1.0.0-alpha.302](https://github.com/toa-io/toa/compare/v1.0.0-alpha.301...v1.0.0-alpha.302) (2026-09-11)
|
|
264
|
+
|
|
265
|
+
### Features
|
|
266
|
+
|
|
267
|
+
* **boot:** a run command may wait until the component is served ([0f66bed](https://github.com/toa-io/toa/commit/0f66bedf7b54dc9c1397f7f32bbccbffde7288ca))
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# [1.0.0-alpha.301](https://github.com/toa-io/toa/compare/v1.0.0-alpha.300...v1.0.0-alpha.301) (2026-09-11)
|
|
271
|
+
|
|
272
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
# [1.0.0-alpha.300](https://github.com/toa-io/toa/compare/v1.0.0-alpha.299...v1.0.0-alpha.300) (2026-09-11)
|
|
279
|
+
|
|
280
|
+
* feat(boot)!: a process is a thing, and an extension may keep something in one ([528d6cd](https://github.com/toa-io/toa/commit/528d6cdd307b45a6c30b6a184d7e06b3328cecf8))
|
|
281
|
+
* feat(core)!: an operation may ask to run once ([dca616c](https://github.com/toa-io/toa/commit/dca616cb380a7a389e277875d3bd5ca55a6e4d45))
|
|
282
|
+
|
|
283
|
+
### Features
|
|
284
|
+
|
|
285
|
+
* **core:** a call carries what it is, and a chain of them carries it down ([ebd7769](https://github.com/toa-io/toa/commit/ebd776984a79adb9bf4a97b680128be1efab856f))
|
|
286
|
+
* **core:** a call may name the process it goes to, and wait for a set time ([7d8adb2](https://github.com/toa-io/toa/commit/7d8adb2772a95ff45ae5374efdedfb5a857fbbe9))
|
|
287
|
+
|
|
288
|
+
### BREAKING CHANGES
|
|
289
|
+
|
|
290
|
+
* `Storage.store`, `.upsert` and `.ensure` take one more
|
|
291
|
+
argument, and `Storage` has two more members. A connector that ignores them
|
|
292
|
+
works exactly as it did; a component that asks it for `once` is refused at
|
|
293
|
+
boot. See migrations/299.md.
|
|
294
|
+
* a composition booted directly has no readiness probe. Readiness is
|
|
295
|
+
the process's, and a composition is not a process. `stage.workload` boots one where a
|
|
296
|
+
suite needs it.
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
# [1.0.0-alpha.299](https://github.com/toa-io/toa/compare/v1.0.0-alpha.298...v1.0.0-alpha.299) (2026-09-10)
|
|
300
|
+
|
|
301
|
+
### Features
|
|
302
|
+
|
|
303
|
+
* **bindings.amqp:** a binding carries a channel, addressed by label ([17cf178](https://github.com/toa-io/toa/commit/17cf1782d1c47d033c02f99947b766eb9d45df75))
|
|
304
|
+
* **convergence:** deployments of one context converge ([8a70343](https://github.com/toa-io/toa/commit/8a70343cf6953aab58d4a25bac215508ff8d9a37))
|
|
305
|
+
* **core:** an outbox row is published to destinations ([cfb77b4](https://github.com/toa-io/toa/commit/cfb77b4826ff0f9560769a0996981e143d6525af))
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
# [1.0.0-alpha.298](https://github.com/toa-io/toa/compare/v1.0.0-alpha.297...v1.0.0-alpha.298) (2026-09-08)
|
|
309
|
+
|
|
310
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
# [1.0.0-alpha.297](https://github.com/toa-io/toa/compare/v1.0.0-alpha.296...v1.0.0-alpha.297) (2026-09-08)
|
|
317
|
+
|
|
318
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
# [1.0.0-alpha.296](https://github.com/toa-io/toa/compare/v1.0.0-alpha.295...v1.0.0-alpha.296) (2026-09-08)
|
|
325
|
+
|
|
326
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
# [1.0.0-alpha.295](https://github.com/toa-io/toa/compare/v1.0.0-alpha.294...v1.0.0-alpha.295) (2026-09-07)
|
|
333
|
+
|
|
334
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
# [1.0.0-alpha.294](https://github.com/toa-io/toa/compare/v1.0.0-alpha.293...v1.0.0-alpha.294) (2026-09-07)
|
|
341
|
+
|
|
342
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
# [1.0.0-alpha.293](https://github.com/toa-io/toa/compare/v1.0.0-alpha.292...v1.0.0-alpha.293) (2026-09-07)
|
|
349
|
+
|
|
350
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
# [1.0.0-alpha.292](https://github.com/toa-io/toa/compare/v1.0.0-alpha.291...v1.0.0-alpha.292) (2026-09-07)
|
|
357
|
+
|
|
358
|
+
### Features
|
|
359
|
+
|
|
360
|
+
* **definitions:** the version of Toa is the definitions package's ([3d0272e](https://github.com/toa-io/toa/commit/3d0272ea0ab862f4b6c2e58a2f003f92d0f8a87f))
|
|
361
|
+
* **definitions:** what a package declares is read from one package ([7052341](https://github.com/toa-io/toa/commit/70523411b5d9e2b204c999aa02365173f3bb518d))
|
|
362
|
+
* **norm:** a package's definition is read by one resolver ([bffd41c](https://github.com/toa-io/toa/commit/bffd41c8d18c42786b0bf321623088b9dabc4724))
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
# [1.0.0-alpha.291](https://github.com/toa-io/toa/compare/v1.0.0-alpha.290...v1.0.0-alpha.291) (2026-09-07)
|
|
366
|
+
|
|
367
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
# [1.0.0-alpha.289](https://github.com/toa-io/toa/compare/v1.0.0-alpha.288...v1.0.0-alpha.289) (2026-09-07)
|
|
374
|
+
|
|
375
|
+
* A deploy moves only what changed, and a component sees none of the runtime's environment (#1073) ([f38e3db](https://github.com/toa-io/toa/commit/f38e3db533f24db866c57bfa1ef294eff1eaf499)), closes [#1073](https://github.com/toa-io/toa/issues/1073) [#1064](https://github.com/toa-io/toa/issues/1064) [#1066](https://github.com/toa-io/toa/issues/1066) [#1067](https://github.com/toa-io/toa/issues/1067) [#1068](https://github.com/toa-io/toa/issues/1068) [#1069](https://github.com/toa-io/toa/issues/1069) [#1071](https://github.com/toa-io/toa/issues/1071) [#1070](https://github.com/toa-io/toa/issues/1070) [#1072](https://github.com/toa-io/toa/issues/1072)
|
|
376
|
+
|
|
377
|
+
### BREAKING CHANGES
|
|
378
|
+
|
|
379
|
+
* a component that read `process.env.TOA_*` reads `context` instead;
|
|
380
|
+
`echo(input)` no longer substitutes from the environment; a bash operation sees no
|
|
381
|
+
`TOA_*`; images no longer set `USER node` — see migrations/289.md.
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
# [1.0.0-alpha.288](https://github.com/toa-io/toa/compare/v1.0.0-alpha.287...v1.0.0-alpha.288) (2026-09-06)
|
|
385
|
+
|
|
386
|
+
**Note:** Version bump only for package @toa.io/boot
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
# [1.0.0-alpha.287](https://github.com/toa-io/toa/compare/v1.0.0-alpha.286...v1.0.0-alpha.287) (2026-09-06)
|
|
393
|
+
|
|
394
|
+
### Bug Fixes
|
|
395
|
+
|
|
396
|
+
* **boot:** a discovery belongs to the connection that made it ([48e1c8f](https://github.com/toa-io/toa/commit/48e1c8f668b1853134ae9fb2349c485e6da66c28))
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/boot",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.331",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "Toa Boot",
|
|
5
6
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
6
7
|
"homepage": "https://github.com/toa-io/toa#readme",
|
|
@@ -20,13 +21,15 @@
|
|
|
20
21
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
21
22
|
},
|
|
22
23
|
"dependencies": {
|
|
23
|
-
"@toa.io/
|
|
24
|
-
"@toa.io/
|
|
25
|
-
"@toa.io/
|
|
26
|
-
"@toa.io/
|
|
27
|
-
"@toa.io/
|
|
24
|
+
"@toa.io/atomicity": "1.0.0-alpha.330",
|
|
25
|
+
"@toa.io/core": "1.0.0-alpha.330",
|
|
26
|
+
"@toa.io/definitions": "1.0.0-alpha.331",
|
|
27
|
+
"@toa.io/generic": "1.0.0-alpha.330",
|
|
28
|
+
"@toa.io/norm": "1.0.0-alpha.331",
|
|
29
|
+
"@toa.io/schemas": "1.0.0-alpha.330",
|
|
28
30
|
"clone-deep": "4.0.1",
|
|
29
|
-
"dotenv": "
|
|
31
|
+
"dotenv": "18.0.6",
|
|
32
|
+
"openspan": "1.0.0-alpha.330"
|
|
30
33
|
},
|
|
31
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "e7020d160910ca4f0c2ff9040b3cbb4fca8ea41f"
|
|
32
35
|
}
|
package/src/atom.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Connector } from '@toa.io/core'
|
|
2
|
+
|
|
3
|
+
import * as boot from './index.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The atom as a system aspect. Every component has `context.atom`, with nothing declared in its
|
|
7
|
+
* manifest and nothing of its own to configure.
|
|
8
|
+
*
|
|
9
|
+
* @implements {import('@toa.io/core/types').extensions.Aspect}
|
|
10
|
+
*/
|
|
11
|
+
class Aspect extends Connector {
|
|
12
|
+
name = 'atom'
|
|
13
|
+
|
|
14
|
+
#atom
|
|
15
|
+
|
|
16
|
+
constructor(atom) {
|
|
17
|
+
super()
|
|
18
|
+
|
|
19
|
+
this.#atom = atom
|
|
20
|
+
|
|
21
|
+
this.depends(atom)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// the methods are named rather than forwarded, so that the connector's lifecycle is not
|
|
25
|
+
// reachable from an algorithm
|
|
26
|
+
invoke(method, ...args) {
|
|
27
|
+
switch (method) {
|
|
28
|
+
case 'slots':
|
|
29
|
+
return this.#atom.slots(...args)
|
|
30
|
+
case 'meter':
|
|
31
|
+
return this.#atom.meter(...args)
|
|
32
|
+
case 'lock':
|
|
33
|
+
return this.#atom.lock(...args)
|
|
34
|
+
default:
|
|
35
|
+
throw new Error(`Atom aspect has no '${method}' method`)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** @param {string} group */
|
|
41
|
+
export const atom = (group) => new Aspect(boot.atomicity(group))
|
package/src/atomicity.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Factory } from '@toa.io/atomicity'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* What the replicas of one group decide together. Every component has one, whether or not there
|
|
5
|
+
* is anything to coordinate through: without a Redis nothing is owned and nothing is metered —
|
|
6
|
+
* see the connector's readme.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} group
|
|
9
|
+
* @returns {import('@toa.io/core/types').atomicity.Atom}
|
|
10
|
+
*/
|
|
11
|
+
export const atomicity = (group) => new Factory().atom(group)
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { factory } from './factory.js'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const broadcast = (channel, group, binding = '@toa.io/bindings.amqp') => factory(binding).broadcast(channel, group)
|
|
6
|
-
|
|
7
|
-
exports.broadcast = broadcast
|
|
3
|
+
export const broadcast = async (channel, group, binding = '@toa.io/bindings.amqp') =>
|
|
4
|
+
(await factory(binding)).broadcast(channel, group)
|
package/src/bindings/consume.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
import { LOOP } from './constants.js'
|
|
2
|
+
import { factory } from './factory.js'
|
|
3
|
+
import { carries } from './produce.js'
|
|
2
4
|
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
+
export const consume = async (locator, endpoint, bindings, streamed = false) => {
|
|
6
|
+
const declared = [LOOP].concat(bindings)
|
|
7
|
+
const carrying = streamed ? await filter(declared) : declared
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
return await Promise.all(
|
|
10
|
+
carrying.map(async (binding) => (await factory(binding)).consumer(locator, endpoint))
|
|
11
|
+
)
|
|
12
|
+
}
|
|
8
13
|
|
|
9
|
-
|
|
14
|
+
/** A call that carries a stream is handed to nothing that cannot carry one. */
|
|
15
|
+
const filter = async (bindings) => {
|
|
16
|
+
const carrying = []
|
|
17
|
+
|
|
18
|
+
for (const binding of bindings) if (await carries(binding)) carrying.push(binding)
|
|
19
|
+
|
|
20
|
+
return carrying
|
|
21
|
+
}
|
package/src/bindings/emit.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { factory } from './factory.js'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const emit = (binding, locator, label) => factory(binding).emitter(locator, label)
|
|
6
|
-
|
|
7
|
-
exports.emit = emit
|
|
3
|
+
export const emit = async (binding, locator, label) =>
|
|
4
|
+
(await factory(binding)).emitter(locator, label)
|
package/src/bindings/factory.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
1
|
let instances = {}
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
// the promise is what is remembered, so two components cannot each make a factory
|
|
4
|
+
export const factory = async (binding) => {
|
|
5
|
+
instances[binding] ??= import(binding).then(({ Factory }) => new Factory())
|
|
7
6
|
|
|
8
|
-
return instances[binding]
|
|
7
|
+
return await instances[binding]
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
// for testing purposes
|
|
12
|
-
const reset = () => (instances = {})
|
|
13
|
-
|
|
14
|
-
exports.factory = factory
|
|
15
|
-
exports.reset = reset
|
|
11
|
+
export const reset = () => (instances = {})
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { factory } from './factory.js'
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line max-params
|
|
4
|
+
export const inbound = async (binding, channel, uris, label, sink) => {
|
|
5
|
+
const instance = await factory(binding)
|
|
6
|
+
|
|
7
|
+
if (instance.inbound === undefined)
|
|
8
|
+
throw new Error(`Binding '${binding}' does not consume a channel`)
|
|
9
|
+
|
|
10
|
+
return instance.inbound(channel, uris, label, sink)
|
|
11
|
+
}
|
package/src/bindings/index.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.broadcast = broadcast
|
|
10
|
-
exports.consume = consume
|
|
11
|
-
exports.emit = emit
|
|
12
|
-
exports.produce = produce
|
|
13
|
-
exports.receive = receive
|
|
1
|
+
export { broadcast } from './broadcast.js'
|
|
2
|
+
export { consume } from './consume.js'
|
|
3
|
+
export { emit } from './emit.js'
|
|
4
|
+
export { inbound } from './inbound.js'
|
|
5
|
+
export { outbound } from './outbound.js'
|
|
6
|
+
export { produce } from './produce.js'
|
|
7
|
+
export { receive } from './receive.js'
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { factory } from './factory.js'
|
|
2
|
+
|
|
3
|
+
export const outbound = async (binding, channel, uris) => {
|
|
4
|
+
const instance = await factory(binding)
|
|
5
|
+
|
|
6
|
+
if (instance.outbound === undefined)
|
|
7
|
+
throw new Error(`Binding '${binding}' does not publish a channel`)
|
|
8
|
+
|
|
9
|
+
return instance.outbound(channel, uris)
|
|
10
|
+
}
|