This repository was archived by the owner on Jun 10, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 6 files changed +27
-14
lines changed
Expand file tree Collapse file tree 6 files changed +27
-14
lines changed Original file line number Diff line number Diff line change 3131 "@appliedblockchain/eslint-config" : " 3.0.0" ,
3232 "@tsconfig/node16" : " 1.0.2" ,
3333 "@types/jest" : " 27.4.1" ,
34- "@typescript-eslint/eslint-plugin" : " 5.12.1 " ,
35- "@typescript-eslint/parser" : " 5.12.1 " ,
36- "eslint" : " 8.9 .0" ,
37- "eslint-plugin-jest" : " 26.1.1 " ,
34+ "@typescript-eslint/eslint-plugin" : " 5.17.0 " ,
35+ "@typescript-eslint/parser" : " 5.17.0 " ,
36+ "eslint" : " 8.12 .0" ,
37+ "eslint-plugin-jest" : " 26.1.3 " ,
3838 "jest" : " 27.5.1" ,
3939 "npm-check" : " 5.9.2" ,
40- "ts-jest" : " 27.1.3 " ,
41- "typescript" : " 4.5.5 "
40+ "ts-jest" : " 27.1.4 " ,
41+ "typescript" : " 4.6.3 "
4242 }
4343}
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ import { inspect } from 'util'
33import object from './object.js'
44
55const exact =
6- < T extends Record < string , Primitive | Assert < unknown > > > ( kvs : T ) : Assert < { [ k in keyof T ] : Asserted < T [ k ] > } > =>
6+ < T extends Record < string , Primitive | Assert < unknown > > > ( kvs : T ) : Assert < { [ k in keyof T ] : T [ k ] extends Primitive ? T [ k ] : Asserted < T [ k ] > } > =>
77 value => {
88 if ( typeof value !== 'object' || value === null ) {
99 throw new TypeError ( `Expected object, got ${ inspect ( value ) } .` )
@@ -15,7 +15,7 @@ const exact =
1515 if ( keys . length ) {
1616 throw new TypeError ( `Unexpected extra keys ${ keys . map ( String ) . join ( ', ' ) } in ${ inspect ( value ) } .` )
1717 }
18- return result as { [ k in keyof T ] : Asserted < T [ k ] > }
18+ return result as { [ k in keyof T ] : T [ k ] extends Primitive ? T [ k ] : Asserted < T [ k ] > }
1919 }
2020
2121export default exact
Original file line number Diff line number Diff line change 11import * as $ from './index.js'
22
3+ export type My = {
4+ id : number ,
5+ uuid : string ,
6+ reason : null | string
7+ }
8+
9+ export const assert : $ . Assert < My > =
10+ $ . object ( {
11+ id : $ . number ,
12+ uuid : $ . string ,
13+ reason : $ . nullOr ( $ . string )
14+ } )
15+
16+ export type My2 = $ . Asserted < typeof assert >
17+
318test ( 'object' , ( ) => {
419 const r = $ . object ( { foo : $ . string , bar : $ . number } ) ( JSON . parse ( '{"foo":"a","bar":1}' ) )
520 expect ( r ) . toEqual ( { foo : 'a' , bar : 1 } )
Original file line number Diff line number Diff line change @@ -2,7 +2,7 @@ import { inspect } from 'util'
22import type { Assert , Asserted , Primitive } from './prelude.js'
33
44const object =
5- < T extends Record < string , Primitive | Assert < unknown > > > ( kvs : T ) : Assert < { [ k in keyof T ] : Asserted < T [ k ] > } > =>
5+ < T extends Record < string , Assert < unknown > | Primitive > > ( kvs : T ) : Assert < { [ k in keyof T ] : T [ k ] extends Primitive ? T [ k ] : Asserted < T [ k ] > } > =>
66 value => {
77 if ( typeof value !== 'object' || value === null ) {
88 throw new TypeError ( `Expected object, got ${ inspect ( value ) } .` )
@@ -19,7 +19,7 @@ const object =
1919 throw new TypeError ( `Expected ${ inspect ( k ) } to be ${ inspect ( v ) } , got ${ inspect ( ( value as Record < string , unknown > ) [ k ] ) } in ${ inspect ( value ) } object.` )
2020 }
2121 }
22- return value as { [ k in keyof T ] : Asserted < T [ k ] > }
22+ return value as { [ k in keyof T ] : T [ k ] extends Primitive ? T [ k ] : Asserted < T [ k ] > }
2323 }
2424
2525export default object
Original file line number Diff line number Diff line change @@ -2,7 +2,7 @@ import { inspect } from 'util'
22import type { Assert , Asserted , Primitive } from './prelude.js'
33
44const partial =
5- < T extends Record < string , Primitive | Assert < unknown > > > ( kvs : T ) : Assert < { [ k in keyof T ] ?: Asserted < T [ k ] > } > =>
5+ < T extends Record < string , Primitive | Assert < unknown > > > ( kvs : T ) : Assert < { [ k in keyof T ] ?: T [ k ] extends Primitive ? T [ k ] : Asserted < T [ k ] > } > =>
66 value => {
77 if ( typeof value !== 'object' || value == null ) {
88 throw new TypeError ( 'Expected object.' )
Original file line number Diff line number Diff line change @@ -10,9 +10,7 @@ export type Assert<R> =
1010export type Asserted < A > =
1111 A extends ( value : unknown ) => infer U ?
1212 U :
13- A extends Primitive ?
14- A :
15- never
13+ never
1614
1715export type Awaited < T > =
1816 T extends PromiseLike < infer U > ?
You can’t perform that action at this time.
0 commit comments