decoders 2.0.0-beta6 → 2.0.0-beta7

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 (123) hide show
  1. package/NotSupportedTSVersion.d.ts +1 -0
  2. package/_guard.d.ts +7 -0
  3. package/_guard.js +2 -6
  4. package/_guard.js.flow +3 -3
  5. package/{_esm/_guard.js → _guard.mjs} +3 -3
  6. package/_types.d.ts +13 -0
  7. package/{_esm/_types.js → _types.mjs} +0 -0
  8. package/_utils.d.ts +10 -0
  9. package/{_esm/_utils.js → _utils.mjs} +0 -0
  10. package/annotate.d.ts +62 -0
  11. package/{_esm/annotate.js → annotate.mjs} +0 -0
  12. package/core/_helpers.d.ts +79 -0
  13. package/core/array.d.ts +5 -0
  14. package/core/array.js +5 -9
  15. package/core/array.js.flow +5 -5
  16. package/{_esm/core/array.js → core/array.mjs} +7 -7
  17. package/core/boolean.d.ts +5 -0
  18. package/core/boolean.js +4 -8
  19. package/core/boolean.js.flow +3 -5
  20. package/{_esm/core/boolean.js → core/boolean.mjs} +6 -6
  21. package/core/composition.d.ts +12 -0
  22. package/core/composition.js +6 -10
  23. package/core/composition.js.flow +6 -6
  24. package/{_esm/core/composition.js → core/composition.mjs} +7 -7
  25. package/core/constants.d.ts +11 -0
  26. package/core/constants.js +6 -10
  27. package/core/constants.js.flow +7 -9
  28. package/{_esm/core/constants.js → core/constants.mjs} +7 -7
  29. package/core/date.d.ts +4 -0
  30. package/core/date.js +3 -7
  31. package/core/date.js.flow +2 -4
  32. package/{_esm/core/date.js → core/date.mjs} +6 -6
  33. package/core/describe.d.ts +3 -0
  34. package/core/describe.js +2 -6
  35. package/core/describe.js.flow +2 -2
  36. package/{_esm/core/describe.js → core/describe.mjs} +3 -3
  37. package/core/dispatch.d.ts +8 -0
  38. package/core/dispatch.js +2 -6
  39. package/core/dispatch.js.flow +2 -2
  40. package/{_esm/core/dispatch.js → core/dispatch.mjs} +4 -4
  41. package/core/either.d.ts +61 -0
  42. package/core/either.js +7 -11
  43. package/core/either.js.flow +6 -6
  44. package/{_esm/core/either.js → core/either.mjs} +8 -8
  45. package/core/fail.d.ts +3 -0
  46. package/core/fail.js +2 -6
  47. package/core/fail.js.flow +2 -2
  48. package/{_esm/core/fail.js → core/fail.mjs} +3 -3
  49. package/core/instanceOf.d.ts +3 -0
  50. package/core/instanceOf.js +2 -6
  51. package/core/instanceOf.js.flow +3 -3
  52. package/core/instanceOf.mjs +8 -0
  53. package/core/json.d.ts +11 -0
  54. package/core/json.mjs +15 -0
  55. package/core/lazy.d.ts +3 -0
  56. package/{_esm/core/lazy.js → core/lazy.mjs} +0 -0
  57. package/core/mapping.d.ts +6 -0
  58. package/core/mapping.js +4 -8
  59. package/core/mapping.js.flow +3 -3
  60. package/{_esm/core/mapping.js → core/mapping.mjs} +7 -7
  61. package/core/number.d.ts +6 -0
  62. package/core/number.js +2 -6
  63. package/core/number.js.flow +3 -3
  64. package/{_esm/core/number.js → core/number.mjs} +4 -4
  65. package/core/object.d.ts +33 -0
  66. package/core/object.js +7 -11
  67. package/core/object.js.flow +7 -7
  68. package/{_esm/core/object.js → core/object.mjs} +9 -9
  69. package/core/optional.d.ts +5 -0
  70. package/core/optional.js +4 -8
  71. package/core/optional.js.flow +3 -3
  72. package/{_esm/core/optional.js → core/optional.mjs} +6 -6
  73. package/core/string.d.ts +7 -0
  74. package/core/string.js +5 -9
  75. package/core/string.js.flow +5 -7
  76. package/{_esm/core/string.js → core/string.mjs} +7 -7
  77. package/core/tuple.d.ts +30 -0
  78. package/{_esm/core/tuple.js → core/tuple.mjs} +4 -4
  79. package/format.d.ts +4 -0
  80. package/{format/inline.js → format.js} +6 -1
  81. package/{_esm/format/inline.js.flow → format.js.flow} +6 -2
  82. package/{_esm/format/inline.js → format.mjs} +4 -1
  83. package/{_esm/index.js.flow → index.d.ts} +3 -23
  84. package/{_esm/index.js → index.mjs} +19 -19
  85. package/package.json +15 -3
  86. package/result.d.ts +39 -0
  87. package/result.js +0 -62
  88. package/result.js.flow +0 -60
  89. package/{_esm/result.js → result.mjs} +0 -54
  90. package/_esm/_guard.js.flow +0 -20
  91. package/_esm/_types.js.flow +0 -20
  92. package/_esm/_utils.js.flow +0 -97
  93. package/_esm/annotate.js.flow +0 -218
  94. package/_esm/core/array.js.flow +0 -103
  95. package/_esm/core/boolean.js.flow +0 -29
  96. package/_esm/core/composition.js.flow +0 -43
  97. package/_esm/core/constants.js.flow +0 -46
  98. package/_esm/core/date.js.flow +0 -40
  99. package/_esm/core/describe.js.flow +0 -17
  100. package/_esm/core/dispatch.js.flow +0 -58
  101. package/_esm/core/either.js.flow +0 -151
  102. package/_esm/core/fail.js.flow +0 -12
  103. package/_esm/core/instanceOf.js +0 -8
  104. package/_esm/core/instanceOf.js.flow +0 -20
  105. package/_esm/core/json.js +0 -15
  106. package/_esm/core/json.js.flow +0 -28
  107. package/_esm/core/lazy.js.flow +0 -15
  108. package/_esm/core/mapping.js.flow +0 -54
  109. package/_esm/core/number.js.flow +0 -34
  110. package/_esm/core/object.js.flow +0 -203
  111. package/_esm/core/optional.js.flow +0 -41
  112. package/_esm/core/string.js.flow +0 -82
  113. package/_esm/core/tuple.js.flow +0 -214
  114. package/_esm/format/index.js +0 -2
  115. package/_esm/format/index.js.flow +0 -4
  116. package/_esm/format/short.js +0 -4
  117. package/_esm/format/short.js.flow +0 -8
  118. package/_esm/result.js.flow +0 -158
  119. package/format/index.js +0 -12
  120. package/format/index.js.flow +0 -4
  121. package/format/inline.js.flow +0 -122
  122. package/format/short.js +0 -10
  123. package/format/short.js.flow +0 -8
@@ -3,17 +3,13 @@
3
3
  exports.__esModule = true;
4
4
  exports.instanceOf = instanceOf;
5
5
 
6
- var Result = _interopRequireWildcard(require("../result"));
7
-
8
6
  var _annotate = require("../annotate");
9
7
 
10
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
-
12
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
8
+ var _result = require("../result");
13
9
 
14
10
  function instanceOf(klass) {
15
11
  return function (blob) {
16
- return blob instanceof klass ? Result.ok(blob) : Result.err((0, _annotate.annotate)(blob, "Must be " + // $FlowFixMe[incompatible-use] - klass.name is fine?
12
+ return blob instanceof klass ? (0, _result.ok)(blob) : (0, _result.err)((0, _annotate.annotate)(blob, "Must be " + // $FlowFixMe[incompatible-use] - klass.name is fine?
17
13
  klass.name + " instance"));
18
14
  };
19
15
  }
@@ -1,14 +1,14 @@
1
1
  // @flow strict
2
2
 
3
- import * as Result from '../result';
4
3
  import { annotate } from '../annotate';
4
+ import { err, ok } from '../result';
5
5
  import type { Decoder } from '../_types';
6
6
 
7
7
  export function instanceOf<T>(klass: Class<T>): Decoder<T> {
8
8
  return (blob: mixed) =>
9
9
  blob instanceof klass
10
- ? Result.ok(blob)
11
- : Result.err(
10
+ ? ok(blob)
11
+ : err(
12
12
  annotate(
13
13
  blob,
14
14
  `Must be ${
@@ -0,0 +1,8 @@
1
+ import { annotate } from '../annotate.mjs';
2
+ import { err, ok } from '../result.mjs';
3
+ export function instanceOf(klass) {
4
+ return function (blob) {
5
+ return blob instanceof klass ? ok(blob) : err(annotate(blob, "Must be " + // $FlowFixMe[incompatible-use] - klass.name is fine?
6
+ klass.name + " instance"));
7
+ };
8
+ }
package/core/json.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { Decoder } from '../_types';
2
+
3
+ export type JSONValue = null | string | number | boolean | JSONObject | JSONArray;
4
+ export interface JSONObject {
5
+ [key: string]: JSONValue;
6
+ }
7
+ export type JSONArray = JSONValue[];
8
+
9
+ export const json: Decoder<JSONValue>;
10
+ export const jsonArray: Decoder<JSONArray>;
11
+ export const jsonObject: Decoder<JSONObject>;
package/core/json.mjs ADDED
@@ -0,0 +1,15 @@
1
+ import { array } from './array.mjs';
2
+ import { boolean as _boolean } from './boolean.mjs';
3
+ import { dict } from './mapping.mjs';
4
+ import { either6 } from './either.mjs';
5
+ import { lazy } from './lazy.mjs';
6
+ import { null_ } from './constants.mjs';
7
+ import { number } from './number.mjs';
8
+ import { string } from './string.mjs';
9
+ export var jsonObject = lazy(function () {
10
+ return dict(json);
11
+ });
12
+ export var jsonArray = lazy(function () {
13
+ return array(json);
14
+ });
15
+ export var json = either6(null_, string, number, _boolean, jsonObject, jsonArray);
package/core/lazy.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { Decoder } from '../_types';
2
+
3
+ export function lazy<T>(decoderFn: () => Decoder<T>): Decoder<T>;
File without changes
@@ -0,0 +1,6 @@
1
+ /// <reference lib="es6" />
2
+
3
+ import { Decoder } from '../_types';
4
+
5
+ export function mapping<T>(decoder: Decoder<T>): Decoder<Map<string, T>>;
6
+ export function dict<T>(decoder: Decoder<T>): Decoder<{ [key: string]: T }>;
package/core/mapping.js CHANGED
@@ -4,17 +4,13 @@ exports.__esModule = true;
4
4
  exports.dict = dict;
5
5
  exports.mapping = mapping;
6
6
 
7
- var Result = _interopRequireWildcard(require("../result"));
8
-
9
7
  var _annotate = require("../annotate");
10
8
 
11
9
  var _composition = require("./composition");
12
10
 
13
- var _object = require("./object");
14
-
15
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+ var _result = require("../result");
16
12
 
17
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ var _object = require("./object");
18
14
 
19
15
  /**
20
16
  * Given an object, will decode a Map of string keys to whatever values.
@@ -49,9 +45,9 @@ function mapping(decoder) {
49
45
  });
50
46
 
51
47
  if (errors !== null) {
52
- return Result.err((0, _annotate.merge)((0, _annotate.annotateObject)(blob), errors));
48
+ return (0, _result.err)((0, _annotate.merge)((0, _annotate.annotateObject)(blob), errors));
53
49
  } else {
54
- return Result.ok(new Map(tuples));
50
+ return (0, _result.ok)(new Map(tuples));
55
51
  }
56
52
  });
57
53
  }
@@ -1,8 +1,8 @@
1
1
  // @flow strict
2
2
 
3
- import * as Result from '../result';
4
3
  import { annotateObject } from '../annotate';
5
4
  import { compose, map } from './composition';
5
+ import { err, ok } from '../result';
6
6
  import { merge } from '../annotate';
7
7
  import { pojo } from './object';
8
8
  import type { Annotation } from '../annotate';
@@ -39,9 +39,9 @@ export function mapping<T>(decoder: Decoder<T>): Decoder<Map<string, T>> {
39
39
  });
40
40
 
41
41
  if (errors !== null) {
42
- return Result.err(merge(annotateObject(blob), errors));
42
+ return err(merge(annotateObject(blob), errors));
43
43
  } else {
44
- return Result.ok(new Map(tuples));
44
+ return ok(new Map(tuples));
45
45
  }
46
46
  });
47
47
  }
@@ -1,8 +1,8 @@
1
- import * as Result from '../result';
2
- import { annotateObject } from '../annotate';
3
- import { compose, map } from './composition';
4
- import { merge } from '../annotate';
5
- import { pojo } from './object';
1
+ import { annotateObject } from '../annotate.mjs';
2
+ import { compose, map } from './composition.mjs';
3
+ import { err, ok } from '../result.mjs';
4
+ import { merge } from '../annotate.mjs';
5
+ import { pojo } from './object.mjs';
6
6
 
7
7
  /**
8
8
  * Given an object, will decode a Map of string keys to whatever values.
@@ -37,9 +37,9 @@ export function mapping(decoder) {
37
37
  });
38
38
 
39
39
  if (errors !== null) {
40
- return Result.err(merge(annotateObject(blob), errors));
40
+ return err(merge(annotateObject(blob), errors));
41
41
  } else {
42
- return Result.ok(new Map(tuples));
42
+ return ok(new Map(tuples));
43
43
  }
44
44
  });
45
45
  }
@@ -0,0 +1,6 @@
1
+ import { Decoder } from '../_types';
2
+
3
+ export const integer: Decoder<number>;
4
+ export const number: Decoder<number>;
5
+ export const positiveInteger: Decoder<number>;
6
+ export const positiveNumber: Decoder<number>;
package/core/number.js CHANGED
@@ -3,18 +3,14 @@
3
3
  exports.__esModule = true;
4
4
  exports.positiveNumber = exports.positiveInteger = exports.number = exports.integer = void 0;
5
5
 
6
- var Result = _interopRequireWildcard(require("../result"));
7
-
8
6
  var _annotate = require("../annotate");
9
7
 
10
8
  var _composition = require("./composition");
11
9
 
12
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
-
14
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+ var _result = require("../result");
15
11
 
16
12
  var anyNumber = function anyNumber(blob) {
17
- return typeof blob === 'number' && !Number.isNaN(blob) ? Result.ok(blob) : Result.err((0, _annotate.annotate)(blob, 'Must be number'));
13
+ return typeof blob === 'number' && !Number.isNaN(blob) ? (0, _result.ok)(blob) : (0, _result.err)((0, _annotate.annotate)(blob, 'Must be number'));
18
14
  };
19
15
 
20
16
  var isInteger = function isInteger(n) {
@@ -1,14 +1,14 @@
1
1
  // @flow strict
2
2
 
3
- import * as Result from '../result';
4
3
  import { annotate } from '../annotate';
5
4
  import { compose, predicate } from './composition';
5
+ import { err, ok } from '../result';
6
6
  import type { Decoder } from '../_types';
7
7
 
8
8
  const anyNumber: Decoder<number> = (blob: mixed) => {
9
9
  return typeof blob === 'number' && !Number.isNaN(blob)
10
- ? Result.ok(blob)
11
- : Result.err(annotate(blob, 'Must be number'));
10
+ ? ok(blob)
11
+ : err(annotate(blob, 'Must be number'));
12
12
  };
13
13
 
14
14
  const isInteger = (n: number) => Number.isInteger(n);
@@ -1,9 +1,9 @@
1
- import * as Result from '../result';
2
- import { annotate } from '../annotate';
3
- import { compose, predicate } from './composition';
1
+ import { annotate } from '../annotate.mjs';
2
+ import { compose, predicate } from './composition.mjs';
3
+ import { err, ok } from '../result.mjs';
4
4
 
5
5
  var anyNumber = function anyNumber(blob) {
6
- return typeof blob === 'number' && !Number.isNaN(blob) ? Result.ok(blob) : Result.err(annotate(blob, 'Must be number'));
6
+ return typeof blob === 'number' && !Number.isNaN(blob) ? ok(blob) : err(annotate(blob, 'Must be number'));
7
7
  };
8
8
 
9
9
  var isInteger = function isInteger(n) {
@@ -0,0 +1,33 @@
1
+ import { Decoder, DecoderType } from '../_types';
2
+ import { AllowImplicit } from './_helpers';
3
+
4
+ export type ObjectDecoderType<T> = AllowImplicit<{
5
+ [key in keyof T]: DecoderType<T[key]>;
6
+ }>;
7
+
8
+ export const pojo: Decoder<{ [key: string]: unknown }>;
9
+
10
+ export function object<O extends { [key: string]: Decoder<any> }>(
11
+ mapping: O,
12
+ ): Decoder<{ [K in keyof ObjectDecoderType<O>]: ObjectDecoderType<O>[K] }>;
13
+ // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14
+ // This is basically just equivalent to:
15
+ // ObjectDecoderType<O>
16
+ //
17
+ // But by "resolving" this with a mapped type, we remove the helper
18
+ // type names from the inferred type here, making this much easier to
19
+ // work with while developing.
20
+
21
+ export function exact<O extends { [key: string]: Decoder<any> }>(
22
+ mapping: O,
23
+ ): Decoder<{ [K in keyof ObjectDecoderType<O>]: ObjectDecoderType<O>[K] }>;
24
+ // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
25
+ // Ditto (see above)
26
+
27
+ export function inexact<O extends { [key: string]: Decoder<any> }>(
28
+ mapping: O,
29
+ ): Decoder<
30
+ { [K in keyof ObjectDecoderType<O>]: ObjectDecoderType<O>[K] } & {
31
+ [extra: string]: unknown;
32
+ }
33
+ >;
package/core/object.js CHANGED
@@ -6,15 +6,11 @@ exports.inexact = inexact;
6
6
  exports.object = object;
7
7
  exports.pojo = void 0;
8
8
 
9
- var Result = _interopRequireWildcard(require("../result"));
10
-
11
9
  var _annotate = require("../annotate");
12
10
 
13
11
  var _composition = require("./composition");
14
12
 
15
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
-
17
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ var _result = require("../result");
18
14
 
19
15
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
20
16
 
@@ -36,7 +32,7 @@ function subtract(xs, ys) {
36
32
  }
37
33
 
38
34
  var pojo = function pojo(blob) {
39
- return isPojo(blob) ? Result.ok( // NOTE:
35
+ return isPojo(blob) ? (0, _result.ok)( // NOTE:
40
36
  // Since Flow 0.98, typeof o === 'object' refines to
41
37
  // {| +[string]: mixed |}
42
38
  // instead of
@@ -50,7 +46,7 @@ var pojo = function pojo(blob) {
50
46
  // way to turn a read-only Object to a writeable one in ES6 seems
51
47
  // to be to use object-spread. (Going off this benchmark:
52
48
  // https://thecodebarbarian.com/object-assign-vs-object-spread.html)
53
- _extends({}, blob)) : Result.err((0, _annotate.annotate)(blob, 'Must be an object'));
49
+ _extends({}, blob)) : (0, _result.err)((0, _annotate.annotate)(blob, 'Must be an object'));
54
50
  };
55
51
  /**
56
52
  * Given a mapping of fields-to-decoders, builds a decoder for an object type.
@@ -139,10 +135,10 @@ function object(mapping) {
139
135
  objAnn = (0, _annotate.updateText)(objAnn, "Missing " + pluralized + ": " + errMsg);
140
136
  }
141
137
 
142
- return Result.err(objAnn);
138
+ return (0, _result.err)(objAnn);
143
139
  }
144
140
 
145
- return Result.ok(record);
141
+ return (0, _result.ok)(record);
146
142
  });
147
143
  }
148
144
 
@@ -154,10 +150,10 @@ function exact(mapping) {
154
150
  var superfluous = subtract(actual, allowed);
155
151
 
156
152
  if (superfluous.size > 0) {
157
- return Result.err((0, _annotate.annotate)(blob, "Superfluous keys: " + Array.from(superfluous).join(', ')));
153
+ return (0, _result.err)((0, _annotate.annotate)(blob, "Superfluous keys: " + Array.from(superfluous).join(', ')));
158
154
  }
159
155
 
160
- return Result.ok(blob);
156
+ return (0, _result.ok)(blob);
161
157
  }); // Defer to the "object" decoder for doing the real decoding work. Since
162
158
  // we made sure there are no superfluous keys in this structure, it's now
163
159
  // safe to force-cast it to an $Exact<> type.
@@ -1,8 +1,8 @@
1
1
  // @flow strict
2
2
 
3
- import * as Result from '../result';
4
3
  import { annotate, annotateObject, merge, updateText } from '../annotate';
5
4
  import { compose, map } from './composition';
5
+ import { err, ok } from '../result';
6
6
  import type { Annotation } from '../annotate';
7
7
  import type { Decoder, DecoderType } from '../_types';
8
8
 
@@ -36,7 +36,7 @@ function subtract(xs: Set<string>, ys: Set<string>): Set<string> {
36
36
 
37
37
  export const pojo: Decoder<{| [string]: mixed |}> = (blob: mixed) => {
38
38
  return isPojo(blob)
39
- ? Result.ok(
39
+ ? ok(
40
40
  // NOTE:
41
41
  // Since Flow 0.98, typeof o === 'object' refines to
42
42
  // {| +[string]: mixed |}
@@ -53,7 +53,7 @@ export const pojo: Decoder<{| [string]: mixed |}> = (blob: mixed) => {
53
53
  // https://thecodebarbarian.com/object-assign-vs-object-spread.html)
54
54
  { ...blob },
55
55
  )
56
- : Result.err(annotate(blob, 'Must be an object'));
56
+ : err(annotate(blob, 'Must be an object'));
57
57
  };
58
58
 
59
59
  /**
@@ -144,10 +144,10 @@ export function object<O: { +[field: string]: AnyDecoder, ... }>(
144
144
  objAnn = updateText(objAnn, `Missing ${pluralized}: ${errMsg}`);
145
145
  }
146
146
 
147
- return Result.err(objAnn);
147
+ return err(objAnn);
148
148
  }
149
149
 
150
- return Result.ok(record);
150
+ return ok(record);
151
151
  });
152
152
  }
153
153
 
@@ -160,11 +160,11 @@ export function exact<O: { +[field: string]: AnyDecoder, ... }>(
160
160
  const actual = new Set(Object.keys(blob));
161
161
  const superfluous = subtract(actual, allowed);
162
162
  if (superfluous.size > 0) {
163
- return Result.err(
163
+ return err(
164
164
  annotate(blob, `Superfluous keys: ${Array.from(superfluous).join(', ')}`),
165
165
  );
166
166
  }
167
- return Result.ok(blob);
167
+ return ok(blob);
168
168
  });
169
169
 
170
170
  // Defer to the "object" decoder for doing the real decoding work. Since
@@ -1,8 +1,8 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- import * as Result from '../result';
4
- import { annotate, annotateObject, merge, updateText } from '../annotate';
5
- import { compose, map } from './composition';
3
+ import { annotate, annotateObject, merge, updateText } from '../annotate.mjs';
4
+ import { compose, map } from './composition.mjs';
5
+ import { err, ok } from '../result.mjs';
6
6
 
7
7
  function isPojo(o) {
8
8
  return o !== null && o !== undefined && typeof o === 'object' && // This still seems to be the only reliable way to determine whether
@@ -22,7 +22,7 @@ function subtract(xs, ys) {
22
22
  }
23
23
 
24
24
  export var pojo = function pojo(blob) {
25
- return isPojo(blob) ? Result.ok( // NOTE:
25
+ return isPojo(blob) ? ok( // NOTE:
26
26
  // Since Flow 0.98, typeof o === 'object' refines to
27
27
  // {| +[string]: mixed |}
28
28
  // instead of
@@ -36,7 +36,7 @@ export var pojo = function pojo(blob) {
36
36
  // way to turn a read-only Object to a writeable one in ES6 seems
37
37
  // to be to use object-spread. (Going off this benchmark:
38
38
  // https://thecodebarbarian.com/object-assign-vs-object-spread.html)
39
- _extends({}, blob)) : Result.err(annotate(blob, 'Must be an object'));
39
+ _extends({}, blob)) : err(annotate(blob, 'Must be an object'));
40
40
  };
41
41
  /**
42
42
  * Given a mapping of fields-to-decoders, builds a decoder for an object type.
@@ -122,10 +122,10 @@ export function object(mapping) {
122
122
  objAnn = updateText(objAnn, "Missing " + pluralized + ": " + errMsg);
123
123
  }
124
124
 
125
- return Result.err(objAnn);
125
+ return err(objAnn);
126
126
  }
127
127
 
128
- return Result.ok(record);
128
+ return ok(record);
129
129
  });
130
130
  }
131
131
  export function exact(mapping) {
@@ -136,10 +136,10 @@ export function exact(mapping) {
136
136
  var superfluous = subtract(actual, allowed);
137
137
 
138
138
  if (superfluous.size > 0) {
139
- return Result.err(annotate(blob, "Superfluous keys: " + Array.from(superfluous).join(', ')));
139
+ return err(annotate(blob, "Superfluous keys: " + Array.from(superfluous).join(', ')));
140
140
  }
141
141
 
142
- return Result.ok(blob);
142
+ return ok(blob);
143
143
  }); // Defer to the "object" decoder for doing the real decoding work. Since
144
144
  // we made sure there are no superfluous keys in this structure, it's now
145
145
  // safe to force-cast it to an $Exact<> type.
@@ -0,0 +1,5 @@
1
+ import { Decoder } from '../_types';
2
+
3
+ export function optional<T>(decoder: Decoder<T>): Decoder<T | undefined>;
4
+ export function nullable<T>(decoder: Decoder<T>): Decoder<T | null>;
5
+ export function maybe<T>(decoder: Decoder<T>): Decoder<T | null | undefined>;
package/core/optional.js CHANGED
@@ -5,17 +5,13 @@ exports.maybe = maybe;
5
5
  exports.nullable = nullable;
6
6
  exports.optional = optional;
7
7
 
8
- var Result = _interopRequireWildcard(require("../result"));
9
-
10
8
  var _annotate = require("../annotate");
11
9
 
12
10
  var _either = require("./either");
13
11
 
14
- var _constants = require("./constants");
15
-
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ var _result = require("../result");
17
13
 
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ var _constants = require("./constants");
19
15
 
20
16
  /**
21
17
  * Builds a Decoder that returns Ok for either `undefined` or `T` values,
@@ -41,8 +37,8 @@ function nullable(decoder) {
41
37
 
42
38
 
43
39
  var undefined_or_null = function undefined_or_null(blob) {
44
- return blob === undefined || blob === null ? Result.ok(blob) : // Combine error message into a single line
45
- Result.err((0, _annotate.annotate)(blob, 'Must be undefined or null'));
40
+ return blob === undefined || blob === null ? (0, _result.ok)(blob) : // Combine error message into a single line
41
+ (0, _result.err)((0, _annotate.annotate)(blob, 'Must be undefined or null'));
46
42
  };
47
43
  /**
48
44
  * Decoder that only returns Ok for `null` or `undefined` inputs.
@@ -1,8 +1,8 @@
1
1
  // @flow strict
2
2
 
3
- import * as Result from '../result';
4
3
  import { annotate } from '../annotate';
5
4
  import { either } from './either';
5
+ import { err, ok } from '../result';
6
6
  import { null_, undefined_ } from './constants';
7
7
  import type { Decoder } from '../_types';
8
8
 
@@ -29,9 +29,9 @@ export function nullable<T>(decoder: Decoder<T>): Decoder<null | T> {
29
29
  */
30
30
  const undefined_or_null: Decoder<null | void> = (blob: mixed) =>
31
31
  blob === undefined || blob === null
32
- ? Result.ok(blob)
32
+ ? ok(blob)
33
33
  : // Combine error message into a single line
34
- Result.err(annotate(blob, 'Must be undefined or null'));
34
+ err(annotate(blob, 'Must be undefined or null'));
35
35
 
36
36
  /**
37
37
  * Decoder that only returns Ok for `null` or `undefined` inputs.
@@ -1,7 +1,7 @@
1
- import * as Result from '../result';
2
- import { annotate } from '../annotate';
3
- import { either } from './either';
4
- import { null_, undefined_ } from './constants';
1
+ import { annotate } from '../annotate.mjs';
2
+ import { either } from './either.mjs';
3
+ import { err, ok } from '../result.mjs';
4
+ import { null_, undefined_ } from './constants.mjs';
5
5
 
6
6
  /**
7
7
  * Builds a Decoder that returns Ok for either `undefined` or `T` values,
@@ -25,8 +25,8 @@ export function nullable(decoder) {
25
25
  */
26
26
 
27
27
  var undefined_or_null = function undefined_or_null(blob) {
28
- return blob === undefined || blob === null ? Result.ok(blob) : // Combine error message into a single line
29
- Result.err(annotate(blob, 'Must be undefined or null'));
28
+ return blob === undefined || blob === null ? ok(blob) : // Combine error message into a single line
29
+ err(annotate(blob, 'Must be undefined or null'));
30
30
  };
31
31
  /**
32
32
  * Decoder that only returns Ok for `null` or `undefined` inputs.
@@ -0,0 +1,7 @@
1
+ import { Decoder } from '../_types';
2
+
3
+ export const string: Decoder<string>;
4
+ export const nonEmptyString: Decoder<string>;
5
+ export function regex(regex: RegExp, msg: string): Decoder<string>;
6
+ export const email: Decoder<string>;
7
+ export function url(schemes?: readonly string[]): Decoder<string>;
package/core/string.js CHANGED
@@ -5,15 +5,11 @@ exports.nonEmptyString = exports.email = void 0;
5
5
  exports.regex = regex;
6
6
  exports.url = exports.string = void 0;
7
7
 
8
- var Result = _interopRequireWildcard(require("../result"));
9
-
10
8
  var _annotate = require("../annotate");
11
9
 
12
10
  var _composition = require("./composition");
13
11
 
14
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
-
16
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+ var _result = require("../result");
17
13
 
18
14
  /** Match groups in this regex:
19
15
  * \1 - the scheme
@@ -30,7 +26,7 @@ var DEFAULT_SCHEMES = ['https'];
30
26
  */
31
27
 
32
28
  var string = function string(blob) {
33
- return typeof blob === 'string' ? Result.ok(blob) : Result.err((0, _annotate.annotate)(blob, 'Must be string'));
29
+ return typeof blob === 'string' ? (0, _result.ok)(blob) : (0, _result.err)((0, _annotate.annotate)(blob, 'Must be string'));
34
30
  };
35
31
  /**
36
32
  * Decoder that only returns Ok for non-empty string inputs. Err otherwise.
@@ -82,14 +78,14 @@ var url = function url(schemes) {
82
78
  var matches = value.match(url_re);
83
79
 
84
80
  if (!matches) {
85
- return Result.err((0, _annotate.annotate)(value, 'Must be URL'));
81
+ return (0, _result.err)((0, _annotate.annotate)(value, 'Must be URL'));
86
82
  } else {
87
83
  var scheme = matches[1];
88
84
 
89
85
  if (schemes.length === 0 || schemes.includes(scheme.toLowerCase())) {
90
- return Result.ok(value);
86
+ return (0, _result.ok)(value);
91
87
  } else {
92
- return Result.err((0, _annotate.annotate)(value, "URL scheme must be any of: " + schemes.join(', ')));
88
+ return (0, _result.err)((0, _annotate.annotate)(value, "URL scheme must be any of: " + schemes.join(', ')));
93
89
  }
94
90
  }
95
91
  });
@@ -1,8 +1,8 @@
1
1
  // @flow strict
2
2
 
3
- import * as Result from '../result';
4
3
  import { annotate } from '../annotate';
5
4
  import { compose, predicate } from './composition';
5
+ import { err, ok } from '../result';
6
6
  import type { Decoder } from '../_types';
7
7
 
8
8
  /** Match groups in this regex:
@@ -22,9 +22,7 @@ const DEFAULT_SCHEMES = ['https'];
22
22
  * Decoder that only returns Ok for string inputs. Err otherwise.
23
23
  */
24
24
  export const string: Decoder<string> = (blob: mixed) => {
25
- return typeof blob === 'string'
26
- ? Result.ok(blob)
27
- : Result.err(annotate(blob, 'Must be string'));
25
+ return typeof blob === 'string' ? ok(blob) : err(annotate(blob, 'Must be string'));
28
26
  };
29
27
 
30
28
  /**
@@ -68,13 +66,13 @@ export const url = (schemes: $ReadOnlyArray<string> = DEFAULT_SCHEMES): Decoder<
68
66
  compose(string, (value: string) => {
69
67
  const matches = value.match(url_re);
70
68
  if (!matches) {
71
- return Result.err(annotate(value, 'Must be URL'));
69
+ return err(annotate(value, 'Must be URL'));
72
70
  } else {
73
71
  const scheme = matches[1];
74
72
  if (schemes.length === 0 || schemes.includes(scheme.toLowerCase())) {
75
- return Result.ok(value);
73
+ return ok(value);
76
74
  } else {
77
- return Result.err(
75
+ return err(
78
76
  annotate(value, `URL scheme must be any of: ${schemes.join(', ')}`),
79
77
  );
80
78
  }