@toa.io/boot 1.0.0-alpha.274 → 1.0.0-alpha.277
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 +9 -0
- package/package.json +10 -10
- package/src/atom.js +3 -7
- package/src/atomicity.js +2 -6
- package/src/bindings/broadcast.js +3 -6
- package/src/bindings/constants.js +1 -3
- package/src/bindings/consume.js +5 -8
- package/src/bindings/emit.js +3 -6
- package/src/bindings/factory.js +5 -9
- package/src/bindings/index.js +5 -13
- package/src/bindings/produce.js +12 -14
- package/src/bindings/receive.js +3 -6
- package/src/bridge.js +16 -22
- package/src/call.js +4 -8
- package/src/cascade.js +3 -7
- package/src/component.js +8 -12
- package/src/composition.js +8 -12
- package/src/context.js +3 -7
- package/src/contract.js +5 -8
- package/src/discovery.js +6 -11
- package/src/emission.js +8 -12
- package/src/env.js +4 -5
- package/src/events.js +1 -5
- package/src/exposition.js +3 -7
- package/src/extensions/aspects.js +3 -7
- package/src/extensions/component.js +2 -6
- package/src/extensions/context.js +2 -6
- package/src/extensions/emitter.js +2 -6
- package/src/extensions/index.js +9 -21
- package/src/extensions/instances.js +1 -3
- package/src/extensions/load.js +4 -8
- package/src/extensions/manage.js +2 -6
- package/src/extensions/receiver.js +2 -6
- package/src/extensions/resolve.js +36 -11
- package/src/extensions/storage.js +2 -6
- package/src/extensions/tenants.js +4 -8
- package/src/guards.js +3 -7
- package/src/index.js +27 -44
- package/src/manifest.js +17 -13
- package/src/manifest.test.js +7 -7
- package/src/operation.js +3 -15
- package/src/outbox.js +3 -7
- package/src/rc.js +2 -6
- package/src/receivers.js +10 -13
- package/src/remote.js +15 -10
- package/src/span.js +2 -6
- package/src/storage.js +11 -10
- package/types/index.d.ts +2 -2
- package/types/manifest.d.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.0.0-alpha.277](https://github.com/toa-io/toa/compare/v1.0.0-alpha.276...v1.0.0-alpha.277) (2026-09-03)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* read a manifest the way js-yaml read one before ([fcea1b2](https://github.com/toa-io/toa/commit/fcea1b21996d6efa6c3198acbfc9f70f1ce0c35c))
|
|
11
|
+
* settle what the module loader made asynchronous ([d4ab9df](https://github.com/toa-io/toa/commit/d4ab9dfb09e382da311dba08f52214e7645f4a6c))
|
|
12
|
+
* what the loader resolves, and what it will not ([1b8a02f](https://github.com/toa-io/toa/commit/1b8a02ff0a5e0f18ee62e3f71bc81116f86f9af1))
|
|
13
|
+
|
|
14
|
+
|
|
6
15
|
# [1.0.0-alpha.274](https://github.com/toa-io/toa/compare/v1.0.0-alpha.273...v1.0.0-alpha.274) (2026-09-02)
|
|
7
16
|
|
|
8
17
|
**Note:** Version bump only for package @toa.io/boot
|
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.277",
|
|
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,15 +21,14 @@
|
|
|
20
21
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
21
22
|
},
|
|
22
23
|
"dependencies": {
|
|
23
|
-
"@toa.io/atomicity": "1.0.0-alpha.
|
|
24
|
-
"@toa.io/core": "1.0.0-alpha.
|
|
25
|
-
"@toa.io/generic": "1.0.0-alpha.
|
|
26
|
-
"@toa.io/norm": "1.0.0-alpha.
|
|
27
|
-
"@toa.io/schemas": "1.0.0-alpha.
|
|
24
|
+
"@toa.io/atomicity": "1.0.0-alpha.277",
|
|
25
|
+
"@toa.io/core": "1.0.0-alpha.277",
|
|
26
|
+
"@toa.io/generic": "1.0.0-alpha.277",
|
|
27
|
+
"@toa.io/norm": "1.0.0-alpha.277",
|
|
28
|
+
"@toa.io/schemas": "1.0.0-alpha.277",
|
|
28
29
|
"clone-deep": "4.0.1",
|
|
29
|
-
"dotenv": "
|
|
30
|
-
"
|
|
31
|
-
"openspan": "1.0.0-alpha.272"
|
|
30
|
+
"dotenv": "17.4.2",
|
|
31
|
+
"openspan": "1.0.0-alpha.277"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "0c0071418c2c56a44e621ba5ced5cdd23dff1738"
|
|
34
34
|
}
|
package/src/atom.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { Connector } from '@toa.io/core'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const boot = require('./index')
|
|
3
|
+
import * as boot from './index.js'
|
|
6
4
|
|
|
7
5
|
/**
|
|
8
6
|
* The atom as a system aspect. Every component has `context.atom`, with nothing declared in its
|
|
@@ -36,6 +34,4 @@ class Aspect extends Connector {
|
|
|
36
34
|
}
|
|
37
35
|
|
|
38
36
|
/** @param {string} group */
|
|
39
|
-
const atom = (group) => new Aspect(boot.atomicity(group))
|
|
40
|
-
|
|
41
|
-
exports.atom = atom
|
|
37
|
+
export const atom = (group) => new Aspect(boot.atomicity(group))
|
package/src/atomicity.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { Factory } = require('@toa.io/atomicity')
|
|
1
|
+
import { Factory } from '@toa.io/atomicity'
|
|
4
2
|
|
|
5
3
|
/**
|
|
6
4
|
* What the replicas of one group decide together. Every component has one, whether or not there
|
|
@@ -10,6 +8,4 @@ const { Factory } = require('@toa.io/atomicity')
|
|
|
10
8
|
* @param {string} group
|
|
11
9
|
* @returns {toa.core.atomicity.Atom}
|
|
12
10
|
*/
|
|
13
|
-
const atomicity = (group) => new Factory().atom(group)
|
|
14
|
-
|
|
15
|
-
exports.atomicity = atomicity
|
|
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,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { LOOP } from './constants.js'
|
|
2
|
+
import { factory } from './factory.js'
|
|
2
3
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const consume = (locator, endpoint, bindings) =>
|
|
7
|
-
[LOOP].concat(bindings).map((binding) => factory(binding).consumer(locator, endpoint))
|
|
8
|
-
|
|
9
|
-
exports.consume = consume
|
|
4
|
+
export const consume = async (locator, endpoint, bindings) =>
|
|
5
|
+
await Promise.all([LOOP].concat(bindings).map(async (binding) =>
|
|
6
|
+
(await factory(binding)).consumer(locator, endpoint)))
|
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 = {})
|
package/src/bindings/index.js
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const { produce } = require('./produce')
|
|
7
|
-
const { receive } = require('./receive')
|
|
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 { produce } from './produce.js'
|
|
5
|
+
export { receive } from './receive.js'
|
package/src/bindings/produce.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
import { LOOP } from './constants.js'
|
|
2
|
+
import { factory } from './factory.js'
|
|
2
3
|
|
|
3
|
-
const
|
|
4
|
-
const { factory } = require('./factory')
|
|
5
|
-
|
|
6
|
-
const produce = (component, operations) => {
|
|
4
|
+
export const produce = async (component, operations) => {
|
|
7
5
|
const local = []
|
|
8
6
|
const other = []
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
const
|
|
8
|
+
for (const [binding, endpoints] of group(operations)) {
|
|
9
|
+
const made = await factory(binding)
|
|
10
|
+
const producer = made.producer(component.locator, endpoints, component)
|
|
11
|
+
const { properties } = await import(binding)
|
|
12
12
|
|
|
13
|
-
if (
|
|
13
|
+
if (properties.local === true)
|
|
14
14
|
local.push(producer)
|
|
15
15
|
else
|
|
16
16
|
other.push(producer)
|
|
17
|
-
}
|
|
17
|
+
}
|
|
18
18
|
|
|
19
19
|
return { local, other }
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
/** The endpoints each binding carries, as entries. */
|
|
23
|
+
const group = (operations) => {
|
|
23
24
|
const map = {}
|
|
24
25
|
|
|
25
26
|
if (operations !== undefined)
|
|
@@ -36,8 +37,5 @@ const group = (operations, callback) => {
|
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
callback(binding, endpoints)
|
|
40
|
+
return Object.entries(map)
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
exports.produce = produce
|
package/src/bindings/receive.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { factory } from './factory.js'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const receive = (binding, locator, label, group, receiver) => factory(binding).receiver(locator, label, group, receiver)
|
|
6
|
-
|
|
7
|
-
exports.receive = receive
|
|
3
|
+
export const receive = async (binding, locator, label, group, receiver) =>
|
|
4
|
+
(await factory(binding)).receiver(locator, label, group, receiver)
|
package/src/bridge.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
async function algorithm (bridge, path, endpoint, context) {
|
|
4
|
-
const factory = resolve(bridge)
|
|
1
|
+
export async function algorithm (bridge, path, endpoint, context) {
|
|
2
|
+
const factory = await resolve(bridge)
|
|
5
3
|
const algorithm = await factory.algorithm(path, endpoint, context)
|
|
6
4
|
|
|
7
5
|
algorithm.depends(context)
|
|
@@ -9,12 +7,17 @@ async function algorithm (bridge, path, endpoint, context) {
|
|
|
9
7
|
return algorithm
|
|
10
8
|
}
|
|
11
9
|
|
|
12
|
-
const event = (bridge, path, label, context) =>
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
export const event = async (bridge, path, label, context) =>
|
|
11
|
+
(await resolve(bridge)).event(path, label, context)
|
|
12
|
+
|
|
13
|
+
export const receiver = async (bridge, path, label) =>
|
|
14
|
+
(await resolve(bridge)).receiver(path, label)
|
|
15
|
+
|
|
16
|
+
export const guard = async (bridge, path, label, context) =>
|
|
17
|
+
(await resolve(bridge)).guard(path, label, context)
|
|
15
18
|
|
|
16
|
-
async function rc (bridge, path, context) {
|
|
17
|
-
const factory = resolve(bridge)
|
|
19
|
+
export async function rc (bridge, path, context) {
|
|
20
|
+
const factory = await resolve(bridge)
|
|
18
21
|
|
|
19
22
|
if (factory.rc === undefined)
|
|
20
23
|
return
|
|
@@ -24,18 +27,9 @@ async function rc (bridge, path, context) {
|
|
|
24
27
|
|
|
25
28
|
const factories = {}
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
// the promise is what is remembered, so two boots cannot each make a factory
|
|
31
|
+
const resolve = async (bridge) => {
|
|
32
|
+
factories[bridge] ??= import(bridge).then(({ Factory }) => new Factory())
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return factories[bridge]
|
|
34
|
+
return await factories[bridge]
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
exports.algorithm = algorithm
|
|
38
|
-
exports.event = event
|
|
39
|
-
exports.receiver = receiver
|
|
40
|
-
exports.guard = guard
|
|
41
|
-
exports.rc = rc
|
package/src/call.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { Call, Transmission } from '@toa.io/core'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const boot = require('./index')
|
|
3
|
+
import * as boot from './index.js'
|
|
6
4
|
|
|
7
5
|
// eslint-disable-next-line max-params
|
|
8
|
-
const call = (locator, endpoint, definition, entity, source) => {
|
|
9
|
-
const consumers = boot.bindings.consume(locator, endpoint, definition.bindings)
|
|
6
|
+
export const call = async (locator, endpoint, definition, entity, source) => {
|
|
7
|
+
const consumers = await boot.bindings.consume(locator, endpoint, definition.bindings)
|
|
10
8
|
const transmission = new Transmission(consumers)
|
|
11
9
|
const contract = boot.contract.request(definition, entity)
|
|
12
10
|
|
|
13
11
|
return new Call(transmission, contract, source)
|
|
14
12
|
}
|
|
15
|
-
|
|
16
|
-
exports.call = call
|
package/src/cascade.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { Cascade } from '@toa.io/core'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import * as boot from './index.js'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
async function cascade (manifest, endpoint, definition, context, preflight) {
|
|
5
|
+
export async function cascade (manifest, endpoint, definition, context, preflight) {
|
|
8
6
|
const bridges = []
|
|
9
7
|
|
|
10
8
|
if (definition.forward) endpoint = definition.forward
|
|
@@ -29,5 +27,3 @@ async function cascade (manifest, endpoint, definition, context, preflight) {
|
|
|
29
27
|
|
|
30
28
|
return new Cascade(bridges, preflight)
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
exports.cascade = cascade
|
package/src/component.js
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
import { Component, Locator, State, entities } from '@toa.io/core'
|
|
2
|
+
import * as schemas from '@toa.io/schemas'
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
import * as boot from './index.js'
|
|
5
|
+
import { span } from './span.js'
|
|
5
6
|
|
|
6
|
-
const
|
|
7
|
-
const { span } = require('./span')
|
|
8
|
-
|
|
9
|
-
const component = async (manifest) => {
|
|
7
|
+
export const component = async (manifest) => {
|
|
10
8
|
const locator = new Locator(manifest.name, manifest.namespace)
|
|
11
9
|
|
|
12
10
|
return span(`component ${locator.id}`, () => create(manifest, locator))
|
|
13
11
|
}
|
|
14
12
|
|
|
15
13
|
const create = async (manifest, locator) => {
|
|
16
|
-
boot.extensions.load(manifest)
|
|
14
|
+
await boot.extensions.load(manifest)
|
|
17
15
|
|
|
18
16
|
// the storage is told whether there will be an outbox, so the events come first
|
|
19
17
|
const events = boot.events(manifest)
|
|
20
|
-
const storage = boot.storage(manifest, events !== undefined)
|
|
18
|
+
const storage = await boot.storage(manifest, events !== undefined)
|
|
21
19
|
const context = await boot.context(manifest)
|
|
22
|
-
const emission = boot.emission(events, locator, context)
|
|
20
|
+
const emission = await boot.emission(events, locator, context)
|
|
23
21
|
const outbox = boot.outbox(manifest, storage, emission)
|
|
24
22
|
|
|
25
23
|
let state
|
|
@@ -72,5 +70,3 @@ async function bootOperations (manifest, context, state, preflight) {
|
|
|
72
70
|
|
|
73
71
|
return operations
|
|
74
72
|
}
|
|
75
|
-
|
|
76
|
-
exports.component = component
|
package/src/composition.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { console } from 'openspan'
|
|
2
|
+
import { Composition } from '@toa.io/core'
|
|
3
|
+
import { version } from '@toa.io/runtime'
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const { version } = require('@toa.io/runtime/package.json')
|
|
5
|
+
import * as boot from './index.js'
|
|
6
|
+
import { span } from './span.js'
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
const { span } = require('./span')
|
|
9
|
-
|
|
10
|
-
async function composition (paths, options) {
|
|
8
|
+
export async function composition (paths, options) {
|
|
11
9
|
options = Object.assign({}, options)
|
|
12
10
|
|
|
13
11
|
return span('boot composition', async () => {
|
|
@@ -29,8 +27,8 @@ async function composition (paths, options) {
|
|
|
29
27
|
const components = await span('create components',
|
|
30
28
|
async () => await Promise.all(manifests.map(boot.component)))
|
|
31
29
|
|
|
32
|
-
const groups = components.map((component, index) =>
|
|
33
|
-
boot.bindings.produce(component, manifests[index].operations))
|
|
30
|
+
const groups = await Promise.all(components.map(async (component, index) =>
|
|
31
|
+
await boot.bindings.produce(component, manifests[index].operations)))
|
|
34
32
|
|
|
35
33
|
const receivers = await span('create receivers',
|
|
36
34
|
async () => await Promise.all(components.map((component, index) =>
|
|
@@ -89,5 +87,3 @@ async function composition (paths, options) {
|
|
|
89
87
|
}
|
|
90
88
|
})
|
|
91
89
|
}
|
|
92
|
-
|
|
93
|
-
exports.composition = composition
|
package/src/context.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { Context, Locator } from '@toa.io/core'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import * as boot from './index.js'
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const context = async (manifest) => {
|
|
5
|
+
export const context = async (manifest) => {
|
|
8
6
|
const local = await boot.remote(manifest.locator, undefined, manifest)
|
|
9
7
|
const aspects = boot.extensions.aspects(manifest)
|
|
10
8
|
|
|
@@ -24,5 +22,3 @@ const context = async (manifest) => {
|
|
|
24
22
|
|
|
25
23
|
return boot.extensions.context(context)
|
|
26
24
|
}
|
|
27
|
-
|
|
28
|
-
exports.context = context
|
package/src/contract.js
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import { contract } from '@toa.io/core'
|
|
2
|
+
import * as schemas from '@toa.io/schemas'
|
|
2
3
|
|
|
3
|
-
const {
|
|
4
|
-
const schemas = require('@toa.io/schemas')
|
|
4
|
+
const { Request, Reply } = contract
|
|
5
5
|
|
|
6
|
-
const request = (definition, entity) => {
|
|
6
|
+
export const request = (definition, entity) => {
|
|
7
7
|
const request = Request.schema(definition, entity)
|
|
8
8
|
const schema = schemas.schema(request, { removeAdditional: true })
|
|
9
9
|
|
|
10
10
|
return new Request(schema, definition)
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
const reply = (output, errors) => {
|
|
13
|
+
export const reply = (output, errors) => {
|
|
14
14
|
const reply = Reply.schema(output, errors)
|
|
15
15
|
const schema = schemas.schema(reply)
|
|
16
16
|
|
|
17
17
|
return new Reply(schema)
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
exports.request = request
|
|
21
|
-
exports.reply = reply
|
package/src/discovery.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { Discovery, Exposition } from '@toa.io/core'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const boot = require('./index')
|
|
3
|
+
import * as boot from './index.js'
|
|
6
4
|
|
|
7
5
|
let promise
|
|
8
6
|
let instance = null
|
|
9
7
|
|
|
10
|
-
const discovery = async () => {
|
|
8
|
+
export const discovery = async () => {
|
|
11
9
|
if (instance === null) {
|
|
12
10
|
instance = new Discovery(lookup)
|
|
13
11
|
promise = instance.connect()
|
|
@@ -19,17 +17,17 @@ const discovery = async () => {
|
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
const lookup = async (locator) => {
|
|
22
|
-
const call = boot.call(locator, ENDPOINT, { bindings: BINDINGS })
|
|
20
|
+
const call = await boot.call(locator, ENDPOINT, { bindings: BINDINGS })
|
|
23
21
|
|
|
24
22
|
await call.connect()
|
|
25
23
|
|
|
26
24
|
return call
|
|
27
25
|
}
|
|
28
26
|
|
|
29
|
-
const expose = async (manifest) => {
|
|
27
|
+
export const expose = async (manifest) => {
|
|
30
28
|
const exposition = new Exposition(manifest.locator, manifest)
|
|
31
29
|
const operations = { [ENDPOINT]: { bindings: BINDINGS } }
|
|
32
|
-
const { local, other } = boot.bindings.produce(exposition, operations)
|
|
30
|
+
const { local, other } = await boot.bindings.produce(exposition, operations)
|
|
33
31
|
const producers = local.concat(other)
|
|
34
32
|
|
|
35
33
|
await Promise.all(producers.map((producer) => producer.connect()))
|
|
@@ -39,6 +37,3 @@ const expose = async (manifest) => {
|
|
|
39
37
|
|
|
40
38
|
const BINDINGS = ['@toa.io/bindings.amqp']
|
|
41
39
|
const ENDPOINT = '.lookup'
|
|
42
|
-
|
|
43
|
-
exports.discovery = discovery
|
|
44
|
-
exports.expose = expose
|
package/src/emission.js
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import { Emission, Event } from '@toa.io/core'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import * as boot from './index.js'
|
|
4
|
+
import * as extensions from './extensions/index.js'
|
|
4
5
|
|
|
5
|
-
const
|
|
6
|
-
const extensions = require('./extensions')
|
|
7
|
-
|
|
8
|
-
const emission = (definitions, locator, context) => {
|
|
6
|
+
export const emission = async (definitions, locator, context) => {
|
|
9
7
|
if (definitions === undefined) return
|
|
10
8
|
|
|
11
|
-
const events = Object.entries(definitions).map(([label, definition]) => {
|
|
12
|
-
const emitter = boot.bindings.emit(definition.binding, locator, label)
|
|
9
|
+
const events = await Promise.all(Object.entries(definitions).map(async ([label, definition]) => {
|
|
10
|
+
const emitter = await boot.bindings.emit(definition.binding, locator, label)
|
|
13
11
|
const decorator = extensions.emitter(emitter, label, locator)
|
|
14
|
-
const bridge = boot.bridge.event(definition.bridge, definition.path, label, context)
|
|
12
|
+
const bridge = await boot.bridge.event(definition.bridge, definition.path, label, context)
|
|
15
13
|
|
|
16
14
|
return new Event({ ...definition, label: `${locator.id}.${label}` }, decorator, bridge)
|
|
17
|
-
})
|
|
15
|
+
}))
|
|
18
16
|
|
|
19
17
|
return new Emission(events)
|
|
20
18
|
}
|
|
21
|
-
|
|
22
|
-
exports.emission = emission
|
package/src/env.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const findUp = require('find-up')
|
|
1
|
+
import dotenv from 'dotenv'
|
|
2
|
+
import { findUp } from '@toa.io/generic'
|
|
4
3
|
|
|
5
4
|
async function setup () {
|
|
6
|
-
const path =
|
|
5
|
+
const path = findUp('.env')
|
|
7
6
|
|
|
8
|
-
if (path !== undefined)
|
|
7
|
+
if (path !== undefined) dotenv.config({ path })
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
if (!('TOA_ENV' in process.env)) {
|
package/src/events.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* The events of this component that something consumes. An event nobody consumes is not
|
|
5
3
|
* published, so it gets no emitter and no exchange, and a component none of whose events are
|
|
@@ -11,7 +9,7 @@
|
|
|
11
9
|
* @param {toa.norm.Component} manifest
|
|
12
10
|
* @returns {toa.norm.Events | undefined}
|
|
13
11
|
*/
|
|
14
|
-
const events = (manifest) => {
|
|
12
|
+
export const events = (manifest) => {
|
|
15
13
|
if (manifest.events === undefined) return
|
|
16
14
|
|
|
17
15
|
const value = process.env[VARIABLE + manifest.locator.uppercase]
|
|
@@ -25,5 +23,3 @@ const events = (manifest) => {
|
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
const VARIABLE = 'TOA_EVENTS_'
|
|
28
|
-
|
|
29
|
-
exports.events = events
|
package/src/exposition.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { Exposition, Locator } from '@toa.io/core'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import * as boot from './index.js'
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const exposition = async (manifest) => {
|
|
5
|
+
export const exposition = async (manifest) => {
|
|
8
6
|
const locator = new Locator('', '')
|
|
9
7
|
const exposition = new Exposition(locator, manifest)
|
|
10
8
|
const producers = boot.bindings.expose(exposition)
|
|
@@ -13,5 +11,3 @@ const exposition = async (manifest) => {
|
|
|
13
11
|
|
|
14
12
|
return producers
|
|
15
13
|
}
|
|
16
|
-
|
|
17
|
-
exports.exposition = exposition
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { resolve } = require('./resolve')
|
|
1
|
+
import { instance } from './resolve.js'
|
|
4
2
|
|
|
5
3
|
/**
|
|
6
4
|
* @param {toa.norm.Component} manifest
|
|
7
5
|
* @returns {toa.core.extensions.Aspect[]}
|
|
8
6
|
*/
|
|
9
|
-
const aspects = (manifest) => {
|
|
7
|
+
export const aspects = (manifest) => {
|
|
10
8
|
const aspects = []
|
|
11
9
|
|
|
12
10
|
if (manifest.extensions === undefined) return aspects
|
|
13
11
|
|
|
14
12
|
for (const [name, declaration] of Object.entries(manifest.extensions)) {
|
|
15
|
-
const factory =
|
|
13
|
+
const factory = instance(name, manifest.path)
|
|
16
14
|
|
|
17
15
|
if (factory.aspect === undefined) continue
|
|
18
16
|
|
|
@@ -24,5 +22,3 @@ const aspects = (manifest) => {
|
|
|
24
22
|
|
|
25
23
|
return aspects
|
|
26
24
|
}
|
|
27
|
-
|
|
28
|
-
exports.aspects = aspects
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { instances } = require('./instances')
|
|
1
|
+
import { instances } from './instances.js'
|
|
4
2
|
|
|
5
3
|
/**
|
|
6
4
|
* @param {toa.core.Component} component
|
|
7
5
|
* @returns {toa.core.Component}
|
|
8
6
|
*/
|
|
9
|
-
const component = (component) => {
|
|
7
|
+
export const component = (component) => {
|
|
10
8
|
let decorated = component
|
|
11
9
|
|
|
12
10
|
for (const factory of Object.values(instances)) {
|
|
@@ -15,5 +13,3 @@ const component = (component) => {
|
|
|
15
13
|
|
|
16
14
|
return decorated
|
|
17
15
|
}
|
|
18
|
-
|
|
19
|
-
exports.component = component
|