Skip to content

Commit 983815b

Browse files
Copilotrotu
andauthored
refactor: tidy optional field helpers
Agent-Logs-Url: https://github.com/rotu/structview/sessions/0716fb80-af23-468f-86bd-27d35fdca170 Co-authored-by: rotu <119948+rotu@users.noreply.github.com>
1 parent a0566f0 commit 983815b

1 file changed

Lines changed: 18 additions & 18 deletions

File tree

fields.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
6072
function 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

Comments
 (0)