Skip to content

Commit e0abc8c

Browse files
refactor: Address code review feedback - improve undefined check organization
Co-authored-by: Sander-Toonen <5106372+Sander-Toonen@users.noreply.github.com>
1 parent 510cb67 commit e0abc8c

2 files changed

Lines changed: 34 additions & 13 deletions

File tree

src/functions/array/operations.ts

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ function getTypeName(value: unknown): string {
1414

1515
export function filter(arg1: Function | any[] | undefined, arg2: Function | any[] | undefined): any[] | undefined {
1616
// Support both filter(array, fn) and filter(fn, array) for backwards compatibility
17+
// Early return for undefined first argument
18+
if (arg1 === undefined) {
19+
return undefined;
20+
}
21+
1722
let f: Function;
1823
let a: any[] | undefined;
1924

@@ -25,8 +30,6 @@ export function filter(arg1: Function | any[] | undefined, arg2: Function | any[
2530
// function-first: filter(fn, array)
2631
f = arg1;
2732
a = arg2 as any[] | undefined;
28-
} else if (arg1 === undefined) {
29-
return undefined;
3033
} else {
3134
throw new Error(
3235
`filter(array, predicate) expects an array and a function.\n` +
@@ -44,6 +47,11 @@ export function filter(arg1: Function | any[] | undefined, arg2: Function | any[
4447

4548
export function fold(arg1: Function | any[] | undefined, arg2: any, arg3: Function | any[] | undefined): any {
4649
// Support both fold(array, initial, fn) and fold(fn, initial, array) for backwards compatibility
50+
// Early return for undefined arguments
51+
if (arg1 === undefined) {
52+
return undefined;
53+
}
54+
4755
let f: Function;
4856
let init: any;
4957
let a: any[] | undefined;
@@ -58,7 +66,7 @@ export function fold(arg1: Function | any[] | undefined, arg2: any, arg3: Functi
5866
f = arg1;
5967
init = arg2;
6068
a = arg3 as any[] | undefined;
61-
} else if (arg1 === undefined || arg3 === undefined) {
69+
} else if (arg3 === undefined) {
6270
return undefined;
6371
} else {
6472
throw new Error(
@@ -105,6 +113,11 @@ export function join(sep: string | undefined, a: any[] | undefined): string | un
105113

106114
export function map(arg1: Function | any[] | undefined, arg2: Function | any[] | undefined): any[] | undefined {
107115
// Support both map(array, fn) and map(fn, array) for backwards compatibility
116+
// Early return for undefined first argument
117+
if (arg1 === undefined) {
118+
return undefined;
119+
}
120+
108121
let f: Function;
109122
let a: any[] | undefined;
110123

@@ -116,8 +129,6 @@ export function map(arg1: Function | any[] | undefined, arg2: Function | any[] |
116129
// function-first: map(fn, array)
117130
f = arg1;
118131
a = arg2 as any[] | undefined;
119-
} else if (arg1 === undefined) {
120-
return undefined;
121132
} else {
122133
throw new Error(
123134
`map(array, mapper) expects an array and a function.\n` +
@@ -172,6 +183,11 @@ export function reduce(arg1: Function | any[] | undefined, arg2: any, arg3: Func
172183

173184
export function find(arg1: Function | any[] | undefined, arg2: Function | any[] | undefined): any {
174185
// Support both find(array, fn) and find(fn, array) for backwards compatibility
186+
// Early return for undefined first argument
187+
if (arg1 === undefined) {
188+
return undefined;
189+
}
190+
175191
let f: Function;
176192
let a: any[] | undefined;
177193

@@ -183,8 +199,6 @@ export function find(arg1: Function | any[] | undefined, arg2: Function | any[]
183199
// function-first: find(fn, array)
184200
f = arg1;
185201
a = arg2 as any[] | undefined;
186-
} else if (arg1 === undefined) {
187-
return undefined;
188202
} else {
189203
throw new Error(
190204
`find(array, predicate) expects an array and a function.\n` +
@@ -202,6 +216,11 @@ export function find(arg1: Function | any[] | undefined, arg2: Function | any[]
202216

203217
export function some(arg1: Function | any[] | undefined, arg2: Function | any[] | undefined): boolean | undefined {
204218
// Support both some(array, fn) and some(fn, array) for backwards compatibility
219+
// Early return for undefined first argument
220+
if (arg1 === undefined) {
221+
return undefined;
222+
}
223+
205224
let f: Function;
206225
let a: any[] | undefined;
207226

@@ -213,8 +232,6 @@ export function some(arg1: Function | any[] | undefined, arg2: Function | any[]
213232
// function-first: some(fn, array)
214233
f = arg1;
215234
a = arg2 as any[] | undefined;
216-
} else if (arg1 === undefined) {
217-
return undefined;
218235
} else {
219236
throw new Error(
220237
`some(array, predicate) expects an array and a function.\n` +
@@ -232,6 +249,11 @@ export function some(arg1: Function | any[] | undefined, arg2: Function | any[]
232249

233250
export function every(arg1: Function | any[] | undefined, arg2: Function | any[] | undefined): boolean | undefined {
234251
// Support both every(array, fn) and every(fn, array) for backwards compatibility
252+
// Early return for undefined first argument
253+
if (arg1 === undefined) {
254+
return undefined;
255+
}
256+
235257
let f: Function;
236258
let a: any[] | undefined;
237259

@@ -243,8 +265,6 @@ export function every(arg1: Function | any[] | undefined, arg2: Function | any[]
243265
// function-first: every(fn, array)
244266
f = arg1;
245267
a = arg2 as any[] | undefined;
246-
} else if (arg1 === undefined) {
247-
return undefined;
248268
} else {
249269
throw new Error(
250270
`every(array, predicate) expects an array and a function.\n` +

test/functions/functions-array-first-order.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,9 @@ describe('Array-First Argument Order', function () {
225225
it('should work with find and object filtering', function () {
226226
const parser = new Parser();
227227
const users = [{ name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }];
228-
const result = parser.evaluate('find(users, x => x.age > 26)', { users }) as { name: string };
229-
assert.strictEqual(result.name, 'Bob');
228+
const result = parser.evaluate('find(users, x => x.age > 26)', { users });
229+
assert.ok(result !== undefined);
230+
assert.strictEqual((result as { name: string }).name, 'Bob');
230231
});
231232
});
232233
});

0 commit comments

Comments
 (0)