decoders 2.0.3 → 2.0.5
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 +11 -1
- package/Decoder.js +0 -10
- package/Decoder.mjs +0 -7
- package/README.md +4 -2
- 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.d.ts +2 -2
- package/lib/numbers.js +10 -7
- package/lib/numbers.js.flow +8 -10
- package/lib/numbers.mjs +10 -6
- 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 +1 -1
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.d.ts
CHANGED
|
@@ -21,11 +21,11 @@ export const number: Decoder<number>;
|
|
|
21
21
|
export const integer: Decoder<number>;
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* Accepts only positive finite numbers.
|
|
24
|
+
* Accepts only non-negative (zero or positive) finite numbers.
|
|
25
25
|
*/
|
|
26
26
|
export const positiveNumber: Decoder<number>;
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
* Accepts only positive finite whole numbers.
|
|
29
|
+
* Accepts only non-negative (zero or positive) finite whole numbers.
|
|
30
30
|
*/
|
|
31
31
|
export const positiveInteger: Decoder<number>;
|
package/lib/numbers.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true
|
|
4
4
|
exports.positiveNumber = exports.positiveInteger = exports.number = exports.integer = exports.anyNumber = void 0
|
|
5
|
-
|
|
6
5
|
var _Decoder = require('../Decoder')
|
|
7
6
|
|
|
8
7
|
var anyNumber = (0, _Decoder.define)(function (blob, ok, err) {
|
|
@@ -20,12 +19,16 @@ var integer = number.refine(function (n) {
|
|
|
20
19
|
}, 'Number must be an integer')
|
|
21
20
|
|
|
22
21
|
exports.integer = integer
|
|
23
|
-
var positiveNumber = number
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
var positiveNumber = number
|
|
23
|
+
.refine(function (n) {
|
|
24
|
+
return n >= 0
|
|
25
|
+
}, 'Number must be positive')
|
|
26
|
+
.transform(Math.abs)
|
|
26
27
|
|
|
27
28
|
exports.positiveNumber = positiveNumber
|
|
28
|
-
var positiveInteger = integer
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
var positiveInteger = integer
|
|
30
|
+
.refine(function (n) {
|
|
31
|
+
return n >= 0
|
|
32
|
+
}, 'Number must be positive')
|
|
33
|
+
.transform(Math.abs)
|
|
31
34
|
exports.positiveInteger = positiveInteger
|
package/lib/numbers.js.flow
CHANGED
|
@@ -32,17 +32,15 @@ export const integer: Decoder<number> = number.refine(
|
|
|
32
32
|
);
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Accepts only positive finite numbers.
|
|
35
|
+
* Accepts only non-negative (zero or positive) finite numbers.
|
|
36
36
|
*/
|
|
37
|
-
export const positiveNumber: Decoder<number> = number
|
|
38
|
-
(n) => n >= 0,
|
|
39
|
-
|
|
40
|
-
);
|
|
37
|
+
export const positiveNumber: Decoder<number> = number
|
|
38
|
+
.refine((n) => n >= 0, 'Number must be positive')
|
|
39
|
+
.transform(Math.abs); // Just here to handle the -0 case
|
|
41
40
|
|
|
42
41
|
/**
|
|
43
|
-
* Accepts only positive finite whole numbers.
|
|
42
|
+
* Accepts only non-negative (zero or positive) finite whole numbers.
|
|
44
43
|
*/
|
|
45
|
-
export const positiveInteger: Decoder<number> = integer
|
|
46
|
-
(n) => n >= 0,
|
|
47
|
-
|
|
48
|
-
);
|
|
44
|
+
export const positiveInteger: Decoder<number> = integer
|
|
45
|
+
.refine((n) => n >= 0, 'Number must be positive')
|
|
46
|
+
.transform(Math.abs); // Just here to handle the -0 case
|
package/lib/numbers.mjs
CHANGED
|
@@ -12,10 +12,14 @@ export var integer = number.refine(function (n) {
|
|
|
12
12
|
return Number.isInteger(n)
|
|
13
13
|
}, 'Number must be an integer')
|
|
14
14
|
|
|
15
|
-
export var positiveNumber = number
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
export var positiveNumber = number
|
|
16
|
+
.refine(function (n) {
|
|
17
|
+
return n >= 0
|
|
18
|
+
}, 'Number must be positive')
|
|
19
|
+
.transform(Math.abs)
|
|
18
20
|
|
|
19
|
-
export var positiveInteger = integer
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
export var positiveInteger = integer
|
|
22
|
+
.refine(function (n) {
|
|
23
|
+
return n >= 0
|
|
24
|
+
}, 'Number must be positive')
|
|
25
|
+
.transform(Math.abs)
|
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 {
|