@toa.io/boot 0.8.2-dev.0 → 0.20.0-dev.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toa.io/boot",
3
- "version": "0.8.2-dev.0",
3
+ "version": "0.20.0-dev.10",
4
4
  "description": "Toa Boot",
5
5
  "author": "temich <tema.gurtovoy@gmail.com>",
6
6
  "homepage": "https://github.com/toa-io/toa#readme",
@@ -19,12 +19,13 @@
19
19
  "test": "echo \"Error: run tests from root\" && exit 1"
20
20
  },
21
21
  "dependencies": {
22
- "@toa.io/core": "0.8.1",
23
- "@toa.io/filesystem": "0.7.2",
24
- "@toa.io/generic": "0.9.0",
25
- "@toa.io/norm": "0.10.1-dev.0",
26
- "@toa.io/schema": "0.7.3",
27
- "clone-deep": "4.0.1"
22
+ "@toa.io/core": "0.20.0-dev.10",
23
+ "@toa.io/filesystem": "0.20.0-dev.10",
24
+ "@toa.io/generic": "0.20.0-dev.10",
25
+ "@toa.io/norm": "0.20.0-dev.10",
26
+ "@toa.io/schema": "0.20.0-dev.10",
27
+ "clone-deep": "4.0.1",
28
+ "dotenv": "16.1.1"
28
29
  },
29
- "gitHead": "7f1fdbfe3aa33eb4a06cb1a33d15be18854bcd88"
30
+ "gitHead": "cd3ffb1ae1af014f13a62ef9fc8ada58d8688e4a"
30
31
  }
package/src/component.js CHANGED
@@ -11,6 +11,8 @@ const boot = require('./index')
11
11
  * @returns {Promise<toa.core.Component>}
12
12
  */
13
13
  const component = async (manifest) => {
14
+ boot.extensions.load(manifest)
15
+
14
16
  const locator = new Locator(manifest.name, manifest.namespace)
15
17
  const storage = boot.storage(manifest)
16
18
  const context = await boot.context(manifest)
@@ -10,8 +10,6 @@ async function composition (paths, options) {
10
10
  /** @type {toa.norm.Component[]} */
11
11
  const manifests = await Promise.all(paths.map((path) => boot.manifest(path, options)))
12
12
 
13
- boot.extensions.load(manifests, options.extensions)
14
-
15
13
  /** @type {toa.core.Connector[]} */
16
14
  const tenants = await Promise.all(manifests.map(boot.extensions.tenants))
17
15
 
package/src/contract.js CHANGED
@@ -5,14 +5,14 @@ const { Schema } = require('@toa.io/schema')
5
5
 
6
6
  const request = (definition) => {
7
7
  const request = Request.schema(definition)
8
- const schema = new Schema(request)
8
+ const schema = new Schema(request, { removeAdditional: true }) // inputs soft
9
9
 
10
10
  return new Request(schema)
11
11
  }
12
12
 
13
13
  const reply = (output, error) => {
14
14
  const reply = Reply.schema(output, error)
15
- const schema = new Schema(reply)
15
+ const schema = new Schema(reply) // outputs strict
16
16
 
17
17
  return new Reply(schema)
18
18
  }
package/src/deployment.js CHANGED
@@ -9,10 +9,26 @@ const { context: load } = require('@toa.io/norm')
9
9
  * @returns {Promise<toa.deployment.Operator>}
10
10
  */
11
11
  const deployment = async (path, environment) => {
12
- const context = await load(path, environment)
13
- const factory = new Factory(context)
12
+ const factory = await getFactory(path, environment)
14
13
 
15
14
  return factory.operator()
16
15
  }
17
16
 
17
+ /**
18
+ * @param {string} path
19
+ * @returns {Promise<toa.deployment.Registry>}
20
+ */
21
+ const registry = async (path) => {
22
+ const factory = await getFactory(path)
23
+
24
+ return factory.registry()
25
+ }
26
+
27
+ async function getFactory (path, environment) {
28
+ const context = await load(path, environment)
29
+
30
+ return new Factory(context)
31
+ }
32
+
18
33
  exports.deployment = deployment
34
+ exports.registry = registry
package/src/env.js ADDED
@@ -0,0 +1,15 @@
1
+ 'use strict'
2
+
3
+ const { file } = require('@toa.io/filesystem')
4
+
5
+ async function setup () {
6
+ const path = await file.dot('env')
7
+
8
+ if (path !== undefined) require('dotenv').config({ path })
9
+ }
10
+
11
+ if (!('TOA_ENV' in process.env)) {
12
+ (async () => {
13
+ await setup()
14
+ })()
15
+ }
@@ -3,25 +3,12 @@
3
3
  const { resolve } = require('./resolve')
4
4
 
5
5
  /**
6
- * @param {toa.norm.Component[]} manifests
7
- * @param {string[]} defaults
6
+ * @param {toa.norm.Component} manifest
8
7
  */
9
- const load = (manifests, defaults) => {
10
- scan(manifests)
11
- defaults.map((name) => resolve(name))
12
- }
13
-
14
- /**
15
- * @param {toa.norm.Component[]} manifests
16
- */
17
- const scan = (manifests) => {
18
- for (const manifest of manifests) {
19
- if (manifest.extensions === undefined) continue
8
+ const load = (manifest) => {
9
+ if (manifest.extensions === undefined) return
20
10
 
21
- for (const name of Object.keys(manifest.extensions)) {
22
- resolve(name, manifest.path)
23
- }
24
- }
11
+ for (const name of Object.keys(manifest.extensions)) resolve(name, manifest.path)
25
12
  }
26
13
 
27
14
  exports.load = load
package/src/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  'use strict'
2
2
 
3
+ require('./env')
4
+
3
5
  const { call } = require('./call')
4
6
  const { cascade } = require('./cascade')
5
7
  const { component } = require('./component')
6
8
  const { composition } = require('./composition')
7
9
  const { context } = require('./context')
8
- const { deployment } = require('./deployment')
10
+ const { deployment, registry } = require('./deployment')
9
11
  const { emission } = require('./emission')
10
12
  const { exposition } = require('./exposition')
11
13
  const { images } = require('./images')
@@ -33,5 +35,6 @@ exports.images = images
33
35
  exports.manifest = manifest
34
36
  exports.operation = operation
35
37
  exports.receivers = receivers
38
+ exports.registry = registry
36
39
  exports.remote = remote
37
40
  exports.storage = storage
package/src/manifest.js CHANGED
@@ -37,11 +37,14 @@ const manifest = async (path, options = {}) => {
37
37
  if (!(extension in manifest.extensions)) manifest.extensions[extension] = null
38
38
  }
39
39
 
40
+ if ('storage' in options && 'entity' in manifest) manifest.entity.storage = options.storage
41
+
40
42
  manifest.locator = new Locator(manifest.name, manifest.namespace)
41
43
 
42
44
  return manifest
43
45
  }
44
46
 
47
+ /** @type {toa.boot.composition.Options} */
45
48
  const DEFAULTS = {
46
49
  extensions: ['@toa.io/extensions.sampling', '@toa.io/extensions.state']
47
50
  }
package/src/operation.js CHANGED
@@ -6,11 +6,14 @@ const boot = require('./index')
6
6
 
7
7
  const operation = (manifest, endpoint, definition, context, scope) => {
8
8
  const cascade = boot.cascade(manifest, endpoint, definition, context)
9
- const contract = boot.contract.reply(definition.output, definition.error)
9
+ const reply = boot.contract.reply(definition.output, definition.error)
10
+ const input = definition.input
11
+ const request = boot.contract.request({ input })
12
+ const contracts = { reply, request }
10
13
  const query = new Query(manifest.entity.schema.properties)
11
14
  const Type = TYPES[definition.type]
12
15
 
13
- return new Type(cascade, scope, contract, query, definition)
16
+ return new Type(cascade, scope, contracts, query, definition)
14
17
  }
15
18
 
16
19
  const TYPES = {
package/src/receivers.js CHANGED
@@ -12,7 +12,7 @@ const receivers = async (manifest, runtime) => {
12
12
 
13
13
  for (const [label, definition] of Object.entries(manifest.receivers)) {
14
14
  const local = await boot.remote(manifest.locator, manifest)
15
- const bridge = boot.bridge.receiver(definition.bridge, manifest.path, label)
15
+ const bridge = definition.bridge !== undefined ? boot.bridge.receiver(definition.bridge, manifest.path, label) : undefined
16
16
  const receiver = new Receiver(definition, local, bridge)
17
17
  const decorator = extensions.receiver(receiver, manifest.locator)
18
18
 
@@ -6,6 +6,7 @@ declare namespace toa.boot {
6
6
 
7
7
  type Options = {
8
8
  bindings?: string[]
9
+ storage?: string
9
10
  extensions?: string[]
10
11
  }
11
12