@toa.io/norm 1.0.0-alpha.41 → 1.0.0-alpha.43
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 +6 -7
- package/src/.component/defaults.js +0 -1
- package/src/.component/dereference.js +6 -1
- package/src/.component/schema.yaml +19 -10
- package/src/.component/validate.js +3 -3
- package/src/.context/schema.yaml +6 -3
- package/src/.context/validate.js +2 -5
- package/src/component.js +1 -1
- package/test/component/validate.test.js +6 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/norm",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.43",
|
|
4
4
|
"description": "Toa declarations normalization and validation",
|
|
5
5
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/toa-io/toa#readme",
|
|
@@ -20,11 +20,10 @@
|
|
|
20
20
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@toa.io/core": "1.0.0-alpha.
|
|
24
|
-
"@toa.io/generic": "1.0.0-alpha.
|
|
25
|
-
"@toa.io/
|
|
26
|
-
"@toa.io/
|
|
27
|
-
"@toa.io/yaml": "1.0.0-alpha.41"
|
|
23
|
+
"@toa.io/core": "1.0.0-alpha.43",
|
|
24
|
+
"@toa.io/generic": "1.0.0-alpha.43",
|
|
25
|
+
"@toa.io/schemas": "1.0.0-alpha.43",
|
|
26
|
+
"@toa.io/yaml": "1.0.0-alpha.43"
|
|
28
27
|
},
|
|
29
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "c559729a642603a9d5b04ebe95fa01b4915b5c9e"
|
|
30
29
|
}
|
|
@@ -25,7 +25,12 @@ const createResolver = (properties) => (property) => {
|
|
|
25
25
|
function operations (manifest, resolver) {
|
|
26
26
|
for (const operation of Object.values(manifest.operations)) {
|
|
27
27
|
if (operation.input !== undefined) operation.input = schema(operation.input, resolver)
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
if (operation.output !== undefined)
|
|
30
|
+
if (Array.isArray(operation.output) && operation.output.length === 1)
|
|
31
|
+
operation.output = [schema(operation.output[0], resolver)]
|
|
32
|
+
else
|
|
33
|
+
operation.output = schema(operation.output, resolver)
|
|
29
34
|
}
|
|
30
35
|
|
|
31
36
|
// forwarding
|
|
@@ -38,15 +38,19 @@ properties:
|
|
|
38
38
|
type: object
|
|
39
39
|
properties:
|
|
40
40
|
id:
|
|
41
|
-
|
|
41
|
+
type: string
|
|
42
|
+
pattern: ^([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?)(\.([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?))$
|
|
42
43
|
label:
|
|
43
|
-
|
|
44
|
+
type: string
|
|
45
|
+
pattern: ^([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?)(-([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?))*$
|
|
44
46
|
|
|
45
47
|
name:
|
|
46
|
-
|
|
48
|
+
type: string
|
|
49
|
+
pattern: ^[a-zA-Z]([a-zA-Z0-9]{1,31})?$
|
|
47
50
|
|
|
48
51
|
namespace:
|
|
49
|
-
|
|
52
|
+
type: string
|
|
53
|
+
pattern: ^[a-zA-Z]([a-zA-Z0-9]{1,31})?$
|
|
50
54
|
default: 'default'
|
|
51
55
|
not:
|
|
52
56
|
oneOf:
|
|
@@ -68,7 +72,7 @@ properties:
|
|
|
68
72
|
type: string
|
|
69
73
|
default: '@toa.io/storages.mongodb'
|
|
70
74
|
schema:
|
|
71
|
-
$ref:
|
|
75
|
+
$ref: https://json-schema.org/draft/2019-09/schema
|
|
72
76
|
type: object
|
|
73
77
|
properties:
|
|
74
78
|
type:
|
|
@@ -135,9 +139,14 @@ properties:
|
|
|
135
139
|
bindings:
|
|
136
140
|
$ref: '#/properties/bindings'
|
|
137
141
|
input:
|
|
138
|
-
$ref:
|
|
142
|
+
$ref: https://json-schema.org/draft/2019-09/schema
|
|
139
143
|
output:
|
|
140
|
-
$ref:
|
|
144
|
+
$ref: https://json-schema.org/draft/2019-09/schema
|
|
145
|
+
default: { }
|
|
146
|
+
errors:
|
|
147
|
+
type: array
|
|
148
|
+
items:
|
|
149
|
+
type: string
|
|
141
150
|
query:
|
|
142
151
|
type: boolean
|
|
143
152
|
required: [type, scope, bindings]
|
|
@@ -213,7 +222,7 @@ properties:
|
|
|
213
222
|
events:
|
|
214
223
|
type: object
|
|
215
224
|
propertyNames:
|
|
216
|
-
$ref: '
|
|
225
|
+
$ref: '#/definitions/name'
|
|
217
226
|
patternProperties:
|
|
218
227
|
'.*':
|
|
219
228
|
type: object
|
|
@@ -240,13 +249,13 @@ properties:
|
|
|
240
249
|
type: object
|
|
241
250
|
properties:
|
|
242
251
|
operation:
|
|
243
|
-
$ref: '
|
|
252
|
+
$ref: '#/definitions/name'
|
|
244
253
|
bridge:
|
|
245
254
|
type: string
|
|
246
255
|
binding:
|
|
247
256
|
type: string
|
|
248
257
|
source:
|
|
249
|
-
$ref: '
|
|
258
|
+
$ref: '#/definitions/name'
|
|
250
259
|
not:
|
|
251
260
|
const: context
|
|
252
261
|
path:
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
const path = require('node:path')
|
|
4
4
|
|
|
5
5
|
const { load } = require('@toa.io/yaml')
|
|
6
|
-
const
|
|
6
|
+
const schemas = require('@toa.io/schemas')
|
|
7
7
|
|
|
8
8
|
const object = load.sync(path.resolve(__dirname, 'schema.yaml'))
|
|
9
|
-
const schema =
|
|
9
|
+
const schema = schemas.schema(object)
|
|
10
10
|
|
|
11
11
|
const validate = (manifest) => {
|
|
12
12
|
const error = schema.fit(manifest)
|
|
13
13
|
|
|
14
|
-
if (error) throw
|
|
14
|
+
if (error) throw error
|
|
15
15
|
|
|
16
16
|
if (manifest.events !== undefined) events(manifest)
|
|
17
17
|
if (manifest.receivers !== undefined) receivers(manifest)
|
package/src/.context/schema.yaml
CHANGED
|
@@ -6,7 +6,8 @@ properties:
|
|
|
6
6
|
version:
|
|
7
7
|
type: string
|
|
8
8
|
name:
|
|
9
|
-
|
|
9
|
+
type: string
|
|
10
|
+
pattern: ^([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?)(-([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?))*$
|
|
10
11
|
description:
|
|
11
12
|
type: string
|
|
12
13
|
packages:
|
|
@@ -54,14 +55,16 @@ properties:
|
|
|
54
55
|
type: object
|
|
55
56
|
properties:
|
|
56
57
|
name:
|
|
57
|
-
|
|
58
|
+
type: string
|
|
59
|
+
pattern: ^[a-zA-Z]([a-zA-Z0-9]{1,31})?$
|
|
58
60
|
image:
|
|
59
61
|
type: string
|
|
60
62
|
components:
|
|
61
63
|
type: array
|
|
62
64
|
minItems: 1
|
|
63
65
|
items:
|
|
64
|
-
|
|
66
|
+
type: string
|
|
67
|
+
pattern: ^([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?)(\.([a-zA-Z]+([_a-zA-Z0-9]*[a-zA-Z0-9]+)?))$
|
|
65
68
|
required: [name, components]
|
|
66
69
|
annotations:
|
|
67
70
|
type: object
|
package/src/.context/validate.js
CHANGED
|
@@ -3,15 +3,12 @@
|
|
|
3
3
|
const { resolve } = require('node:path')
|
|
4
4
|
|
|
5
5
|
const { load } = require('@toa.io/yaml')
|
|
6
|
-
const
|
|
6
|
+
const schemas = require('@toa.io/schemas')
|
|
7
7
|
|
|
8
8
|
const path = resolve(__dirname, 'schema.yaml')
|
|
9
9
|
const object = load.sync(path)
|
|
10
|
-
const schema =
|
|
10
|
+
const schema = schemas.schema(object)
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
* @param {toa.norm.context.Declaration} context
|
|
14
|
-
*/
|
|
15
12
|
const validate = (context) => {
|
|
16
13
|
schema.validate(context)
|
|
17
14
|
}
|
package/src/component.js
CHANGED
|
@@ -33,7 +33,7 @@ const load = async (path, base, proto = false) => {
|
|
|
33
33
|
if (base !== undefined) path = find(path, base, MANIFEST)
|
|
34
34
|
|
|
35
35
|
const file = join(path, MANIFEST)
|
|
36
|
-
const manifest =
|
|
36
|
+
const manifest = await yaml(file) ?? {}
|
|
37
37
|
|
|
38
38
|
manifest.path = path
|
|
39
39
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// noinspection JSUnresolvedVariable
|
|
2
|
-
|
|
3
1
|
'use strict'
|
|
4
2
|
|
|
5
3
|
const clone = require('clone-deep')
|
|
@@ -20,13 +18,13 @@ it('should be ok', () => {
|
|
|
20
18
|
it('should provide error', () => {
|
|
21
19
|
manifest.foo = 'bar'
|
|
22
20
|
|
|
23
|
-
expect(() => validate(manifest)).toThrow(
|
|
21
|
+
expect(() => validate(manifest)).toThrow()
|
|
24
22
|
})
|
|
25
23
|
|
|
26
24
|
it('should not have additional properties', () => {
|
|
27
25
|
manifest.foo = 'bar'
|
|
28
26
|
|
|
29
|
-
expect(() => validate(manifest)).toThrow(
|
|
27
|
+
expect(() => validate(manifest)).toThrow()
|
|
30
28
|
})
|
|
31
29
|
|
|
32
30
|
describe('namespace', () => {
|
|
@@ -83,13 +81,13 @@ describe('entity', () => {
|
|
|
83
81
|
|
|
84
82
|
it('should not have additional properties', () => {
|
|
85
83
|
manifest.entity.foo = 'bar'
|
|
86
|
-
expect(() => validate(manifest)).toThrow(
|
|
84
|
+
expect(() => validate(manifest)).toThrow()
|
|
87
85
|
})
|
|
88
86
|
|
|
89
87
|
describe('schema', () => {
|
|
90
88
|
it('should be required', () => {
|
|
91
89
|
delete manifest.entity.schema
|
|
92
|
-
expect(() => validate(manifest)).toThrow(
|
|
90
|
+
expect(() => validate(manifest)).toThrow()
|
|
93
91
|
})
|
|
94
92
|
|
|
95
93
|
it('should be JSON schema object', () => {
|
|
@@ -99,7 +97,7 @@ describe('entity', () => {
|
|
|
99
97
|
|
|
100
98
|
it('should be JSON schema object of type object', () => {
|
|
101
99
|
manifest.entity.schema = { type: 'integer' }
|
|
102
|
-
expect(() => validate(manifest)).toThrow(/must be equal to constant
|
|
100
|
+
expect(() => validate(manifest)).toThrow(/must be equal to constant/)
|
|
103
101
|
|
|
104
102
|
manifest.entity.schema = {}
|
|
105
103
|
validate(manifest)
|
|
@@ -154,7 +152,7 @@ describe('operations', () => {
|
|
|
154
152
|
|
|
155
153
|
it('should not have additional properties', () => {
|
|
156
154
|
manifest.operations.get.foo = 'bar'
|
|
157
|
-
expect(() => validate(manifest)).toThrow(
|
|
155
|
+
expect(() => validate(manifest)).toThrow()
|
|
158
156
|
})
|
|
159
157
|
|
|
160
158
|
it('should have type (transition or observation)', () => {
|