@dankreiger/groop
Advanced tools
Comparing version 0.1.31 to 0.1.32
@@ -1,1 +0,1 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createGroup=function(e){return function(t){return((e,t)=>{const i={entities:{},ids:[]};for(let n=0;n<t.length;n++)i.entities[t[n][e]]?i.entities[t[n][e]].push(t[n]):(i.entities[t[n][e]]=[t[n]],i.ids.push(t[n][e]));return i})(e,t)}}; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createArrayGroup=function(t){return function(e){return((t,e)=>{const n={entities:{},ids:[]};for(let r=0;r<e.length;r++)n.entities[e[r][t]]?n.entities[e[r][t]].push(e[r]):(n.entities[e[r][t]]=[e[r]],n.ids.push(e[r][t]));return n})(t,e)}},exports.createGroup=function(t){return function(e){return((t,e)=>{const n={entities:{},ids:[]};for(let r=0;r<e.length;r++){const i=e[r];n.entities[i[t]]=i[t]}return n})(t,e)}}; |
@@ -1,1 +0,1 @@ | ||
function t(t){return function(e){return((t,e)=>{const n={entities:{},ids:[]};for(let i=0;i<e.length;i++)n.entities[e[i][t]]?n.entities[e[i][t]].push(e[i]):(n.entities[e[i][t]]=[e[i]],n.ids.push(e[i][t]));return n})(t,e)}}export{t as createGroup}; | ||
function t(t){return function(n){return((t,n)=>{const e={entities:{},ids:[]};for(let i=0;i<n.length;i++)e.entities[n[i][t]]?e.entities[n[i][t]].push(n[i]):(e.entities[n[i][t]]=[n[i]],e.ids.push(n[i][t]));return e})(t,n)}}function n(t){return function(n){return((t,n)=>{const e={entities:{},ids:[]};for(let i=0;i<n.length;i++){const r=n[i];e.entities[r[t]]=r[t]}return e})(t,n)}}export{t as createArrayGroup,n as createGroup}; |
@@ -1,2 +0,2 @@ | ||
export { EntityDict } from './typings'; | ||
export { ArrayEntityDict, EntityDict } from './typings'; | ||
export * from './utils'; |
@@ -0,9 +1,18 @@ | ||
import { type ReadonlyDeep } from 'type-fest'; | ||
export type ObjectKey = string | number | symbol; | ||
export type ArrayEntityDict<Entity, Key extends ObjectKey> = { | ||
readonly entities: ReadonlyDeep<Record<Key, ReadonlyArray<Entity> | undefined>>; | ||
readonly ids: ReadonlyArray<Key>; | ||
}; | ||
export type EntityDict<Entity, Key extends ObjectKey> = { | ||
readonly entities: Record<Key, ReadonlyArray<Entity> | undefined>; | ||
readonly entities: ReadonlyDeep<Record<Key, Entity | undefined>>; | ||
readonly ids: ReadonlyArray<Key>; | ||
}; | ||
export type MutableEntityDict<Entity, Key extends ObjectKey> = { | ||
export type MutableArrayEntityDict<Entity, Key extends ObjectKey> = { | ||
entities: Record<Key, Entity[] | undefined>; | ||
ids: Key[]; | ||
}; | ||
export type MutableEntityDict<Entity, Key extends ObjectKey> = { | ||
entities: Record<Key, Entity | undefined>; | ||
ids: Key[]; | ||
}; |
@@ -0,1 +1,2 @@ | ||
export * from './groupArrayBy'; | ||
export * from './groupBy'; |
@@ -0,1 +1,2 @@ | ||
export * from './createArrayGroup'; | ||
export * from './createGroup'; |
{ | ||
"name": "@dankreiger/groop", | ||
"version": "0.1.31", | ||
"version": "0.1.32", | ||
"description": "Normalize an array of objects by a property.", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/dankreiger/groop#readme", |
@@ -5,6 +5,8 @@ # groop | ||
Both lists and single objects can be normalized. | ||
## Usage | ||
```ts | ||
import { createGroup } from '@dankreiger/groop'; | ||
import { createArrayGroup } from '@dankreiger/groop'; | ||
@@ -18,3 +20,3 @@ const listGroup = [ | ||
const byAge = createGroup('age'); | ||
const byAge = createArrayGroup('age'); | ||
@@ -52,3 +54,3 @@ byAge(listGroup); | ||
const byName = createGroup('name'); | ||
const byName = createArrayGroup('name'); | ||
@@ -71,1 +73,33 @@ byName(listGroup); | ||
``` | ||
```ts | ||
import { createGroup } from '@dankreiger/groop'; | ||
const singleGroup = { name: 'Dan', age: 5 }; | ||
const byAge = createGroup('age'); | ||
byAge(singleGroup); | ||
/** | ||
* { | ||
* entities: { | ||
* '5': { name: 'Dan', age: 5 } | ||
* }, | ||
* ids: [5] | ||
* } | ||
*/ | ||
const byName = createGroup('name'); | ||
byName(singleGroup); | ||
/** | ||
* { | ||
* entities: { | ||
* Dan: { name: 'Dan', age: 5 } | ||
* }, | ||
* ids: ['Dan'] | ||
* } | ||
*/ | ||
``` |
@@ -1,2 +0,2 @@ | ||
export { EntityDict } from './typings'; | ||
export { ArrayEntityDict, EntityDict } from './typings'; | ||
export * from './utils'; |
@@ -0,11 +1,24 @@ | ||
import { type ReadonlyDeep } from 'type-fest'; | ||
export type ObjectKey = string | number | symbol; | ||
export type ArrayEntityDict<Entity, Key extends ObjectKey> = { | ||
readonly entities: ReadonlyDeep< | ||
Record<Key, ReadonlyArray<Entity> | undefined> | ||
>; | ||
readonly ids: ReadonlyArray<Key>; | ||
}; | ||
export type EntityDict<Entity, Key extends ObjectKey> = { | ||
readonly entities: Record<Key, ReadonlyArray<Entity> | undefined>; | ||
readonly entities: ReadonlyDeep<Record<Key, Entity | undefined>>; | ||
readonly ids: ReadonlyArray<Key>; | ||
}; | ||
export type MutableEntityDict<Entity, Key extends ObjectKey> = { | ||
// -------------------------------------------------------------- | ||
export type MutableArrayEntityDict<Entity, Key extends ObjectKey> = { | ||
entities: Record<Key, Entity[] | undefined>; | ||
ids: Key[]; | ||
}; | ||
export type MutableEntityDict<Entity, Key extends ObjectKey> = { | ||
entities: Record<Key, Entity | undefined>; | ||
ids: Key[]; | ||
}; |
@@ -0,1 +1,2 @@ | ||
export * from './groupArrayBy'; | ||
export * from './groupBy'; |
@@ -1,2 +0,2 @@ | ||
import { createGroup } from './createGroup'; | ||
import { createArrayGroup } from '../createArrayGroup'; | ||
@@ -10,5 +10,5 @@ const listGroup = [ | ||
describe('createGroup', () => { | ||
describe('createArrayGroup', () => { | ||
it('one', () => { | ||
const byAge = createGroup('age'); | ||
const byAge = createArrayGroup('age'); | ||
expect(byAge(listGroup)).toEqual({ | ||
@@ -44,3 +44,3 @@ entities: { | ||
it('two', () => { | ||
const byName = createGroup('name'); | ||
const byName = createArrayGroup('name'); | ||
expect(byName(listGroup)).toEqual({ | ||
@@ -47,0 +47,0 @@ entities: { |
@@ -5,3 +5,3 @@ import type { EntityDict, ObjectKey } from '../../typings'; | ||
export function createGroup<K extends ObjectKey>(key: K) { | ||
return function groupList<T extends Record<K, T[K]>>( | ||
return function groupItem<T extends Record<K, T[K]>>( | ||
items: ReadonlyArray<T> | ||
@@ -8,0 +8,0 @@ ): EntityDict<T, T[K]> { |
@@ -0,1 +1,2 @@ | ||
export * from './createArrayGroup'; | ||
export * from './createGroup'; |
21526
57
505
102