@@ -1943,25 +1943,11 @@ function uTCTimeToJson(value) {
1943
1943
return JSON . stringify ( uncast ( value , r ( "UTCTime" ) ) , null , 2 ) ;
1944
1944
}
1945
1945
1946
- function invalidValue ( typ , val , key , parent = '' ) {
1947
- const prettyTyp = prettyTypeName ( typ ) ;
1948
- const parentText = parent ? ` on ${ parent } ` : '' ;
1949
- const keyText = key ? ` for key "${ key } "` : '' ;
1950
- throw Error ( `Invalid value${ keyText } ${ parentText } . Expected ${ prettyTyp } but got ${ JSON . stringify ( val ) } ` ) ;
1951
- }
1952
-
1953
- function prettyTypeName ( typ ) {
1954
- if ( Array . isArray ( typ ) ) {
1955
- if ( typ . length === 2 && typ [ 0 ] === undefined ) {
1956
- return `an optional ${ prettyTypeName ( typ [ 1 ] ) } ` ;
1957
- } else {
1958
- return `one of [${ typ . map ( a => { return prettyTypeName ( a ) ; } ) . join ( ", " ) } ]` ;
1959
- }
1960
- } else if ( typeof typ === "object" && typ . literal !== undefined ) {
1961
- return typ . literal ;
1962
- } else {
1963
- return typeof typ ;
1946
+ function invalidValue ( typ , val , key = '' ) {
1947
+ if ( key ) {
1948
+ throw Error ( `Invalid value for key "${ key } ". Expected type ${ JSON . stringify ( typ ) } but got ${ JSON . stringify ( val ) } ` ) ;
1964
1949
}
1950
+ throw Error ( `Invalid value ${ JSON . stringify ( val ) } for type ${ JSON . stringify ( typ ) } ` , ) ;
1965
1951
}
1966
1952
1967
1953
function jsonToJSProps ( typ ) {
@@ -1982,10 +1968,10 @@ function jsToJSONProps(typ) {
1982
1968
return typ . jsToJSON ;
1983
1969
}
1984
1970
1985
- function transform ( val , typ , getProps , key = '' , parent = '' ) {
1971
+ function transform ( val , typ , getProps , key = '' ) {
1986
1972
function transformPrimitive ( typ , val ) {
1987
1973
if ( typeof typ === typeof val ) return val ;
1988
- return invalidValue ( typ , val , key , parent ) ;
1974
+ return invalidValue ( typ , val , key ) ;
1989
1975
}
1990
1976
1991
1977
function transformUnion ( typs , val ) {
@@ -1997,17 +1983,17 @@ function transform(val, typ, getProps, key = '', parent = '') {
1997
1983
return transform ( val , typ , getProps ) ;
1998
1984
} catch ( _ ) { }
1999
1985
}
2000
- return invalidValue ( typs , val , key , parent ) ;
1986
+ return invalidValue ( typs , val ) ;
2001
1987
}
2002
1988
2003
1989
function transformEnum ( cases , val ) {
2004
1990
if ( cases . indexOf ( val ) !== - 1 ) return val ;
2005
- return invalidValue ( cases . map ( a => { return l ( a ) ; } ) , val , key , parent ) ;
1991
+ return invalidValue ( cases , val ) ;
2006
1992
}
2007
1993
2008
1994
function transformArray ( typ , val ) {
2009
1995
// val must be an array with no invalid elements
2010
- if ( ! Array . isArray ( val ) ) return invalidValue ( l ( "array" ) , val , key , parent ) ;
1996
+ if ( ! Array . isArray ( val ) ) return invalidValue ( "array" , val ) ;
2011
1997
return val . map ( el => transform ( el , typ , getProps ) ) ;
2012
1998
}
2013
1999
@@ -2017,24 +2003,24 @@ function transform(val, typ, getProps, key = '', parent = '') {
2017
2003
}
2018
2004
const d = new Date ( val ) ;
2019
2005
if ( isNaN ( d . valueOf ( ) ) ) {
2020
- return invalidValue ( l ( "Date" ) , val , key , parent ) ;
2006
+ return invalidValue ( "Date" , val ) ;
2021
2007
}
2022
2008
return d ;
2023
2009
}
2024
2010
2025
2011
function transformObject ( props , additional , val ) {
2026
2012
if ( val === null || typeof val !== "object" || Array . isArray ( val ) ) {
2027
- return invalidValue ( l ( ref || "object" ) , val , key , parent ) ;
2013
+ return invalidValue ( "object" , val ) ;
2028
2014
}
2029
2015
const result = { } ;
2030
2016
Object . getOwnPropertyNames ( props ) . forEach ( key => {
2031
2017
const prop = props [ key ] ;
2032
2018
const v = Object . prototype . hasOwnProperty . call ( val , key ) ? val [ key ] : undefined ;
2033
- result [ prop . key ] = transform ( v , prop . typ , getProps , key , ref ) ;
2019
+ result [ prop . key ] = transform ( v , prop . typ , getProps , prop . key ) ;
2034
2020
} ) ;
2035
2021
Object . getOwnPropertyNames ( val ) . forEach ( key => {
2036
2022
if ( ! Object . prototype . hasOwnProperty . call ( props , key ) ) {
2037
- result [ key ] = transform ( val [ key ] , additional , getProps , key , ref ) ;
2023
+ result [ key ] = transform ( val [ key ] , additional , getProps , key ) ;
2038
2024
}
2039
2025
} ) ;
2040
2026
return result ;
@@ -2043,20 +2029,18 @@ function transform(val, typ, getProps, key = '', parent = '') {
2043
2029
if ( typ === "any" ) return val ;
2044
2030
if ( typ === null ) {
2045
2031
if ( val === null ) return val ;
2046
- return invalidValue ( typ , val , key , parent ) ;
2032
+ return invalidValue ( typ , val ) ;
2047
2033
}
2048
- if ( typ === false ) return invalidValue ( typ , val , key , parent ) ;
2049
- let ref = undefined ;
2034
+ if ( typ === false ) return invalidValue ( typ , val ) ;
2050
2035
while ( typeof typ === "object" && typ . ref !== undefined ) {
2051
- ref = typ . ref ;
2052
2036
typ = typeMap [ typ . ref ] ;
2053
2037
}
2054
2038
if ( Array . isArray ( typ ) ) return transformEnum ( typ , val ) ;
2055
2039
if ( typeof typ === "object" ) {
2056
2040
return typ . hasOwnProperty ( "unionMembers" ) ? transformUnion ( typ . unionMembers , val )
2057
2041
: typ . hasOwnProperty ( "arrayItems" ) ? transformArray ( typ . arrayItems , val )
2058
2042
: typ . hasOwnProperty ( "props" ) ? transformObject ( getProps ( typ ) , typ . additional , val )
2059
- : invalidValue ( typ , val , key , parent ) ;
2043
+ : invalidValue ( typ , val ) ;
2060
2044
}
2061
2045
// Numbers can be parsed by Date but shouldn't be.
2062
2046
if ( typ === Date && typeof val !== "number" ) return transformDate ( val ) ;
@@ -2071,10 +2055,6 @@ function uncast(val, typ) {
2071
2055
return transform ( val , typ , jsToJSONProps ) ;
2072
2056
}
2073
2057
2074
- function l ( typ ) {
2075
- return { literal : typ } ;
2076
- }
2077
-
2078
2058
function a ( typ ) {
2079
2059
return { arrayItems : typ } ;
2080
2060
}
0 commit comments