@toa.io/boot 1.0.0-alpha.273 → 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.
Files changed (49) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/package.json +10 -10
  3. package/src/atom.js +3 -7
  4. package/src/atomicity.js +2 -6
  5. package/src/bindings/broadcast.js +3 -6
  6. package/src/bindings/constants.js +1 -3
  7. package/src/bindings/consume.js +5 -8
  8. package/src/bindings/emit.js +3 -6
  9. package/src/bindings/factory.js +5 -9
  10. package/src/bindings/index.js +5 -13
  11. package/src/bindings/produce.js +12 -14
  12. package/src/bindings/receive.js +3 -6
  13. package/src/bridge.js +16 -22
  14. package/src/call.js +4 -8
  15. package/src/cascade.js +3 -7
  16. package/src/component.js +8 -12
  17. package/src/composition.js +8 -12
  18. package/src/context.js +3 -7
  19. package/src/contract.js +5 -8
  20. package/src/discovery.js +6 -11
  21. package/src/emission.js +8 -12
  22. package/src/env.js +4 -5
  23. package/src/events.js +1 -5
  24. package/src/exposition.js +3 -7
  25. package/src/extensions/aspects.js +3 -7
  26. package/src/extensions/component.js +2 -6
  27. package/src/extensions/context.js +2 -6
  28. package/src/extensions/emitter.js +2 -6
  29. package/src/extensions/index.js +9 -21
  30. package/src/extensions/instances.js +1 -3
  31. package/src/extensions/load.js +4 -8
  32. package/src/extensions/manage.js +2 -6
  33. package/src/extensions/receiver.js +2 -6
  34. package/src/extensions/resolve.js +36 -11
  35. package/src/extensions/storage.js +2 -6
  36. package/src/extensions/tenants.js +4 -8
  37. package/src/guards.js +3 -7
  38. package/src/index.js +27 -44
  39. package/src/manifest.js +17 -13
  40. package/src/manifest.test.js +7 -7
  41. package/src/operation.js +3 -15
  42. package/src/outbox.js +3 -7
  43. package/src/rc.js +2 -6
  44. package/src/receivers.js +10 -13
  45. package/src/remote.js +15 -10
  46. package/src/span.js +2 -6
  47. package/src/storage.js +11 -10
  48. package/types/index.d.ts +2 -2
  49. package/types/manifest.d.ts +1 -1
@@ -1,12 +1,10 @@
1
- 'use strict'
2
-
3
- const { instances } = require('./instances')
1
+ import { instances } from './instances.js'
4
2
 
5
3
  /**
6
4
  * @param {toa.core.Context} component
7
5
  * @returns {toa.core.Context}
8
6
  */
9
- const context = (component) => {
7
+ export const context = (component) => {
10
8
  let decorated = component
11
9
 
12
10
  for (const factory of Object.values(instances)) {
@@ -15,5 +13,3 @@ const context = (component) => {
15
13
 
16
14
  return decorated
17
15
  }
18
-
19
- exports.context = context
@@ -1,6 +1,4 @@
1
- 'use strict'
2
-
3
- const { instances } = require('./instances')
1
+ import { instances } from './instances.js'
4
2
 
5
3
  /**
6
4
  * @param {toa.core.bindings.Emitter} emitter
@@ -8,7 +6,7 @@ const { instances } = require('./instances')
8
6
  * @param {toa.core.Locator} locator
9
7
  * @returns {toa.core.bindings.Emitter}
10
8
  */
11
- const emitter = (emitter, label, locator) => {
9
+ export const emitter = (emitter, label, locator) => {
12
10
  let decorated = emitter
13
11
 
14
12
  for (const factory of Object.values(instances)) {
@@ -17,5 +15,3 @@ const emitter = (emitter, label, locator) => {
17
15
 
18
16
  return decorated
19
17
  }
20
-
21
- exports.emitter = emitter
@@ -1,21 +1,9 @@
1
- 'use strict'
2
-
3
- const { aspects } = require('./aspects')
4
- const { component } = require('./component')
5
- const { context } = require('./context')
6
- const { emitter } = require('./emitter')
7
- const { load } = require('./load')
8
- const { manage } = require('./manage')
9
- const { receiver } = require('./receiver')
10
- const { storage } = require('./storage')
11
- const { tenants } = require('./tenants')
12
-
13
- exports.aspects = aspects
14
- exports.component = component
15
- exports.context = context
16
- exports.emitter = emitter
17
- exports.load = load
18
- exports.manage = manage
19
- exports.receiver = receiver
20
- exports.storage = storage
21
- exports.tenants = tenants
1
+ export { aspects } from './aspects.js'
2
+ export { component } from './component.js'
3
+ export { context } from './context.js'
4
+ export { emitter } from './emitter.js'
5
+ export { load } from './load.js'
6
+ export { manage } from './manage.js'
7
+ export { receiver } from './receiver.js'
8
+ export { storage } from './storage.js'
9
+ export { tenants } from './tenants.js'
@@ -1,6 +1,4 @@
1
- 'use strict'
2
-
3
1
  /**
4
2
  * @type {{ [key: string]: toa.core.extensions.Factory}}
5
3
  */
6
- exports.instances = {}
4
+ export const instances = {}
@@ -1,16 +1,12 @@
1
- 'use strict'
2
-
3
- const { resolve } = require('./resolve')
1
+ import { resolve } from './resolve.js'
4
2
 
5
3
  /**
6
4
  * @param {toa.norm.Component} manifest
7
5
  */
8
- const load = (manifest) => {
6
+ export const load = async (manifest) => {
9
7
  if (manifest.extensions === undefined)
10
8
  return
11
9
 
12
- for (const name of Object.keys(manifest.extensions))
13
- resolve(name, manifest.path)
10
+ await Promise.all(Object.keys(manifest.extensions)
11
+ .map(async (name) => await resolve(name, manifest.path)))
14
12
  }
15
-
16
- exports.load = load
@@ -1,12 +1,10 @@
1
- 'use strict'
2
-
3
- const { instances } = require('./instances')
1
+ import { instances } from './instances.js'
4
2
 
5
3
  /**
6
4
  * @param {toa.core.Connector} composition
7
5
  * @returns {toa.core.Connector}
8
6
  */
9
- const manage = (composition) => {
7
+ export const manage = (composition) => {
10
8
  let managed = composition
11
9
 
12
10
  for (const factory of Object.values(instances)) {
@@ -16,5 +14,3 @@ const manage = (composition) => {
16
14
 
17
15
  return managed
18
16
  }
19
-
20
- exports.manage = manage
@@ -1,13 +1,11 @@
1
- 'use strict'
2
-
3
- const { instances } = require('./instances')
1
+ import { instances } from './instances.js'
4
2
 
5
3
  /**
6
4
  * @param {toa.core.Receiver} receiver
7
5
  * @param {toa.core.Locator} locator
8
6
  * @returns {toa.core.Receiver}
9
7
  */
10
- const receiver = (receiver, locator) => {
8
+ export const receiver = (receiver, locator) => {
11
9
  let decorated = receiver
12
10
 
13
11
  for (const factory of Object.values(instances)) {
@@ -17,5 +15,3 @@ const receiver = (receiver, locator) => {
17
15
 
18
16
  return decorated
19
17
  }
20
-
21
- exports.receiver = receiver
@@ -1,27 +1,52 @@
1
- 'use strict'
1
+ import { createRequire } from 'node:module'
2
+ import { pathToFileURL } from 'node:url'
3
+ import { find } from '@toa.io/generic'
4
+ import * as boot from '../../src/index.js'
2
5
 
3
- const { find } = require('@toa.io/generic')
4
- const boot = require('../..')
6
+ import { instances } from './instances.js'
5
7
 
6
- const { instances } = require('./instances')
8
+ // what `find` returns is a package directory, and a module is loaded by file
9
+ const require = createRequire(import.meta.url)
10
+
11
+ // an extension is loaded once, and what is remembered while it loads is the
12
+ // promise, so two components cannot each make a factory
13
+ const loading = {}
7
14
 
8
15
  /**
16
+ * Loads an extension and remembers its factory.
17
+ *
9
18
  * @param {string} reference
10
19
  * @param {string} base
11
- * @returns {toa.core.extensions.Factory}
20
+ * @returns {Promise<toa.core.extensions.Factory>}
12
21
  */
13
- const resolve = (reference, base = process.cwd()) => {
22
+ export const resolve = async (reference, base = process.cwd()) => {
14
23
  const path = find(reference, base)
15
24
 
16
- if (instances[path] === undefined) instances[path] = create(path)
25
+ loading[path] ??= create(path)
26
+ instances[path] = await loading[path]
17
27
 
18
28
  return instances[path]
19
29
  }
20
30
 
21
- const create = (path) => {
22
- const { Factory } = require(path)
31
+ /**
32
+ * The factory of an extension already loaded. Everything that decorates what a
33
+ * component is made of runs after its extensions are loaded, and stays
34
+ * synchronous.
35
+ *
36
+ * @param {string} reference
37
+ * @param {string} base
38
+ * @returns {toa.core.extensions.Factory}
39
+ */
40
+ export const instance = (reference, base = process.cwd()) => {
41
+ const factory = instances[find(reference, base)]
42
+
43
+ if (factory === undefined) throw new Error(`Extension '${reference}' is not loaded`)
44
+
45
+ return factory
46
+ }
47
+
48
+ const create = async (path) => {
49
+ const { Factory } = await import(pathToFileURL(require.resolve(path)).href)
23
50
 
24
51
  return new Factory(boot)
25
52
  }
26
-
27
- exports.resolve = resolve
@@ -1,12 +1,10 @@
1
- 'use strict'
2
-
3
- const { instances } = require('./instances')
1
+ import { instances } from './instances.js'
4
2
 
5
3
  /**
6
4
  * @param {toa.core.Storage} storage
7
5
  * @returns {toa.core.Storage}
8
6
  */
9
- const storage = (storage) => {
7
+ export const storage = (storage) => {
10
8
  let decorated = storage
11
9
 
12
10
  for (const factory of Object.values(instances)) {
@@ -15,5 +13,3 @@ const storage = (storage) => {
15
13
 
16
14
  return decorated
17
15
  }
18
-
19
- exports.storage = storage
@@ -1,27 +1,23 @@
1
- 'use strict'
2
-
3
- const { resolve } = require('./resolve')
1
+ import { resolve } from './resolve.js'
4
2
 
5
3
  /**
6
4
  * @param {toa.norm.Component} manifest
7
5
  * @returns {toa.core.Connector[]}
8
6
  */
9
- const tenants = (manifest) => {
7
+ export const tenants = async (manifest) => {
10
8
  const tenants = []
11
9
 
12
10
  if (manifest.extensions === undefined) return tenants
13
11
 
14
12
  for (const [name, declaration] of Object.entries(manifest.extensions)) {
15
- const factory = resolve(name, manifest.path)
13
+ const factory = await resolve(name, manifest.path)
16
14
 
17
15
  if (factory.tenant === undefined) continue
18
16
 
19
- const tenant = factory.tenant(manifest.locator, declaration, manifest)
17
+ const tenant = await factory.tenant(manifest.locator, declaration, manifest)
20
18
 
21
19
  tenants.push(tenant)
22
20
  }
23
21
 
24
22
  return tenants
25
23
  }
26
-
27
- exports.tenants = tenants
package/src/guards.js CHANGED
@@ -1,9 +1,7 @@
1
- 'use strict'
1
+ import { Guard } from '@toa.io/core'
2
+ import * as boot from './index.js'
2
3
 
3
- const { Guard } = require('@toa.io/core')
4
- const boot = require('./index')
5
-
6
- async function guards(manifest, context) {
4
+ export async function guards(manifest, context) {
7
5
  if (manifest.guards === undefined)
8
6
  return
9
7
 
@@ -19,5 +17,3 @@ async function guards(manifest, context) {
19
17
  async function load(guard, name, context) {
20
18
  return await boot.bridge.guard(guard.bridge, guard.path, name, context)
21
19
  }
22
-
23
- exports.guards = guards
package/src/index.js CHANGED
@@ -1,48 +1,31 @@
1
- 'use strict'
1
+ // the environment is read at module scope elsewhere, so it is loaded first
2
+ import './env.js'
2
3
 
3
- require('./env')
4
+ import * as bindings from './bindings/index.js'
5
+ import * as bridge from './bridge.js'
6
+ import * as contract from './contract.js'
7
+ import * as discovery from './discovery.js'
8
+ import * as extensions from './extensions/index.js'
4
9
 
5
- const { call } = require('./call')
6
- const { cascade } = require('./cascade')
7
- const { component } = require('./component')
8
- const { composition } = require('./composition')
9
- const { context } = require('./context')
10
- const { emission } = require('./emission')
11
- const { events } = require('./events')
12
- const { outbox } = require('./outbox')
13
- const { atomicity } = require('./atomicity')
14
- const { atom } = require('./atom')
15
- const { exposition } = require('./exposition')
16
- const { manifest } = require('./manifest')
17
- const { operation } = require('./operation')
18
- const { receivers, receive } = require('./receivers')
19
- const { remote } = require('./remote')
20
- const { storage } = require('./storage')
21
- const { guards } = require('./guards')
22
- const { rc } = require('./rc')
10
+ import { call } from './call.js'
11
+ import { cascade } from './cascade.js'
12
+ import { component } from './component.js'
13
+ import { composition } from './composition.js'
14
+ import { context } from './context.js'
15
+ import { emission } from './emission.js'
16
+ import { events } from './events.js'
17
+ import { outbox } from './outbox.js'
18
+ import { atomicity } from './atomicity.js'
19
+ import { atom } from './atom.js'
20
+ import { exposition } from './exposition.js'
21
+ import { manifest } from './manifest.js'
22
+ import { operation } from './operation.js'
23
+ import { receivers, receive } from './receivers.js'
24
+ import { remote } from './remote.js'
25
+ import { storage } from './storage.js'
26
+ import { guards } from './guards.js'
27
+ import { rc } from './rc.js'
23
28
 
24
- exports.bindings = require('./bindings')
25
- exports.bridge = require('./bridge')
26
- exports.contract = require('./contract')
27
- exports.discovery = require('./discovery')
28
- exports.extensions = require('./extensions')
29
+ export { call, cascade, component, composition, context, emission, events, outbox, atomicity, atom, exposition, manifest, operation, receivers, receive, remote, storage, guards, rc }
29
30
 
30
- exports.call = call
31
- exports.cascade = cascade
32
- exports.component = component
33
- exports.composition = composition
34
- exports.context = context
35
- exports.emission = emission
36
- exports.events = events
37
- exports.outbox = outbox
38
- exports.atomicity = atomicity
39
- exports.atom = atom
40
- exports.exposition = exposition
41
- exports.manifest = manifest
42
- exports.operation = operation
43
- exports.receivers = receivers
44
- exports.receive = receive
45
- exports.remote = remote
46
- exports.storage = storage
47
- exports.guards = guards
48
- exports.rc = rc
31
+ export { bindings, bridge, contract, discovery, extensions }
package/src/manifest.js CHANGED
@@ -1,14 +1,12 @@
1
- 'use strict'
1
+ import clone from 'clone-deep'
2
+ import { basename } from 'node:path'
3
+ import { merge } from '@toa.io/generic'
4
+ import { component as load } from '@toa.io/norm'
5
+ import { Locator } from '@toa.io/core'
2
6
 
3
- const clone = require('clone-deep')
4
- const { basename } = require('node:path')
5
- const { merge } = require('@toa.io/generic')
6
- const { component: load } = require('@toa.io/norm')
7
- const { Locator } = require('@toa.io/core')
7
+ import { span } from './span.js'
8
8
 
9
- const { span } = require('./span')
10
-
11
- const manifest = async (path, options = {}) => {
9
+ export const manifest = async (path, options = {}) => {
12
10
  options = merge(clone(options), DEFAULTS)
13
11
 
14
12
  const manifest = await span({ name: `manifest ${basename(path)}`, attributes: { path } },
@@ -21,8 +19,16 @@ const manifest = async (path, options = {}) => {
21
19
  }
22
20
  }
23
21
 
24
- const check = (binding) => require(binding).properties?.async === true
25
- const asyncBinding = options.bindings.find(check)
22
+ let asyncBinding
23
+
24
+ for (const binding of options.bindings) {
25
+ const { properties } = await import(binding)
26
+
27
+ if (properties?.async === true) {
28
+ asyncBinding = binding
29
+ break
30
+ }
31
+ }
26
32
 
27
33
  if (asyncBinding === undefined) throw new Error('Bindings override must contain at least one async binding')
28
34
 
@@ -53,5 +59,3 @@ const manifest = async (path, options = {}) => {
53
59
  }
54
60
 
55
61
  const DEFAULTS = {}
56
-
57
- exports.manifest = manifest
@@ -1,12 +1,12 @@
1
- 'use strict'
1
+ import { it, mock } from 'node:test'
2
+ import assert from 'node:assert/strict'
2
3
 
3
- const { generate } = require('randomstring')
4
+ import { generate } from 'randomstring'
4
5
 
5
- jest.mock('@toa.io/norm', () => ({
6
- component: () => mockComponent()
7
- }))
6
+ mock.module('@toa.io/norm', { namedExports: { component: () => mockComponent() } })
7
+
8
+ const { manifest } = await import('./manifest.js')
8
9
 
9
- const { manifest } = require('./manifest')
10
10
 
11
11
  const path = generate()
12
12
 
@@ -15,7 +15,7 @@ it('should not modify options', async () => {
15
15
 
16
16
  await manifest(path, options)
17
17
 
18
- expect(options.extensions.length).toStrictEqual(2)
18
+ assert.deepStrictEqual(options.extensions.length, 2)
19
19
  })
20
20
 
21
21
  function mockComponent () {
package/src/operation.js CHANGED
@@ -1,18 +1,8 @@
1
- 'use strict'
1
+ import { Transition, Observation, Assignment, Operation, Query, Effect, Unmanaged } from '@toa.io/core'
2
2
 
3
- const {
4
- Transition,
5
- Observation,
6
- Assignment,
7
- Operation,
8
- Query,
9
- Effect,
10
- Unmanaged
11
- } = require('@toa.io/core')
3
+ import * as boot from './index.js'
12
4
 
13
- const boot = require('./index')
14
-
15
- async function operation (manifest, endpoint, definition, context, scope, preflight) {
5
+ export async function operation (manifest, endpoint, definition, context, scope, preflight) {
16
6
  const cascade = await boot.cascade(manifest, endpoint, definition, context, preflight)
17
7
  const reply = boot.contract.reply(definition.output, definition.error)
18
8
  const input = definition.input
@@ -36,5 +26,3 @@ const TYPES = {
36
26
  effect: Effect,
37
27
  unmanaged: Unmanaged
38
28
  }
39
-
40
- exports.operation = operation
package/src/outbox.js CHANGED
@@ -1,8 +1,6 @@
1
- 'use strict'
1
+ import { Outbox } from '@toa.io/core'
2
2
 
3
- const { Outbox } = require('@toa.io/core')
4
-
5
- const boot = require('./index')
3
+ import * as boot from './index.js'
6
4
 
7
5
  /**
8
6
  * A component with no declared events has nothing to publish and therefore no outbox — the
@@ -12,10 +10,8 @@ const boot = require('./index')
12
10
  * @param {toa.core.Storage} [storage]
13
11
  * @param {toa.core.Emission} [emission]
14
12
  */
15
- const outbox = (manifest, storage, emission) => {
13
+ export const outbox = (manifest, storage, emission) => {
16
14
  if (emission === undefined) return
17
15
 
18
16
  return new Outbox(emission, storage, boot.atomicity(manifest.locator.id), {})
19
17
  }
20
-
21
- exports.outbox = outbox
package/src/rc.js CHANGED
@@ -1,9 +1,5 @@
1
- 'use strict'
1
+ import * as boot from './index.js'
2
2
 
3
- const boot = require('./index')
4
-
5
- async function rc (manifest, context) {
3
+ export async function rc (manifest, context) {
6
4
  return boot.bridge.rc(manifest.bridge, manifest.path, context)
7
5
  }
8
-
9
- exports.rc = rc
package/src/receivers.js CHANGED
@@ -1,11 +1,9 @@
1
- 'use strict'
1
+ import { Receiver, Locator } from '@toa.io/core'
2
2
 
3
- const { Receiver, Locator } = require('@toa.io/core')
3
+ import * as boot from './index.js'
4
+ import * as extensions from './extensions/index.js'
4
5
 
5
- const boot = require('./index')
6
- const extensions = require('./extensions')
7
-
8
- const receivers = async (manifest, component) => {
6
+ export const receivers = async (manifest, component) => {
9
7
  if (manifest.receivers === undefined) return []
10
8
 
11
9
  const receivers = []
@@ -20,12 +18,14 @@ const receivers = async (manifest, component) => {
20
18
  // the origin of the calls this receiver makes to its local operation
21
19
  const origin = { namespace: source.namespace, component: source.name, event }
22
20
 
23
- const bridge = definition.bridge !== undefined ? boot.bridge.receiver(definition.bridge, manifest.path, label) : undefined
21
+ const bridge = definition.bridge !== undefined
22
+ ? await boot.bridge.receiver(definition.bridge, manifest.path, label)
23
+ : undefined
24
24
  const receiver = new Receiver({ ...definition, label, destination, origin }, local, bridge)
25
25
  const decorator = extensions.receiver(receiver, manifest.locator)
26
26
 
27
27
  const transport = definition.binding ?? await resolveBinding(locator, label)
28
- const binding = boot.bindings.receive(transport, source, label, manifest.locator.id, decorator)
28
+ const binding = await boot.bindings.receive(transport, source, label, manifest.locator.id, decorator)
29
29
 
30
30
  binding.depends(component)
31
31
  receivers.push(binding)
@@ -34,7 +34,7 @@ const receivers = async (manifest, component) => {
34
34
  return receivers
35
35
  }
36
36
 
37
- async function receive (label, group, callback) {
37
+ export async function receive (label, group, callback) {
38
38
  if (callback === undefined) {
39
39
  callback = group
40
40
  group = undefined
@@ -43,7 +43,7 @@ async function receive (label, group, callback) {
43
43
  const locator = Locator.parse(label)
44
44
  const transport = await resolveBinding(locator, label)
45
45
 
46
- return boot.bindings.receive(transport, locator, label, group, callback)
46
+ return await boot.bindings.receive(transport, locator, label, group, callback)
47
47
  }
48
48
 
49
49
  /**
@@ -58,6 +58,3 @@ async function resolveBinding (locator, label) {
58
58
 
59
59
  return events[event].binding
60
60
  }
61
-
62
- exports.receivers = receivers
63
- exports.receive = receive
package/src/remote.js CHANGED
@@ -1,17 +1,15 @@
1
- 'use strict'
1
+ import { console } from 'openspan'
2
+ import { Remote } from '@toa.io/core'
3
+ import { remap } from '@toa.io/generic'
2
4
 
3
- const { console } = require('openspan')
4
- const { Remote } = require('@toa.io/core')
5
- const { remap } = require('@toa.io/generic')
6
-
7
- const boot = require('./index')
5
+ import * as boot from './index.js'
8
6
 
9
7
  /**
10
8
  * @param {toa.core.Locator} locator
11
9
  * @param {toa.core.Source} [source] the origin stamped on every call made through this remote
12
10
  * @param {toa.norm.Component} [manifest] skips discovery when the manifest is already known
13
11
  */
14
- const remote = async (locator, source, manifest) => {
12
+ export const remote = async (locator, source, manifest) => {
15
13
  let discovery
16
14
 
17
15
  if (manifest === undefined) {
@@ -21,10 +19,11 @@ const remote = async (locator, source, manifest) => {
21
19
  manifest = await discovery.lookup(locator)
22
20
  }
23
21
 
22
+ // a call binds its consumers, which are loaded rather than required
24
23
  const calls = manifest.operations === undefined
25
24
  ? {}
26
- : remap(manifest.operations,
27
- (definition, endpoint) => boot.call(locator, endpoint, definition, manifest.entity, source))
25
+ : await settle(remap(manifest.operations,
26
+ (definition, endpoint) => boot.call(locator, endpoint, definition, manifest.entity, source)))
28
27
 
29
28
  const remote = new Remote(locator, calls)
30
29
 
@@ -35,4 +34,10 @@ const remote = async (locator, source, manifest) => {
35
34
  return remote
36
35
  }
37
36
 
38
- exports.remote = remote
37
+ /** An object whose values are promises, as an object of what they resolve to. */
38
+ async function settle (object) {
39
+ const entries = Object.entries(object)
40
+ const values = await Promise.all(entries.map(([, promise]) => promise))
41
+
42
+ return Object.fromEntries(entries.map(([key], index) => [key, values[index]]))
43
+ }
package/src/span.js CHANGED
@@ -1,6 +1,4 @@
1
- 'use strict'
2
-
3
- const { console, traces } = require('openspan')
1
+ import { console, traces } from 'openspan'
4
2
 
5
3
  const enabled = process.env.TOA_BOOT_TRACE === '1'
6
4
 
@@ -16,6 +14,4 @@ if (enabled) traces({ exporters: { console: {} } })
16
14
  * @param {() => Promise<any>} task
17
15
  * @returns {Promise<any>}
18
16
  */
19
- const span = async (options, task) => enabled ? console.span(options, task) : task()
20
-
21
- exports.span = span
17
+ export const span = async (options, task) => enabled ? console.span(options, task) : task()