File tree Expand file tree Collapse file tree 3 files changed +38
-8
lines changed Expand file tree Collapse file tree 3 files changed +38
-8
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' svelte ' : patch
3
+ ---
4
+
5
+ fix: correctly increment/decrement bigints
Original file line number Diff line number Diff line change @@ -1068,23 +1068,32 @@ function get_parent_context(component_context) {
1068
1068
}
1069
1069
1070
1070
/**
1071
- * @param {Value<number> } signal
1071
+ * @template {number | bigint} T
1072
+ * @param {Value<T> } signal
1072
1073
* @param {1 | -1 } [d]
1073
- * @returns {number }
1074
+ * @returns {T }
1074
1075
*/
1075
1076
export function update ( signal , d = 1 ) {
1076
- var value = + get ( signal ) ;
1077
- set ( signal , value + d ) ;
1078
- return value ;
1077
+ var value = get ( signal ) ;
1078
+ var result = d === 1 ? value ++ : value -- ;
1079
+
1080
+ set ( signal , value ) ;
1081
+
1082
+ // @ts -expect-error
1083
+ return result ;
1079
1084
}
1080
1085
1081
1086
/**
1082
- * @param {Value<number> } signal
1087
+ * @template {number | bigint} T
1088
+ * @param {Value<T> } signal
1083
1089
* @param {1 | -1 } [d]
1084
- * @returns {number }
1090
+ * @returns {T }
1085
1091
*/
1086
1092
export function update_pre ( signal , d = 1 ) {
1087
- return set ( signal , + get ( signal ) + d ) ;
1093
+ var value = get ( signal ) ;
1094
+
1095
+ // @ts -expect-error
1096
+ return set ( signal , d === 1 ? ++ value : -- value ) ;
1088
1097
}
1089
1098
1090
1099
/**
Original file line number Diff line number Diff line change @@ -765,4 +765,20 @@ describe('signals', () => {
765
765
assert . deepEqual ( a . deriveds , null ) ;
766
766
} ;
767
767
} ) ;
768
+
769
+ test ( 'bigint states update correctly' , ( ) => {
770
+ return ( ) => {
771
+ const count = state ( 0n ) ;
772
+
773
+ assert . doesNotThrow ( ( ) => $ . update ( count ) ) ;
774
+ assert . equal ( $ . get ( count ) , 1n ) ;
775
+ assert . doesNotThrow ( ( ) => $ . update ( count , - 1 ) ) ;
776
+ assert . equal ( $ . get ( count ) , 0n ) ;
777
+
778
+ assert . doesNotThrow ( ( ) => $ . update_pre ( count ) ) ;
779
+ assert . equal ( $ . get ( count ) , 1n ) ;
780
+ assert . doesNotThrow ( ( ) => $ . update_pre ( count , - 1 ) ) ;
781
+ assert . equal ( $ . get ( count ) , 0n ) ;
782
+ } ;
783
+ } ) ;
768
784
} ) ;
You can’t perform that action at this time.
0 commit comments