Comparing version 2.1.0 to 2.1.1
@@ -17,2 +17,7 @@ # Changelog | ||
# 2.1.1 | ||
- **Bug Fix** | ||
- fix `record` domain handling, closes #391 (@gcanti) | ||
# 2.1.0 | ||
@@ -19,0 +24,0 @@ |
@@ -566,3 +566,3 @@ /** | ||
*/ | ||
export declare const record: <D extends Mixed, C extends Mixed>(domain: D, codomain: C, name?: string) => RecordC<D, C>; | ||
export declare function record<D extends Mixed, C extends Mixed>(domain: D, codomain: C, name?: string): RecordC<D, C>; | ||
/** | ||
@@ -569,0 +569,0 @@ * @since 1.0.0 |
@@ -25,2 +25,9 @@ var __extends = (this && this.__extends) || (function () { | ||
}; | ||
var __spreadArrays = (this && this.__spreadArrays) || function () { | ||
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; | ||
for (var r = Array(s), k = 0, i = 0; i < il; i++) | ||
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) | ||
r[k] = a[j]; | ||
return r; | ||
}; | ||
/** | ||
@@ -127,7 +134,2 @@ * @since 1.0.0 | ||
}; | ||
var getIsCodec = function (tag) { return function (codec) { return codec._tag === tag; }; }; | ||
// tslint:disable-next-line: deprecation | ||
var isAnyCodec = getIsCodec('AnyType'); | ||
var isInterfaceCodec = getIsCodec('InterfaceType'); | ||
var isPartialCodec = getIsCodec('PartialType'); | ||
// | ||
@@ -671,6 +673,57 @@ // basic types | ||
export { DictionaryType }; | ||
function enumerableRecord(keys, domain, codomain, name) { | ||
if (name === void 0) { name = "{ [K in " + domain.name + "]: " + codomain.name + " }"; } | ||
var len = keys.length; | ||
return new DictionaryType(name, function (u) { return UnknownRecord.is(u) && keys.every(function (k) { return codomain.is(u[k]); }); }, function (u, c) { | ||
return chain(UnknownRecord.validate(u, c), function (o) { | ||
var a = {}; | ||
var errors = []; | ||
var changed = false; | ||
for (var i = 0; i < len; i++) { | ||
var k = keys[i]; | ||
var ok = o[k]; | ||
var codomainResult = codomain.validate(ok, appendContext(c, k, codomain, ok)); | ||
if (isLeft(codomainResult)) { | ||
pushAll(errors, codomainResult.left); | ||
} | ||
else { | ||
var vok = codomainResult.right; | ||
changed = changed || vok !== ok; | ||
a[k] = vok; | ||
} | ||
} | ||
return errors.length > 0 ? failures(errors) : success((changed || Object.keys(o).length !== len ? a : o)); | ||
}); | ||
}, codomain.encode === identity | ||
? identity | ||
: function (a) { | ||
var s = {}; | ||
for (var i = 0; i < len; i++) { | ||
var k = keys[i]; | ||
s[k] = codomain.encode(a[k]); | ||
} | ||
return s; | ||
}, domain, codomain); | ||
} | ||
/** | ||
* @since 1.7.1 | ||
* @internal | ||
*/ | ||
export var record = function (domain, codomain, name) { | ||
export function getDomainKeys(domain) { | ||
var _a; | ||
if (isLiteralC(domain)) { | ||
var literal_1 = domain.value; | ||
if (string.is(literal_1)) { | ||
return _a = {}, _a[literal_1] = null, _a; | ||
} | ||
} | ||
else if (isKeyofC(domain)) { | ||
return domain.keys; | ||
} | ||
else if (isUnionC(domain)) { | ||
var keys = domain.types.map(function (type) { return getDomainKeys(type); }); | ||
return keys.some(undefinedType.is) ? undefined : Object.assign.apply(Object, __spreadArrays([{}], keys)); | ||
} | ||
return undefined; | ||
} | ||
function nonEnumerableRecord(domain, codomain, name) { | ||
if (name === void 0) { name = "{ [K in " + domain.name + "]: " + codomain.name + " }"; } | ||
@@ -681,3 +734,3 @@ return new DictionaryType(name, function (u) { | ||
} | ||
return isAnyCodec(codomain) && Array.isArray(u); | ||
return isAnyC(codomain) && Array.isArray(u); | ||
}, function (u, c) { | ||
@@ -714,3 +767,3 @@ if (UnknownRecord.is(u)) { | ||
} | ||
if (isAnyCodec(codomain) && Array.isArray(u)) { | ||
if (isAnyC(codomain) && Array.isArray(u)) { | ||
return success(u); | ||
@@ -731,4 +784,13 @@ } | ||
}, domain, codomain); | ||
}; | ||
} | ||
/** | ||
* @since 1.7.1 | ||
*/ | ||
export function record(domain, codomain, name) { | ||
var keys = getDomainKeys(domain); | ||
return keys | ||
? enumerableRecord(Object.keys(keys), domain, codomain, name) | ||
: nonEnumerableRecord(domain, codomain, name); | ||
} | ||
/** | ||
* @since 1.0.0 | ||
@@ -1084,6 +1146,6 @@ */ | ||
var getExactTypeName = function (codec) { | ||
if (isInterfaceCodec(codec)) { | ||
if (isTypeC(codec)) { | ||
return "{| " + getNameFromProps(codec.props) + " |}"; | ||
} | ||
else if (isPartialCodec(codec)) { | ||
else if (isPartialC(codec)) { | ||
return getPartialTypeName("{| " + getNameFromProps(codec.props) + " |}"); | ||
@@ -1330,8 +1392,18 @@ } | ||
} | ||
// tslint:disable-next-line: deprecation | ||
function isAnyC(codec) { | ||
return codec._tag === 'AnyType'; | ||
} | ||
function isLiteralC(codec) { | ||
return codec._tag === 'LiteralType'; | ||
} | ||
function isKeyofC(codec) { | ||
return codec._tag === 'KeyofType'; | ||
} | ||
function isTypeC(codec) { | ||
return codec._tag === 'InterfaceType'; | ||
} | ||
function isPartialC(codec) { | ||
return codec._tag === 'PartialType'; | ||
} | ||
// tslint:disable-next-line: deprecation | ||
@@ -1338,0 +1410,0 @@ function isStrictC(codec) { |
@@ -566,3 +566,3 @@ /** | ||
*/ | ||
export declare const record: <D extends Mixed, C extends Mixed>(domain: D, codomain: C, name?: string) => RecordC<D, C>; | ||
export declare function record<D extends Mixed, C extends Mixed>(domain: D, codomain: C, name?: string): RecordC<D, C>; | ||
/** | ||
@@ -569,0 +569,0 @@ * @since 1.0.0 |
100
lib/index.js
@@ -26,2 +26,9 @@ "use strict"; | ||
}; | ||
var __spreadArrays = (this && this.__spreadArrays) || function () { | ||
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; | ||
for (var r = Array(s), k = 0, i = 0; i < il; i++) | ||
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) | ||
r[k] = a[j]; | ||
return r; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -129,7 +136,2 @@ /** | ||
}; | ||
var getIsCodec = function (tag) { return function (codec) { return codec._tag === tag; }; }; | ||
// tslint:disable-next-line: deprecation | ||
var isAnyCodec = getIsCodec('AnyType'); | ||
var isInterfaceCodec = getIsCodec('InterfaceType'); | ||
var isPartialCodec = getIsCodec('PartialType'); | ||
// | ||
@@ -678,6 +680,58 @@ // basic types | ||
exports.DictionaryType = DictionaryType; | ||
function enumerableRecord(keys, domain, codomain, name) { | ||
if (name === void 0) { name = "{ [K in " + domain.name + "]: " + codomain.name + " }"; } | ||
var len = keys.length; | ||
return new DictionaryType(name, function (u) { return exports.UnknownRecord.is(u) && keys.every(function (k) { return codomain.is(u[k]); }); }, function (u, c) { | ||
return chain(exports.UnknownRecord.validate(u, c), function (o) { | ||
var a = {}; | ||
var errors = []; | ||
var changed = false; | ||
for (var i = 0; i < len; i++) { | ||
var k = keys[i]; | ||
var ok = o[k]; | ||
var codomainResult = codomain.validate(ok, exports.appendContext(c, k, codomain, ok)); | ||
if (Either_1.isLeft(codomainResult)) { | ||
pushAll(errors, codomainResult.left); | ||
} | ||
else { | ||
var vok = codomainResult.right; | ||
changed = changed || vok !== ok; | ||
a[k] = vok; | ||
} | ||
} | ||
return errors.length > 0 ? exports.failures(errors) : exports.success((changed || Object.keys(o).length !== len ? a : o)); | ||
}); | ||
}, codomain.encode === exports.identity | ||
? exports.identity | ||
: function (a) { | ||
var s = {}; | ||
for (var i = 0; i < len; i++) { | ||
var k = keys[i]; | ||
s[k] = codomain.encode(a[k]); | ||
} | ||
return s; | ||
}, domain, codomain); | ||
} | ||
/** | ||
* @since 1.7.1 | ||
* @internal | ||
*/ | ||
exports.record = function (domain, codomain, name) { | ||
function getDomainKeys(domain) { | ||
var _a; | ||
if (isLiteralC(domain)) { | ||
var literal_1 = domain.value; | ||
if (exports.string.is(literal_1)) { | ||
return _a = {}, _a[literal_1] = null, _a; | ||
} | ||
} | ||
else if (isKeyofC(domain)) { | ||
return domain.keys; | ||
} | ||
else if (isUnionC(domain)) { | ||
var keys = domain.types.map(function (type) { return getDomainKeys(type); }); | ||
return keys.some(undefinedType.is) ? undefined : Object.assign.apply(Object, __spreadArrays([{}], keys)); | ||
} | ||
return undefined; | ||
} | ||
exports.getDomainKeys = getDomainKeys; | ||
function nonEnumerableRecord(domain, codomain, name) { | ||
if (name === void 0) { name = "{ [K in " + domain.name + "]: " + codomain.name + " }"; } | ||
@@ -688,3 +742,3 @@ return new DictionaryType(name, function (u) { | ||
} | ||
return isAnyCodec(codomain) && Array.isArray(u); | ||
return isAnyC(codomain) && Array.isArray(u); | ||
}, function (u, c) { | ||
@@ -721,3 +775,3 @@ if (exports.UnknownRecord.is(u)) { | ||
} | ||
if (isAnyCodec(codomain) && Array.isArray(u)) { | ||
if (isAnyC(codomain) && Array.isArray(u)) { | ||
return exports.success(u); | ||
@@ -738,4 +792,14 @@ } | ||
}, domain, codomain); | ||
}; | ||
} | ||
/** | ||
* @since 1.7.1 | ||
*/ | ||
function record(domain, codomain, name) { | ||
var keys = getDomainKeys(domain); | ||
return keys | ||
? enumerableRecord(Object.keys(keys), domain, codomain, name) | ||
: nonEnumerableRecord(domain, codomain, name); | ||
} | ||
exports.record = record; | ||
/** | ||
* @since 1.0.0 | ||
@@ -1093,6 +1157,6 @@ */ | ||
var getExactTypeName = function (codec) { | ||
if (isInterfaceCodec(codec)) { | ||
if (isTypeC(codec)) { | ||
return "{| " + getNameFromProps(codec.props) + " |}"; | ||
} | ||
else if (isPartialCodec(codec)) { | ||
else if (isPartialC(codec)) { | ||
return getPartialTypeName("{| " + getNameFromProps(codec.props) + " |}"); | ||
@@ -1220,3 +1284,3 @@ } | ||
*/ | ||
exports.dictionary = exports.record; | ||
exports.dictionary = record; | ||
/** | ||
@@ -1314,8 +1378,18 @@ * @since 1.0.0 | ||
} | ||
// tslint:disable-next-line: deprecation | ||
function isAnyC(codec) { | ||
return codec._tag === 'AnyType'; | ||
} | ||
function isLiteralC(codec) { | ||
return codec._tag === 'LiteralType'; | ||
} | ||
function isKeyofC(codec) { | ||
return codec._tag === 'KeyofType'; | ||
} | ||
function isTypeC(codec) { | ||
return codec._tag === 'InterfaceType'; | ||
} | ||
function isPartialC(codec) { | ||
return codec._tag === 'PartialType'; | ||
} | ||
// tslint:disable-next-line: deprecation | ||
@@ -1322,0 +1396,0 @@ function isStrictC(codec) { |
{ | ||
"name": "io-ts", | ||
"version": "2.1.0", | ||
"version": "2.1.1", | ||
"description": "TypeScript compatible runtime type system for IO validation", | ||
@@ -5,0 +5,0 @@ "files": [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
189298
5185