@appliedblockchain/assert-combinators
Advanced tools
Comparing version 5.2.0 to 5.3.0
# Changelog | ||
## [v5.3.0](../../compare/v5.2.0...v5.3.0) (2022-03-28) | ||
* Allow primitives in objects. | ||
* Updating changelog. | ||
## [v5.2.0](../../compare/v5.1.1...v5.2.0) (2022-03-28) | ||
@@ -4,0 +9,0 @@ |
@@ -1,3 +0,3 @@ | ||
import type { Assert, Asserted } from './prelude.js'; | ||
declare const object: <T extends Record<string, Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]: Asserted<T[k]>; }>; | ||
import type { Assert, Asserted, Primitive } from './prelude.js'; | ||
declare const object: <T extends Record<string, Primitive | Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]: Asserted<T[k]>; }>; | ||
export default object; |
@@ -1,3 +0,3 @@ | ||
import type { Assert, Asserted } from './prelude.js'; | ||
declare const partial: <T extends Record<string, Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]?: Asserted<T[k]> | undefined; }>; | ||
import type { Assert, Asserted, Primitive } from './prelude.js'; | ||
declare const partial: <T extends Record<string, Primitive | Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]?: Asserted<T[k]> | undefined; }>; | ||
export default partial; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const util_1 = require("util"); | ||
const partial = (kvs) => value => { | ||
@@ -11,3 +12,14 @@ if (typeof value !== 'object' || value == null) { | ||
} | ||
kvs[k](value[k]); | ||
const v = kvs[k]; | ||
if (typeof v === 'function') { | ||
try { | ||
v(value[k]); | ||
} | ||
catch (err) { | ||
throw new TypeError(`[${k}] ${err instanceof Error ? err.message : err}`); | ||
} | ||
} | ||
else if (v !== value[k]) { | ||
throw new TypeError(`Expected ${(0, util_1.inspect)(k)} to be ${(0, util_1.inspect)(v)}, got ${(0, util_1.inspect)(value[k])} in ${(0, util_1.inspect)(value)} object.`); | ||
} | ||
} | ||
@@ -14,0 +26,0 @@ return value; |
@@ -6,3 +6,3 @@ /** Helper no-op, parametric type to expand intellisense for alias types. */ | ||
export declare type Assert<R> = (value: unknown) => R; | ||
export declare type Asserted<A> = A extends (value: unknown) => infer U ? U : never; | ||
export declare type Asserted<A> = A extends (value: unknown) => infer U ? U : A extends Primitive ? A : never; | ||
export declare type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T; | ||
@@ -9,0 +9,0 @@ export declare type Keyed<T = unknown> = Record<string, T | undefined>; |
@@ -1,3 +0,3 @@ | ||
import type { Assert, Asserted } from './prelude.js'; | ||
declare const object: <T extends Record<string, Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]: Asserted<T[k]>; }>; | ||
import type { Assert, Asserted, Primitive } from './prelude.js'; | ||
declare const object: <T extends Record<string, Primitive | Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]: Asserted<T[k]>; }>; | ||
export default object; |
@@ -1,3 +0,3 @@ | ||
import type { Assert, Asserted } from './prelude.js'; | ||
declare const partial: <T extends Record<string, Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]?: Asserted<T[k]> | undefined; }>; | ||
import type { Assert, Asserted, Primitive } from './prelude.js'; | ||
declare const partial: <T extends Record<string, Primitive | Assert<unknown>>>(kvs: T) => Assert<{ [k in keyof T]?: Asserted<T[k]> | undefined; }>; | ||
export default partial; |
@@ -0,1 +1,2 @@ | ||
import { inspect } from 'util'; | ||
const partial = (kvs) => value => { | ||
@@ -9,3 +10,14 @@ if (typeof value !== 'object' || value == null) { | ||
} | ||
kvs[k](value[k]); | ||
const v = kvs[k]; | ||
if (typeof v === 'function') { | ||
try { | ||
v(value[k]); | ||
} | ||
catch (err) { | ||
throw new TypeError(`[${k}] ${err instanceof Error ? err.message : err}`); | ||
} | ||
} | ||
else if (v !== value[k]) { | ||
throw new TypeError(`Expected ${inspect(k)} to be ${inspect(v)}, got ${inspect(value[k])} in ${inspect(value)} object.`); | ||
} | ||
} | ||
@@ -12,0 +24,0 @@ return value; |
@@ -6,3 +6,3 @@ /** Helper no-op, parametric type to expand intellisense for alias types. */ | ||
export declare type Assert<R> = (value: unknown) => R; | ||
export declare type Asserted<A> = A extends (value: unknown) => infer U ? U : never; | ||
export declare type Asserted<A> = A extends (value: unknown) => infer U ? U : A extends Primitive ? A : never; | ||
export declare type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T; | ||
@@ -9,0 +9,0 @@ export declare type Keyed<T = unknown> = Record<string, T | undefined>; |
{ | ||
"name": "@appliedblockchain/assert-combinators", | ||
"version": "5.2.0", | ||
"version": "5.3.0", | ||
"description": "Assertion combinators.", | ||
@@ -5,0 +5,0 @@ "type": "module", |
import { inspect } from 'util' | ||
import type { Assert, Asserted } from './prelude.js' | ||
import type { Assert, Asserted, Primitive } from './prelude.js' | ||
const object = | ||
<T extends Record<string, Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]: Asserted<T[k]> }> => | ||
<T extends Record<string, Primitive | Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]: Asserted<T[k]> }> => | ||
value => { | ||
@@ -7,0 +7,0 @@ if (typeof value !== 'object' || value === null) { |
@@ -1,5 +0,6 @@ | ||
import type { Assert, Asserted } from './prelude.js' | ||
import { inspect } from 'util' | ||
import type { Assert, Asserted, Primitive } from './prelude.js' | ||
const partial = | ||
<T extends Record<string, Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]?: Asserted<T[k]> }> => | ||
<T extends Record<string, Primitive | Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]?: Asserted<T[k]> }> => | ||
value => { | ||
@@ -13,3 +14,12 @@ if (typeof value !== 'object' || value == null) { | ||
} | ||
kvs[k]((value as Record<string, unknown>)[k]) | ||
const v = kvs[k] | ||
if (typeof v === 'function') { | ||
try { | ||
v((value as Record<string, unknown>)[k]) | ||
} catch (err: unknown) { | ||
throw new TypeError(`[${k}] ${err instanceof Error ? err.message : err}`) | ||
} | ||
} else if (v !== (value as Record<string, unknown>)[k]) { | ||
throw new TypeError(`Expected ${inspect(k)} to be ${inspect(v)}, got ${inspect((value as Record<string, unknown>)[k])} in ${inspect(value)} object.`) | ||
} | ||
} | ||
@@ -16,0 +26,0 @@ return value |
@@ -13,3 +13,5 @@ /** Helper no-op, parametric type to expand intellisense for alias types. */ | ||
U : | ||
never | ||
A extends Primitive ? | ||
A : | ||
never | ||
@@ -16,0 +18,0 @@ export type Awaited<T> = |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
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
178022
3005