Skip to content

Commit d21a0b9

Browse files
committed
Handle no buckets and export bucket transformer
1 parent b80ac69 commit d21a0b9

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

src/transformers/bucket.test.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import test from 'ava'
22
import transform from '../operations/transform.js'
33
import compare from './compare.js'
44

5-
import bucket from './bucket.js'
5+
import bucket, { Bucket } from './bucket.js'
66

77
// Setup
88

@@ -214,6 +214,23 @@ test('should merge bucket arrays into one array when going forward and flipped',
214214
t.deepEqual(ret, expected)
215215
})
216216

217+
test('should return an empty object when no buckets are defined', async (t) => {
218+
const data = [
219+
{ id: 'user1', name: 'User 1', role: 'editor' },
220+
{ id: 'user2', name: 'User 2', role: undefined },
221+
{ id: 'user3', name: 'User 3' },
222+
{ id: 'user4', name: 'User 4', role: 'admin' },
223+
{ id: 'user5', name: 'User 5' },
224+
{ id: 'user6', name: 'User 6', role: 'editor' },
225+
]
226+
const buckets: Bucket[] = []
227+
const expected = {}
228+
229+
const ret = await bucket({ buckets })(options)(data, state)
230+
231+
t.deepEqual(ret, expected)
232+
})
233+
217234
// Tests -- rev
218235

219236
test('should merge bucket arrays into one array in the order of the defined buckets', async (t) => {
@@ -407,6 +424,27 @@ test('should return empty array when we have no buckets object', async (t) => {
407424
t.deepEqual(ret, expected)
408425
})
409426

427+
test('should return empty array when no buckets are defined', async (t) => {
428+
const data = {
429+
users: [
430+
{ id: 'user2', name: 'User 2', role: undefined },
431+
{ id: 'user3', name: 'User 3' },
432+
{ id: 'user5', name: 'User 5' },
433+
],
434+
admin: [{ id: 'user4', name: 'User 4', role: 'admin' }],
435+
editor: [
436+
{ id: 'user1', name: 'User 1', role: 'editor' },
437+
{ id: 'user6', name: 'User 6', role: 'editor' },
438+
],
439+
}
440+
const buckets: Bucket[] = []
441+
const expected: unknown[] = []
442+
443+
const ret = await bucket({ buckets })(options)(data, stateRev)
444+
445+
t.deepEqual(ret, expected)
446+
})
447+
410448
test('should sort array into buckets in rev when flipped', async (t) => {
411449
const stateRevFlipped = { ...stateRev, flip: true }
412450
const data = [

src/transformers/bucket.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export interface Bucket {
2222

2323
export interface Props extends TransformerProps {
2424
path?: Path
25-
buckets: Bucket[]
25+
buckets?: Bucket[]
2626
}
2727

2828
function addToBucket(
@@ -74,7 +74,7 @@ const extractArrayFromBuckets = (
7474

7575
const transformer: AsyncTransformer<Props> = function bucket({
7676
path = '.',
77-
buckets,
77+
buckets = [],
7878
}) {
7979
return (options) => {
8080
const getFn = pathGetter(path)

src/transformers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { value, fixed } from './value.js'
2+
import bucket from './bucket.js'
23
import compare from './compare.js'
34
import { explode, implode } from './explode.js'
45
import flatten from './flatten.js'
@@ -11,6 +12,7 @@ import not from './not.js'
1112
import sort from './sort.js'
1213

1314
export default {
15+
bucket,
1416
compare,
1517
explode,
1618
fixed,

0 commit comments

Comments
 (0)