decoders 2.0.2 → 2.0.4
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 +13 -0
- package/Decoder.js +0 -10
- package/Decoder.mjs +0 -7
- package/_utils.js +0 -11
- package/_utils.mjs +0 -8
- package/annotate.js +0 -23
- package/annotate.mjs +0 -17
- package/format.js +0 -24
- package/format.mjs +0 -20
- package/index.js +0 -22
- package/lib/arrays.js +0 -12
- package/lib/arrays.mjs +0 -9
- package/lib/basics.js +2 -22
- package/lib/basics.mjs +2 -17
- package/lib/booleans.js +0 -4
- package/lib/dates.js +0 -5
- package/lib/dates.mjs +0 -2
- package/lib/json.js +0 -8
- package/lib/numbers.js +0 -1
- package/lib/objects.js +0 -23
- package/lib/objects.mjs +0 -19
- package/lib/strings.js +1 -5
- package/lib/strings.js.flow +1 -1
- package/lib/strings.mjs +1 -1
- package/lib/unions.js +0 -14
- package/lib/unions.mjs +0 -8
- package/lib/utilities.js +0 -4
- package/lib/utilities.mjs +0 -2
- package/package.json +2 -1
- package/result.d.ts +2 -2
package/index.js
CHANGED
|
@@ -2,13 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true
|
|
4
4
|
exports.uuidv4 = exports.uuidv1 = exports.uuid = exports.url = exports.unknown = exports.undefined_ = exports.tuple = exports.truthy = exports.taggedUnion = exports.string = exports.set = exports.regex = exports.prep = exports.positiveNumber = exports.positiveInteger = exports.pojo = exports.poja = exports.optional = exports.oneOf = exports.object = exports.numericBoolean = exports.number = exports.nullable = exports.null_ = exports.nonEmptyString = exports.nonEmptyArray = exports.never = exports.mixed = exports.maybe = exports.mapping = exports.lazy = exports.jsonObject = exports.jsonArray = exports.json = exports.iso8601 = exports.integer = exports.instanceOf = exports.inexact = exports.httpsUrl = exports.hardcoded = exports.fail = exports.exact = exports.email = exports.either = exports.dict = exports.define = exports.date = exports.constant = exports['boolean'] = exports.array = exports.anyNumber = exports.always = void 0
|
|
5
|
-
|
|
6
5
|
var _Decoder = require('./Decoder')
|
|
7
|
-
|
|
8
6
|
exports.define = _Decoder.define
|
|
9
|
-
|
|
10
7
|
var _basics = require('./lib/basics')
|
|
11
|
-
|
|
12
8
|
exports.always = _basics.always
|
|
13
9
|
exports.constant = _basics.constant
|
|
14
10
|
exports.hardcoded = _basics.hardcoded
|
|
@@ -19,43 +15,31 @@ exports.null_ = _basics.null_
|
|
|
19
15
|
exports.optional = _basics.optional
|
|
20
16
|
exports.undefined_ = _basics.undefined_
|
|
21
17
|
exports.unknown = _basics.unknown
|
|
22
|
-
|
|
23
18
|
var _arrays = require('./lib/arrays')
|
|
24
|
-
|
|
25
19
|
exports.array = _arrays.array
|
|
26
20
|
exports.nonEmptyArray = _arrays.nonEmptyArray
|
|
27
21
|
exports.poja = _arrays.poja
|
|
28
22
|
exports.set = _arrays.set
|
|
29
23
|
exports.tuple = _arrays.tuple
|
|
30
|
-
|
|
31
24
|
var _booleans = require('./lib/booleans')
|
|
32
|
-
|
|
33
25
|
exports['boolean'] = _booleans['boolean']
|
|
34
26
|
exports.numericBoolean = _booleans.numericBoolean
|
|
35
27
|
exports.truthy = _booleans.truthy
|
|
36
|
-
|
|
37
28
|
var _dates = require('./lib/dates')
|
|
38
|
-
|
|
39
29
|
exports.date = _dates.date
|
|
40
30
|
exports.iso8601 = _dates.iso8601
|
|
41
|
-
|
|
42
31
|
var _objects = require('./lib/objects')
|
|
43
|
-
|
|
44
32
|
exports.dict = _objects.dict
|
|
45
33
|
exports.exact = _objects.exact
|
|
46
34
|
exports.inexact = _objects.inexact
|
|
47
35
|
exports.mapping = _objects.mapping
|
|
48
36
|
exports.object = _objects.object
|
|
49
37
|
exports.pojo = _objects.pojo
|
|
50
|
-
|
|
51
38
|
var _unions = require('./lib/unions')
|
|
52
|
-
|
|
53
39
|
exports.either = _unions.either
|
|
54
40
|
exports.oneOf = _unions.oneOf
|
|
55
41
|
exports.taggedUnion = _unions.taggedUnion
|
|
56
|
-
|
|
57
42
|
var _strings = require('./lib/strings')
|
|
58
|
-
|
|
59
43
|
exports.email = _strings.email
|
|
60
44
|
exports.httpsUrl = _strings.httpsUrl
|
|
61
45
|
exports.nonEmptyString = _strings.nonEmptyString
|
|
@@ -65,25 +49,19 @@ exports.url = _strings.url
|
|
|
65
49
|
exports.uuid = _strings.uuid
|
|
66
50
|
exports.uuidv1 = _strings.uuidv1
|
|
67
51
|
exports.uuidv4 = _strings.uuidv4
|
|
68
|
-
|
|
69
52
|
var _utilities = require('./lib/utilities')
|
|
70
|
-
|
|
71
53
|
exports.fail = _utilities.fail
|
|
72
54
|
exports.instanceOf = _utilities.instanceOf
|
|
73
55
|
exports.lazy = _utilities.lazy
|
|
74
56
|
exports.never = _utilities.never
|
|
75
57
|
exports.prep = _utilities.prep
|
|
76
|
-
|
|
77
58
|
var _numbers = require('./lib/numbers')
|
|
78
|
-
|
|
79
59
|
exports.anyNumber = _numbers.anyNumber
|
|
80
60
|
exports.integer = _numbers.integer
|
|
81
61
|
exports.number = _numbers.number
|
|
82
62
|
exports.positiveInteger = _numbers.positiveInteger
|
|
83
63
|
exports.positiveNumber = _numbers.positiveNumber
|
|
84
|
-
|
|
85
64
|
var _json = require('./lib/json')
|
|
86
|
-
|
|
87
65
|
exports.json = _json.json
|
|
88
66
|
exports.jsonObject = _json.jsonObject
|
|
89
67
|
exports.jsonArray = _json.jsonArray
|
package/lib/arrays.js
CHANGED
|
@@ -6,38 +6,30 @@ exports.nonEmptyArray = nonEmptyArray
|
|
|
6
6
|
exports.poja = void 0
|
|
7
7
|
exports.set = set
|
|
8
8
|
exports.tuple = void 0
|
|
9
|
-
|
|
10
9
|
var _annotate = require('../annotate')
|
|
11
|
-
|
|
12
10
|
var _Decoder = require('../Decoder')
|
|
13
11
|
|
|
14
12
|
var poja = (0, _Decoder.define)(function (blob, ok, err) {
|
|
15
13
|
if (!Array.isArray(blob)) {
|
|
16
14
|
return err('Must be an array')
|
|
17
15
|
}
|
|
18
|
-
|
|
19
16
|
return ok(blob.slice())
|
|
20
17
|
})
|
|
21
18
|
|
|
22
19
|
exports.poja = poja
|
|
23
|
-
|
|
24
20
|
function all(items, blobs, ok, err) {
|
|
25
21
|
var results = []
|
|
26
|
-
|
|
27
22
|
for (var index = 0; index < items.length; ++index) {
|
|
28
23
|
var result = items[index]
|
|
29
|
-
|
|
30
24
|
if (result.ok) {
|
|
31
25
|
results.push(result.value)
|
|
32
26
|
} else {
|
|
33
27
|
var ann = result.error
|
|
34
|
-
|
|
35
28
|
var clone = [].concat(blobs)
|
|
36
29
|
clone.splice(index, 1, (0, _annotate.annotate)(ann, ann.text ? ann.text + ' (at index ' + index + ')' : 'index ' + index))
|
|
37
30
|
return err((0, _annotate.annotate)(clone))
|
|
38
31
|
}
|
|
39
32
|
}
|
|
40
|
-
|
|
41
33
|
return ok(results)
|
|
42
34
|
}
|
|
43
35
|
|
|
@@ -59,7 +51,6 @@ function set(decoder) {
|
|
|
59
51
|
return new Set(items)
|
|
60
52
|
})
|
|
61
53
|
}
|
|
62
|
-
|
|
63
54
|
var ntuple = function ntuple(n) {
|
|
64
55
|
return poja.refine(function (arr) {
|
|
65
56
|
return arr.length === n
|
|
@@ -70,13 +61,11 @@ function _tuple() {
|
|
|
70
61
|
for (var _len = arguments.length, decoders = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
71
62
|
decoders[_key] = arguments[_key]
|
|
72
63
|
}
|
|
73
|
-
|
|
74
64
|
return ntuple(decoders.length).then(function (blobs, ok, err) {
|
|
75
65
|
var allOk = true
|
|
76
66
|
var rvs = decoders.map(function (decoder, i) {
|
|
77
67
|
var blob = blobs[i]
|
|
78
68
|
var result = decoder.decode(blob)
|
|
79
|
-
|
|
80
69
|
if (result.ok) {
|
|
81
70
|
return result.value
|
|
82
71
|
} else {
|
|
@@ -84,7 +73,6 @@ function _tuple() {
|
|
|
84
73
|
return result.error
|
|
85
74
|
}
|
|
86
75
|
})
|
|
87
|
-
|
|
88
76
|
if (allOk) {
|
|
89
77
|
return ok(rvs)
|
|
90
78
|
} else {
|
package/lib/arrays.mjs
CHANGED
|
@@ -5,27 +5,22 @@ export var poja = define(function (blob, ok, err) {
|
|
|
5
5
|
if (!Array.isArray(blob)) {
|
|
6
6
|
return err('Must be an array')
|
|
7
7
|
}
|
|
8
|
-
|
|
9
8
|
return ok(blob.slice())
|
|
10
9
|
})
|
|
11
10
|
|
|
12
11
|
function all(items, blobs, ok, err) {
|
|
13
12
|
var results = []
|
|
14
|
-
|
|
15
13
|
for (var index = 0; index < items.length; ++index) {
|
|
16
14
|
var result = items[index]
|
|
17
|
-
|
|
18
15
|
if (result.ok) {
|
|
19
16
|
results.push(result.value)
|
|
20
17
|
} else {
|
|
21
18
|
var ann = result.error
|
|
22
|
-
|
|
23
19
|
var clone = [].concat(blobs)
|
|
24
20
|
clone.splice(index, 1, annotate(ann, ann.text ? ann.text + ' (at index ' + index + ')' : 'index ' + index))
|
|
25
21
|
return err(annotate(clone))
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
|
-
|
|
29
24
|
return ok(results)
|
|
30
25
|
}
|
|
31
26
|
|
|
@@ -47,7 +42,6 @@ export function set(decoder) {
|
|
|
47
42
|
return new Set(items)
|
|
48
43
|
})
|
|
49
44
|
}
|
|
50
|
-
|
|
51
45
|
var ntuple = function ntuple(n) {
|
|
52
46
|
return poja.refine(function (arr) {
|
|
53
47
|
return arr.length === n
|
|
@@ -58,13 +52,11 @@ function _tuple() {
|
|
|
58
52
|
for (var _len = arguments.length, decoders = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
59
53
|
decoders[_key] = arguments[_key]
|
|
60
54
|
}
|
|
61
|
-
|
|
62
55
|
return ntuple(decoders.length).then(function (blobs, ok, err) {
|
|
63
56
|
var allOk = true
|
|
64
57
|
var rvs = decoders.map(function (decoder, i) {
|
|
65
58
|
var blob = blobs[i]
|
|
66
59
|
var result = decoder.decode(blob)
|
|
67
|
-
|
|
68
60
|
if (result.ok) {
|
|
69
61
|
return result.value
|
|
70
62
|
} else {
|
|
@@ -72,7 +64,6 @@ function _tuple() {
|
|
|
72
64
|
return result.error
|
|
73
65
|
}
|
|
74
66
|
})
|
|
75
|
-
|
|
76
67
|
if (allOk) {
|
|
77
68
|
return ok(rvs)
|
|
78
69
|
} else {
|
package/lib/basics.js
CHANGED
|
@@ -4,9 +4,7 @@ exports.__esModule = true
|
|
|
4
4
|
exports.always = always
|
|
5
5
|
exports.constant = constant
|
|
6
6
|
exports.unknown = exports.undefined_ = exports.optional = exports.nullable = exports.null_ = exports.mixed = exports.maybe = exports.hardcoded = void 0
|
|
7
|
-
|
|
8
7
|
var _Decoder = require('../Decoder')
|
|
9
|
-
|
|
10
8
|
var _unions = require('./unions')
|
|
11
9
|
|
|
12
10
|
var null_ = (0, _Decoder.define)(function (blob, ok, err) {
|
|
@@ -21,16 +19,12 @@ exports.undefined_ = undefined_
|
|
|
21
19
|
var undefined_or_null = (0, _Decoder.define)(function (blob, ok, err) {
|
|
22
20
|
return blob === undefined || blob === null ? ok(blob) : err('Must be undefined or null')
|
|
23
21
|
})
|
|
24
|
-
|
|
25
22
|
function _maybeish(emptyCase) {
|
|
26
23
|
function _inner(decoder) {
|
|
27
24
|
var rv = (0, _unions.either)(emptyCase, decoder)
|
|
28
|
-
|
|
29
25
|
if (arguments.length >= 2) {
|
|
30
26
|
var _defaultValue = arguments[1]
|
|
31
|
-
|
|
32
27
|
var _defaultValue2 = typeof _defaultValue === 'function' ? _defaultValue() : _defaultValue
|
|
33
|
-
|
|
34
28
|
return rv.transform(function (value) {
|
|
35
29
|
return value != null ? value : _defaultValue2
|
|
36
30
|
})
|
|
@@ -38,22 +32,18 @@ function _maybeish(emptyCase) {
|
|
|
38
32
|
return rv
|
|
39
33
|
}
|
|
40
34
|
}
|
|
41
|
-
|
|
42
35
|
return _inner
|
|
43
36
|
}
|
|
44
37
|
|
|
45
38
|
var nullable = _maybeish(null_)
|
|
46
39
|
|
|
47
40
|
exports.nullable = nullable
|
|
48
|
-
|
|
49
41
|
var optional = _maybeish(undefined_)
|
|
50
42
|
|
|
51
43
|
exports.optional = optional
|
|
52
|
-
|
|
53
44
|
var maybe = _maybeish(undefined_or_null)
|
|
54
45
|
|
|
55
46
|
exports.maybe = maybe
|
|
56
|
-
|
|
57
47
|
function constant(value) {
|
|
58
48
|
return (0, _Decoder.define)(function (blob, ok, err) {
|
|
59
49
|
return blob === value ? ok(value) : err('Must be constant ' + String(value))
|
|
@@ -63,20 +53,10 @@ function constant(value) {
|
|
|
63
53
|
function always(value) {
|
|
64
54
|
return (0, _Decoder.define)(
|
|
65
55
|
typeof value === 'function'
|
|
66
|
-
? function (
|
|
67
|
-
blob,
|
|
68
|
-
|
|
69
|
-
ok,
|
|
70
|
-
_
|
|
71
|
-
) {
|
|
56
|
+
? function (blob, ok, _) {
|
|
72
57
|
return ok(value())
|
|
73
58
|
}
|
|
74
|
-
: function (
|
|
75
|
-
blob,
|
|
76
|
-
|
|
77
|
-
ok,
|
|
78
|
-
_
|
|
79
|
-
) {
|
|
59
|
+
: function (blob, ok, _) {
|
|
80
60
|
return ok(value)
|
|
81
61
|
}
|
|
82
62
|
)
|
package/lib/basics.mjs
CHANGED
|
@@ -11,16 +11,12 @@ export var undefined_ = define(function (blob, ok, err) {
|
|
|
11
11
|
var undefined_or_null = define(function (blob, ok, err) {
|
|
12
12
|
return blob === undefined || blob === null ? ok(blob) : err('Must be undefined or null')
|
|
13
13
|
})
|
|
14
|
-
|
|
15
14
|
function _maybeish(emptyCase) {
|
|
16
15
|
function _inner(decoder) {
|
|
17
16
|
var rv = either(emptyCase, decoder)
|
|
18
|
-
|
|
19
17
|
if (arguments.length >= 2) {
|
|
20
18
|
var _defaultValue = arguments[1]
|
|
21
|
-
|
|
22
19
|
var _defaultValue2 = typeof _defaultValue === 'function' ? _defaultValue() : _defaultValue
|
|
23
|
-
|
|
24
20
|
return rv.transform(function (value) {
|
|
25
21
|
return value != null ? value : _defaultValue2
|
|
26
22
|
})
|
|
@@ -28,7 +24,6 @@ function _maybeish(emptyCase) {
|
|
|
28
24
|
return rv
|
|
29
25
|
}
|
|
30
26
|
}
|
|
31
|
-
|
|
32
27
|
return _inner
|
|
33
28
|
}
|
|
34
29
|
|
|
@@ -47,20 +42,10 @@ export function constant(value) {
|
|
|
47
42
|
export function always(value) {
|
|
48
43
|
return define(
|
|
49
44
|
typeof value === 'function'
|
|
50
|
-
? function (
|
|
51
|
-
blob,
|
|
52
|
-
|
|
53
|
-
ok,
|
|
54
|
-
_
|
|
55
|
-
) {
|
|
45
|
+
? function (blob, ok, _) {
|
|
56
46
|
return ok(value())
|
|
57
47
|
}
|
|
58
|
-
: function (
|
|
59
|
-
blob,
|
|
60
|
-
|
|
61
|
-
ok,
|
|
62
|
-
_
|
|
63
|
-
) {
|
|
48
|
+
: function (blob, ok, _) {
|
|
64
49
|
return ok(value)
|
|
65
50
|
}
|
|
66
51
|
)
|
package/lib/booleans.js
CHANGED
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true
|
|
4
4
|
exports.truthy = exports.numericBoolean = exports['boolean'] = void 0
|
|
5
|
-
|
|
6
5
|
var _Decoder = require('../Decoder')
|
|
7
|
-
|
|
8
6
|
var _numbers = require('./numbers')
|
|
9
7
|
|
|
10
8
|
var _boolean = (0, _Decoder.define)(function (blob, ok, err) {
|
|
@@ -17,9 +15,7 @@ var truthy = (0, _Decoder.define)(function (blob, ok, _) {
|
|
|
17
15
|
})
|
|
18
16
|
|
|
19
17
|
exports.truthy = truthy
|
|
20
|
-
|
|
21
18
|
var numericBoolean = _numbers.number.transform(function (n) {
|
|
22
19
|
return !!n
|
|
23
20
|
})
|
|
24
|
-
|
|
25
21
|
exports.numericBoolean = numericBoolean
|
package/lib/dates.js
CHANGED
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true
|
|
4
4
|
exports.iso8601 = exports.date = void 0
|
|
5
|
-
|
|
6
5
|
var _utils = require('../_utils')
|
|
7
|
-
|
|
8
6
|
var _Decoder = require('../Decoder')
|
|
9
|
-
|
|
10
7
|
var _strings = require('./strings')
|
|
11
8
|
var iso8601_re = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:[.]\d+)?(?:Z|[+-]\d{2}:?\d{2})$/
|
|
12
9
|
|
|
@@ -18,11 +15,9 @@ var date = (0, _Decoder.define)(function (blob, ok, err) {
|
|
|
18
15
|
exports.date = date
|
|
19
16
|
var iso8601 = (0, _strings.regex)(iso8601_re, 'Must be ISO8601 format').transform(function (value) {
|
|
20
17
|
var date = new Date(value)
|
|
21
|
-
|
|
22
18
|
if (isNaN(date.getTime())) {
|
|
23
19
|
throw new Error('Must be valid date/time value')
|
|
24
20
|
}
|
|
25
|
-
|
|
26
21
|
return date
|
|
27
22
|
})
|
|
28
23
|
exports.iso8601 = iso8601
|
package/lib/dates.mjs
CHANGED
|
@@ -10,10 +10,8 @@ export var date = define(function (blob, ok, err) {
|
|
|
10
10
|
|
|
11
11
|
export var iso8601 = regex(iso8601_re, 'Must be ISO8601 format').transform(function (value) {
|
|
12
12
|
var date = new Date(value)
|
|
13
|
-
|
|
14
13
|
if (isNaN(date.getTime())) {
|
|
15
14
|
throw new Error('Must be valid date/time value')
|
|
16
15
|
}
|
|
17
|
-
|
|
18
16
|
return date
|
|
19
17
|
})
|
package/lib/json.js
CHANGED
|
@@ -2,21 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true
|
|
4
4
|
exports.jsonObject = exports.jsonArray = exports.json = void 0
|
|
5
|
-
|
|
6
5
|
var _arrays = require('./arrays')
|
|
7
|
-
|
|
8
6
|
var _booleans = require('./booleans')
|
|
9
|
-
|
|
10
7
|
var _objects = require('./objects')
|
|
11
|
-
|
|
12
8
|
var _unions = require('./unions')
|
|
13
|
-
|
|
14
9
|
var _utilities = require('./utilities')
|
|
15
|
-
|
|
16
10
|
var _basics = require('./basics')
|
|
17
|
-
|
|
18
11
|
var _numbers = require('./numbers')
|
|
19
|
-
|
|
20
12
|
var _strings = require('./strings')
|
|
21
13
|
|
|
22
14
|
var jsonObject = (0, _utilities.lazy)(function () {
|
package/lib/numbers.js
CHANGED
package/lib/objects.js
CHANGED
|
@@ -7,11 +7,8 @@ exports.inexact = inexact
|
|
|
7
7
|
exports.mapping = mapping
|
|
8
8
|
exports.object = object
|
|
9
9
|
exports.pojo = void 0
|
|
10
|
-
|
|
11
10
|
var _annotate = require('../annotate')
|
|
12
|
-
|
|
13
11
|
var _Decoder = require('../Decoder')
|
|
14
|
-
|
|
15
12
|
var _utils = require('../_utils')
|
|
16
13
|
|
|
17
14
|
var pojo = (0, _Decoder.define)(function (blob, ok, err) {
|
|
@@ -19,12 +16,10 @@ var pojo = (0, _Decoder.define)(function (blob, ok, err) {
|
|
|
19
16
|
})
|
|
20
17
|
|
|
21
18
|
exports.pojo = pojo
|
|
22
|
-
|
|
23
19
|
function object(decodersByKey) {
|
|
24
20
|
var knownKeys = new Set(Object.keys(decodersByKey))
|
|
25
21
|
return pojo.then(function (plainObj, ok, err) {
|
|
26
22
|
var actualKeys = new Set(Object.keys(plainObj))
|
|
27
|
-
|
|
28
23
|
var missingKeys = (0, _utils.subtract)(knownKeys, actualKeys)
|
|
29
24
|
var record = {}
|
|
30
25
|
var errors = null
|
|
@@ -32,37 +27,29 @@ function object(decodersByKey) {
|
|
|
32
27
|
var decoder = decodersByKey[key]
|
|
33
28
|
var rawValue = plainObj[key]
|
|
34
29
|
var result = decoder.decode(rawValue)
|
|
35
|
-
|
|
36
30
|
if (result.ok) {
|
|
37
31
|
var value = result.value
|
|
38
|
-
|
|
39
32
|
if (value !== undefined) {
|
|
40
33
|
record[key] = value
|
|
41
34
|
}
|
|
42
|
-
|
|
43
35
|
missingKeys['delete'](key)
|
|
44
36
|
} else {
|
|
45
37
|
var ann = result.error
|
|
46
|
-
|
|
47
38
|
if (rawValue === undefined) {
|
|
48
39
|
missingKeys.add(key)
|
|
49
40
|
} else {
|
|
50
41
|
if (errors === null) {
|
|
51
42
|
errors = {}
|
|
52
43
|
}
|
|
53
|
-
|
|
54
44
|
errors[key] = ann
|
|
55
45
|
}
|
|
56
46
|
}
|
|
57
47
|
})
|
|
58
|
-
|
|
59
48
|
if (errors || missingKeys.size > 0) {
|
|
60
49
|
var objAnn = (0, _annotate.annotateObject)(plainObj)
|
|
61
|
-
|
|
62
50
|
if (errors) {
|
|
63
51
|
objAnn = (0, _annotate.merge)(objAnn, errors)
|
|
64
52
|
}
|
|
65
|
-
|
|
66
53
|
if (missingKeys.size > 0) {
|
|
67
54
|
var errMsg = Array.from(missingKeys)
|
|
68
55
|
.map(function (key) {
|
|
@@ -72,23 +59,19 @@ function object(decodersByKey) {
|
|
|
72
59
|
var pluralized = missingKeys.size > 1 ? 'keys' : 'key'
|
|
73
60
|
objAnn = (0, _annotate.updateText)(objAnn, 'Missing ' + pluralized + ': ' + errMsg)
|
|
74
61
|
}
|
|
75
|
-
|
|
76
62
|
return err(objAnn)
|
|
77
63
|
}
|
|
78
|
-
|
|
79
64
|
return ok(record)
|
|
80
65
|
})
|
|
81
66
|
}
|
|
82
67
|
|
|
83
68
|
function exact(decodersByKey) {
|
|
84
69
|
var allowedKeys = new Set(Object.keys(decodersByKey))
|
|
85
|
-
|
|
86
70
|
var checked = pojo.reject(function (plainObj) {
|
|
87
71
|
var actualKeys = new Set(Object.keys(plainObj))
|
|
88
72
|
var extraKeys = (0, _utils.subtract)(actualKeys, allowedKeys)
|
|
89
73
|
return extraKeys.size > 0 ? 'Unexpected extra keys: ' + Array.from(extraKeys).join(', ') : null
|
|
90
74
|
})
|
|
91
|
-
|
|
92
75
|
return checked.then(object(decodersByKey).decode)
|
|
93
76
|
}
|
|
94
77
|
|
|
@@ -97,7 +80,6 @@ function inexact(decodersByKey) {
|
|
|
97
80
|
var allkeys = new Set(Object.keys(plainObj))
|
|
98
81
|
var decoder = object(decodersByKey).transform(function (safepart) {
|
|
99
82
|
var safekeys = new Set(Object.keys(decodersByKey))
|
|
100
|
-
|
|
101
83
|
safekeys.forEach(function (k) {
|
|
102
84
|
return allkeys.add(k)
|
|
103
85
|
})
|
|
@@ -105,7 +87,6 @@ function inexact(decodersByKey) {
|
|
|
105
87
|
allkeys.forEach(function (k) {
|
|
106
88
|
if (safekeys.has(k)) {
|
|
107
89
|
var value = safepart[k]
|
|
108
|
-
|
|
109
90
|
if (value !== undefined) {
|
|
110
91
|
rv[k] = value
|
|
111
92
|
}
|
|
@@ -126,22 +107,18 @@ function dict(decoder) {
|
|
|
126
107
|
Object.keys(plainObj).forEach(function (key) {
|
|
127
108
|
var value = plainObj[key]
|
|
128
109
|
var result = decoder.decode(value)
|
|
129
|
-
|
|
130
110
|
if (result.ok) {
|
|
131
111
|
if (errors === null) {
|
|
132
112
|
rv[key] = result.value
|
|
133
113
|
}
|
|
134
114
|
} else {
|
|
135
115
|
rv = {}
|
|
136
|
-
|
|
137
116
|
if (errors === null) {
|
|
138
117
|
errors = {}
|
|
139
118
|
}
|
|
140
|
-
|
|
141
119
|
errors[key] = result.error
|
|
142
120
|
}
|
|
143
121
|
})
|
|
144
|
-
|
|
145
122
|
if (errors !== null) {
|
|
146
123
|
return err((0, _annotate.merge)((0, _annotate.annotateObject)(plainObj), errors))
|
|
147
124
|
} else {
|
package/lib/objects.mjs
CHANGED
|
@@ -10,7 +10,6 @@ export function object(decodersByKey) {
|
|
|
10
10
|
var knownKeys = new Set(Object.keys(decodersByKey))
|
|
11
11
|
return pojo.then(function (plainObj, ok, err) {
|
|
12
12
|
var actualKeys = new Set(Object.keys(plainObj))
|
|
13
|
-
|
|
14
13
|
var missingKeys = subtract(knownKeys, actualKeys)
|
|
15
14
|
var record = {}
|
|
16
15
|
var errors = null
|
|
@@ -18,37 +17,29 @@ export function object(decodersByKey) {
|
|
|
18
17
|
var decoder = decodersByKey[key]
|
|
19
18
|
var rawValue = plainObj[key]
|
|
20
19
|
var result = decoder.decode(rawValue)
|
|
21
|
-
|
|
22
20
|
if (result.ok) {
|
|
23
21
|
var value = result.value
|
|
24
|
-
|
|
25
22
|
if (value !== undefined) {
|
|
26
23
|
record[key] = value
|
|
27
24
|
}
|
|
28
|
-
|
|
29
25
|
missingKeys['delete'](key)
|
|
30
26
|
} else {
|
|
31
27
|
var ann = result.error
|
|
32
|
-
|
|
33
28
|
if (rawValue === undefined) {
|
|
34
29
|
missingKeys.add(key)
|
|
35
30
|
} else {
|
|
36
31
|
if (errors === null) {
|
|
37
32
|
errors = {}
|
|
38
33
|
}
|
|
39
|
-
|
|
40
34
|
errors[key] = ann
|
|
41
35
|
}
|
|
42
36
|
}
|
|
43
37
|
})
|
|
44
|
-
|
|
45
38
|
if (errors || missingKeys.size > 0) {
|
|
46
39
|
var objAnn = annotateObject(plainObj)
|
|
47
|
-
|
|
48
40
|
if (errors) {
|
|
49
41
|
objAnn = merge(objAnn, errors)
|
|
50
42
|
}
|
|
51
|
-
|
|
52
43
|
if (missingKeys.size > 0) {
|
|
53
44
|
var errMsg = Array.from(missingKeys)
|
|
54
45
|
.map(function (key) {
|
|
@@ -58,23 +49,19 @@ export function object(decodersByKey) {
|
|
|
58
49
|
var pluralized = missingKeys.size > 1 ? 'keys' : 'key'
|
|
59
50
|
objAnn = updateText(objAnn, 'Missing ' + pluralized + ': ' + errMsg)
|
|
60
51
|
}
|
|
61
|
-
|
|
62
52
|
return err(objAnn)
|
|
63
53
|
}
|
|
64
|
-
|
|
65
54
|
return ok(record)
|
|
66
55
|
})
|
|
67
56
|
}
|
|
68
57
|
|
|
69
58
|
export function exact(decodersByKey) {
|
|
70
59
|
var allowedKeys = new Set(Object.keys(decodersByKey))
|
|
71
|
-
|
|
72
60
|
var checked = pojo.reject(function (plainObj) {
|
|
73
61
|
var actualKeys = new Set(Object.keys(plainObj))
|
|
74
62
|
var extraKeys = subtract(actualKeys, allowedKeys)
|
|
75
63
|
return extraKeys.size > 0 ? 'Unexpected extra keys: ' + Array.from(extraKeys).join(', ') : null
|
|
76
64
|
})
|
|
77
|
-
|
|
78
65
|
return checked.then(object(decodersByKey).decode)
|
|
79
66
|
}
|
|
80
67
|
|
|
@@ -83,7 +70,6 @@ export function inexact(decodersByKey) {
|
|
|
83
70
|
var allkeys = new Set(Object.keys(plainObj))
|
|
84
71
|
var decoder = object(decodersByKey).transform(function (safepart) {
|
|
85
72
|
var safekeys = new Set(Object.keys(decodersByKey))
|
|
86
|
-
|
|
87
73
|
safekeys.forEach(function (k) {
|
|
88
74
|
return allkeys.add(k)
|
|
89
75
|
})
|
|
@@ -91,7 +77,6 @@ export function inexact(decodersByKey) {
|
|
|
91
77
|
allkeys.forEach(function (k) {
|
|
92
78
|
if (safekeys.has(k)) {
|
|
93
79
|
var value = safepart[k]
|
|
94
|
-
|
|
95
80
|
if (value !== undefined) {
|
|
96
81
|
rv[k] = value
|
|
97
82
|
}
|
|
@@ -112,22 +97,18 @@ export function dict(decoder) {
|
|
|
112
97
|
Object.keys(plainObj).forEach(function (key) {
|
|
113
98
|
var value = plainObj[key]
|
|
114
99
|
var result = decoder.decode(value)
|
|
115
|
-
|
|
116
100
|
if (result.ok) {
|
|
117
101
|
if (errors === null) {
|
|
118
102
|
rv[key] = result.value
|
|
119
103
|
}
|
|
120
104
|
} else {
|
|
121
105
|
rv = {}
|
|
122
|
-
|
|
123
106
|
if (errors === null) {
|
|
124
107
|
errors = {}
|
|
125
108
|
}
|
|
126
|
-
|
|
127
109
|
errors[key] = result.error
|
|
128
110
|
}
|
|
129
111
|
})
|
|
130
|
-
|
|
131
112
|
if (errors !== null) {
|
|
132
113
|
return err(merge(annotateObject(plainObj), errors))
|
|
133
114
|
} else {
|
package/lib/strings.js
CHANGED
|
@@ -4,14 +4,11 @@ exports.__esModule = true
|
|
|
4
4
|
exports.nonEmptyString = exports.httpsUrl = exports.email = void 0
|
|
5
5
|
exports.regex = regex
|
|
6
6
|
exports.uuidv4 = exports.uuidv1 = exports.uuid = exports.url = exports.string = void 0
|
|
7
|
-
|
|
8
7
|
var _Decoder = require('../Decoder')
|
|
9
|
-
|
|
10
8
|
var _unions = require('./unions')
|
|
11
|
-
|
|
12
9
|
var _utilities = require('./utilities')
|
|
13
10
|
|
|
14
|
-
var url_re = /^([A-Za-z]{3,9}(?:[+][A-Za-z]{3,9})?):\/\/(?:([-;:&=+$,\w]+)@)?(?:([A-Za-z0-9.-]+)(?::([0-9]{2,5}))?)(\/(?:[-+~%/.,\w]*)?(?:\?[
|
|
11
|
+
var url_re = /^([A-Za-z]{3,9}(?:[+][A-Za-z]{3,9})?):\/\/(?:([-;:&=+$,\w]+)@)?(?:([A-Za-z0-9.-]+)(?::([0-9]{2,5}))?)(\/(?:[-+~%/.,\w]*)?(?:\?[-+=&;%@.,/\w]*)?(?:#[.,!/\w]*)?)?$/
|
|
15
12
|
|
|
16
13
|
var string = (0, _Decoder.define)(function (blob, ok, err) {
|
|
17
14
|
return typeof blob === 'string' ? ok(blob) : err('Must be string')
|
|
@@ -21,7 +18,6 @@ exports.string = string
|
|
|
21
18
|
var nonEmptyString = regex(/\S/, 'Must be non-empty string')
|
|
22
19
|
|
|
23
20
|
exports.nonEmptyString = nonEmptyString
|
|
24
|
-
|
|
25
21
|
function regex(regex, msg) {
|
|
26
22
|
return string.refine(function (s) {
|
|
27
23
|
return regex.test(s)
|
package/lib/strings.js.flow
CHANGED
|
@@ -13,7 +13,7 @@ import type { Decoder } from '../Decoder';
|
|
|
13
13
|
* \5 - the path (optional)
|
|
14
14
|
*/
|
|
15
15
|
const url_re =
|
|
16
|
-
/^([A-Za-z]{3,9}(?:[+][A-Za-z]{3,9})?):\/\/(?:([-;:&=+$,\w]+)@)?(?:([A-Za-z0-9.-]+)(?::([0-9]{2,5}))?)(\/(?:[-+~%/.,\w]*)?(?:\?[
|
|
16
|
+
/^([A-Za-z]{3,9}(?:[+][A-Za-z]{3,9})?):\/\/(?:([-;:&=+$,\w]+)@)?(?:([A-Za-z0-9.-]+)(?::([0-9]{2,5}))?)(\/(?:[-+~%/.,\w]*)?(?:\?[-+=&;%@.,/\w]*)?(?:#[.,!/\w]*)?)?$/;
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Accepts and returns strings.
|
package/lib/strings.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { define } from '../Decoder.mjs'
|
|
|
2
2
|
import { either } from './unions.mjs'
|
|
3
3
|
import { instanceOf } from './utilities.mjs'
|
|
4
4
|
|
|
5
|
-
var url_re = /^([A-Za-z]{3,9}(?:[+][A-Za-z]{3,9})?):\/\/(?:([-;:&=+$,\w]+)@)?(?:([A-Za-z0-9.-]+)(?::([0-9]{2,5}))?)(\/(?:[-+~%/.,\w]*)?(?:\?[
|
|
5
|
+
var url_re = /^([A-Za-z]{3,9}(?:[+][A-Za-z]{3,9})?):\/\/(?:([-;:&=+$,\w]+)@)?(?:([A-Za-z0-9.-]+)(?::([0-9]{2,5}))?)(\/(?:[-+~%/.,\w]*)?(?:\?[-+=&;%@.,/\w]*)?(?:#[.,!/\w]*)?)?$/
|
|
6
6
|
|
|
7
7
|
export var string = define(function (blob, ok, err) {
|
|
8
8
|
return typeof blob === 'string' ? ok(blob) : err('Must be string')
|