File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -33,6 +33,21 @@ describe("usage-helpers", () => {
3333 expect ( filterSessionsByQuery ( [ a , b ] , "maxTokens:10" ) . sessions ) . toEqual ( [ b ] ) ;
3434 } ) ;
3535
36+ it ( "rejects non-decimal numeric filter values" , ( ) => {
37+ const session = { key : "a" , usage : { totalTokens : 10_000 , totalCost : 0 } } ;
38+
39+ expect ( filterSessionsByQuery ( [ session ] , "minTokens:1k" ) . sessions ) . toEqual ( [ session ] ) ;
40+ expect ( filterSessionsByQuery ( [ session ] , "minTokens:1e3" ) . warnings ) . toEqual ( [
41+ "Invalid number for minTokens" ,
42+ ] ) ;
43+ expect ( filterSessionsByQuery ( [ session ] , "minTokens:0x1000" ) . warnings ) . toEqual ( [
44+ "Invalid number for minTokens" ,
45+ ] ) ;
46+ expect ( filterSessionsByQuery ( [ session ] , "minTokens:9007199254740993" ) . warnings ) . toEqual ( [
47+ "Invalid number for minTokens" ,
48+ ] ) ;
49+ } ) ;
50+
3651 it ( "warns on unknown keys and invalid numbers" , ( ) => {
3752 const session = { key : "a" , usage : { totalTokens : 10 , totalCost : 0 } } ;
3853 const res = filterSessionsByQuery ( [ session ] , "wat:1 minTokens:wat" ) ;
Original file line number Diff line number Diff line change @@ -77,11 +77,15 @@ const parseQueryNumber = (value: string): number | null => {
7777 multiplier = 1_000_000 ;
7878 raw = raw . slice ( 0 , - 1 ) ;
7979 }
80+ if ( ! / ^ \d + (?: \. \d + ) ? $ / . test ( raw ) ) {
81+ return null ;
82+ }
8083 const parsed = Number ( raw ) ;
81- if ( ! Number . isFinite ( parsed ) ) {
84+ const normalized = parsed * multiplier ;
85+ if ( ! Number . isFinite ( normalized ) || ! Number . isSafeInteger ( Math . round ( normalized ) ) ) {
8286 return null ;
8387 }
84- return parsed * multiplier ;
88+ return normalized ;
8589} ;
8690
8791export const extractQueryTerms = ( query : string ) : UsageQueryTerm [ ] => {
You can’t perform that action at this time.
0 commit comments