11import { Value } from "../pb/shared" ;
22
3- type PlainValue = null | number | string | boolean | Array < PlainValue > | object ;
3+ type PlainValue = null | bigint | number | string | boolean | Array < PlainValue > | object ;
44
55function toAllowedValue ( value : Value ) : PlainValue {
66 switch ( value . kind . oneofKind ) {
77 case "nullValue" :
88 return null ;
99 case "numberValue" :
10- return value . kind . numberValue ;
10+ const numberValue = value . kind . numberValue ;
11+ if ( numberValue . number . oneofKind === "integer" ) {
12+ return numberValue . number . integer ;
13+ } else if ( numberValue . number . oneofKind === "float" ) {
14+ return numberValue . number . float ;
15+ } else {
16+ throw new Error ( "Unsupported NumberValue number kind: " + numberValue . number . oneofKind ) ;
17+ }
1118 case "stringValue" :
1219 return value . kind . stringValue ;
1320 case "boolValue" :
@@ -30,8 +37,30 @@ function constructValue(value: PlainValue): Value {
3037 if ( value === null ) {
3138 return { kind : { oneofKind : "nullValue" , nullValue : 0 } } ;
3239 }
33- if ( typeof value === "number" ) {
34- return { kind : { oneofKind : "numberValue" , numberValue : value } } ;
40+ if ( typeof value === "number" || typeof value === "bigint" ) {
41+ if ( Number . isInteger ( value ) || typeof value === "bigint" ) {
42+ return {
43+ kind : {
44+ oneofKind : "numberValue" , numberValue : {
45+ number : {
46+ oneofKind : "integer" ,
47+ integer : BigInt ( value )
48+ }
49+ }
50+ }
51+ } ;
52+ }
53+
54+ return {
55+ kind : {
56+ oneofKind : "numberValue" , numberValue : {
57+ number : {
58+ oneofKind : "float" ,
59+ float : value
60+ }
61+ }
62+ }
63+ } ;
3564 }
3665 if ( typeof value === "string" ) {
3766 return { kind : { oneofKind : "stringValue" , stringValue : value } } ;
0 commit comments