@@ -57,6 +57,18 @@ function resolveOptionalNumberFieldValue(
5757 return result
5858}
5959
60+ function resolvePositiveIntegerFieldValue (
61+ struct : AnyStruct ,
62+ value : NumberFieldValue ,
63+ name : string ,
64+ ) : number {
65+ const result = resolveNumberFieldValue ( struct , value , name )
66+ if ( ! Number . isInteger ( result ) || result <= 0 ) {
67+ throw new TypeError ( `${ name } must resolve to a positive integer` )
68+ }
69+ return result
70+ }
71+
6072function resolveBooleanFieldValue (
6173 struct : AnyStruct ,
6274 value : BooleanFieldValue ,
@@ -200,17 +212,11 @@ export function biguintle(
200212 fieldOffset ,
201213 "fieldOffset" ,
202214 )
203- const resolvedByteLength = resolveNumberFieldValue (
215+ const resolvedByteLength = resolvePositiveIntegerFieldValue (
204216 this ,
205217 byteLength ,
206218 "byteLength" ,
207219 )
208- if (
209- ! Number . isInteger ( resolvedByteLength ) ||
210- resolvedByteLength <= 0
211- ) {
212- throw new TypeError ( "byteLength must resolve to a positive integer" )
213- }
214220 let result = 0n
215221 const dv = structDataView ( this )
216222 for ( let i = 0 ; i < resolvedByteLength ; ++ i ) {
@@ -224,17 +230,11 @@ export function biguintle(
224230 fieldOffset ,
225231 "fieldOffset" ,
226232 )
227- const resolvedByteLength = resolveNumberFieldValue (
233+ const resolvedByteLength = resolvePositiveIntegerFieldValue (
228234 this ,
229235 byteLength ,
230236 "byteLength" ,
231237 )
232- if (
233- ! Number . isInteger ( resolvedByteLength ) ||
234- resolvedByteLength <= 0
235- ) {
236- throw new TypeError ( "byteLength must resolve to a positive integer" )
237- }
238238 const dv = structDataView ( this )
239239 for ( let i = 0 ; i < resolvedByteLength ; ++ i ) {
240240 dv . setUint8 (
@@ -424,12 +424,12 @@ export function optional<T>(
424424 "optional() requires a field descriptor with a getter function" ,
425425 )
426426 }
427- const presentDescriptor = typeof present === "object"
427+ const presenceConfig = typeof present === "object"
428428 ? present
429429 : { present, setPresent : present }
430430 const descriptor : StructPropertyDescriptor < T | undefined > = {
431431 get ( ) {
432- if ( ! resolveBooleanFieldValue ( this , presentDescriptor . present ) ) {
432+ if ( ! resolveBooleanFieldValue ( this , presenceConfig . present ) ) {
433433 return undefined
434434 }
435435 return getter . call ( this )
@@ -440,15 +440,15 @@ export function optional<T>(
440440 if ( typeof value === "undefined" ) {
441441 setBooleanFieldValue (
442442 this ,
443- presentDescriptor . setPresent ?? presentDescriptor . present ,
443+ presenceConfig . setPresent ?? presenceConfig . present ,
444444 false ,
445445 )
446446 return
447447 }
448448 field . set ?. call ( this , value )
449449 setBooleanFieldValue (
450450 this ,
451- presentDescriptor . setPresent ?? presentDescriptor . present ,
451+ presenceConfig . setPresent ?? presenceConfig . present ,
452452 true ,
453453 )
454454 }
0 commit comments