svelte-map-reduce-store
Advanced tools
Comparing version 0.1.5 to 0.1.6
import type { SortCmd } from './fast-sort'; | ||
import * as dic from './dic'; | ||
export declare type BaseT<IdType> = { | ||
_id: IdType; | ||
_id: IdType; | ||
}; | ||
export declare type BaseF<T> = { | ||
list: T[]; | ||
list: T[]; | ||
}; | ||
export declare type MapReduceProps<F extends BaseF<any>, OrderArgs extends any[]> = { | ||
format: () => F; | ||
initialize?: (doc: F['list'][number]) => void; | ||
reduce: (o: F, doc: F['list'][number]) => void; | ||
order: (o: F, utils: typeof OrderUtils, ...args: OrderArgs) => void; | ||
start?: (set: (value: F) => void) => void | (() => void); | ||
export declare type MapReduceProps<F extends BaseF<any>, OrderArgs extends any[], Index> = { | ||
format: () => F; | ||
index: (_id: F['list'][number]['_id']) => Index; | ||
initialize?: (doc: F['list'][number]) => void; | ||
reduce: (o: F, doc: F['list'][number]) => void; | ||
order: (o: F, utils: typeof OrderUtils, ...args: OrderArgs) => void; | ||
start?: (set: (value: F) => void) => void | (() => void); | ||
}; | ||
export declare const OrderUtils: { | ||
sort: typeof dic.sort; | ||
group_sort: typeof dic.group_sort; | ||
sort: typeof dic.sort; | ||
group_sort: typeof dic.group_sort; | ||
}; | ||
declare type Validator<A extends any[], F extends BaseF<any>> = (o: F['list'][number], ...args: A) => boolean; | ||
declare type LookupProps<F, OrderArgs extends any[]> = { | ||
format: () => F; | ||
subscribe: (set: (value: F) => void, lookup: LookupProps<F, OrderArgs>) => void; | ||
order: (o: F, { sort, group_sort }: typeof OrderUtils, ...args: OrderArgs) => void; | ||
format: () => F; | ||
subscribe: (set: (value: F) => void, lookup: LookupProps<F, OrderArgs>) => void; | ||
order: (o: F, { sort, group_sort }: typeof OrderUtils, ...args: OrderArgs) => void; | ||
}; | ||
export declare function lookup<F, OrderArgs extends any[]>(o: LookupProps<F, OrderArgs>): { | ||
sort: (...sa: OrderArgs) => void; | ||
format: () => F; | ||
data: F; | ||
subscribe: (this: void, run: import("svelte/store").Subscriber<F>, invalidate?: (value?: F) => void) => import("svelte/store").Unsubscriber; | ||
export declare function lookup<F, OrderArgs extends any[]>( | ||
o: LookupProps<F, OrderArgs> | ||
): { | ||
sort: (...sa: OrderArgs) => void; | ||
format: () => F; | ||
data: F; | ||
subscribe: ( | ||
this: void, | ||
run: import('svelte/store').Subscriber<F>, | ||
invalidate?: (value?: F) => void | ||
) => import('svelte/store').Unsubscriber; | ||
}; | ||
export declare function MapReduce<F extends BaseF<any>, OrderArgs extends any[]>({ format, initialize, reduce, order, start }: MapReduceProps<F, OrderArgs>): { | ||
deploy: (json: any, init?: (doc: F["list"][number]) => void) => void; | ||
clear: () => void; | ||
add: (docs: F['list'], init?: (doc: F["list"][number]) => void) => void; | ||
del: (ids: F['list'][number]['_id'][]) => void; | ||
find: (id: F['list'][number]['_id']) => F["list"][number]; | ||
reduce: <EMIT>(ids: F['list'][number]['_id'][], emit: (o: EMIT) => void) => SortCmd<F["list"][number] & EMIT>; | ||
filter: <A extends any[]>(validator: Validator<A, F>, key?: string) => (...filter_args: A) => { | ||
reduce: <EMIT>(ids: F['list'][number]['_id'][], emit: (o: EMIT) => void) => SortCmd<F["list"][number] & EMIT>; | ||
filter: any; | ||
sort: (...sa: OrderArgs) => void; | ||
data: F; | ||
subscribe: (this: void, run: import("svelte/store").Subscriber<F>, invalidate?: (value?: F) => void) => import("svelte/store").Unsubscriber; | ||
validator: Validator<A, F>; | ||
}; | ||
export declare function MapReduce<F extends BaseF<any>, OrderArgs extends any[], Index>({ | ||
format, | ||
index, | ||
initialize, | ||
reduce, | ||
order, | ||
start | ||
}: MapReduceProps<F, OrderArgs, Index>): { | ||
deploy: (json: any, init?: (doc: F['list'][number]) => void) => void; | ||
clear: () => void; | ||
add: (docs: F['list'], init?: (doc: F['list'][number]) => void) => void; | ||
del: (ids: F['list'][number]['_id'][]) => void; | ||
find: (_id: F['list'][number]['_id']) => F['list'][number]; | ||
index: (_id: F['list'][number]['_id']) => Index; | ||
reduce: <EMIT>(ids: F['list'][number]['_id'][], emit: (o: EMIT) => void) => SortCmd<F['list'][number] & EMIT>; | ||
filter: <A extends any[]>( | ||
validator: Validator<A, F>, | ||
key?: string | ||
) => ( | ||
...filter_args: A | ||
) => { | ||
reduce: <EMIT>(ids: F['list'][number]['_id'][], emit: (o: EMIT) => void) => SortCmd<F['list'][number] & EMIT>; | ||
filter: any; | ||
sort: (...sa: OrderArgs) => void; | ||
format: () => F; | ||
data: F; | ||
subscribe: (this: void, run: import("svelte/store").Subscriber<F>, invalidate?: (value?: F) => void) => import("svelte/store").Unsubscriber; | ||
subscribe: ( | ||
this: void, | ||
run: import('svelte/store').Subscriber<F>, | ||
invalidate?: (value?: F) => void | ||
) => import('svelte/store').Unsubscriber; | ||
validator: Validator<A, F>; | ||
}; | ||
sort: (...sa: OrderArgs) => void; | ||
format: () => F; | ||
data: F; | ||
subscribe: ( | ||
this: void, | ||
run: import('svelte/store').Subscriber<F>, | ||
invalidate?: (value?: F) => void | ||
) => import('svelte/store').Unsubscriber; | ||
}; | ||
export {}; |
211
base.js
@@ -5,122 +5,115 @@ import { writable } from 'svelte/store'; | ||
export const OrderUtils = { | ||
sort: dic.sort, | ||
group_sort: dic.group_sort | ||
sort: dic.sort, | ||
group_sort: dic.group_sort | ||
}; | ||
function nop(...args) { } | ||
function nop(...args) {} | ||
export function lookup(o) { | ||
const data = o.format(); | ||
const { subscribe, set } = writable(data, (set) => { | ||
o.subscribe((data) => { | ||
sort(...sArgs); | ||
set(data); | ||
}, o); | ||
}); | ||
let sArgs = []; | ||
return { sort, format: o.format, data, subscribe }; | ||
function sort(...sa) { | ||
if (o.order) | ||
o.order(data, { sort: dic.sort, group_sort: dic.group_sort }, ...(sArgs = sa)); | ||
set(data); | ||
} | ||
const data = o.format(); | ||
const { subscribe, set } = writable(data, (set) => { | ||
o.subscribe((data) => { | ||
sort(...sArgs); | ||
set(data); | ||
}, o); | ||
}); | ||
let sArgs = []; | ||
return { sort, format: o.format, data, subscribe }; | ||
function sort(...sa) { | ||
if (o.order) o.order(data, { sort: dic.sort, group_sort: dic.group_sort }, ...(sArgs = sa)); | ||
set(data); | ||
} | ||
} | ||
export function MapReduce({ format, initialize = nop, reduce, order, start }) { | ||
const children = new Map(); | ||
const map = new Map(); | ||
const data = format(); | ||
const find = (id) => map.get(id); | ||
const { subscribe, set } = writable(format(), __BROWSER__ ? start : undefined); | ||
let sArgs = []; | ||
return { deploy, clear, add, del, find, reduce: doReduce, filter, sort, format, data, subscribe }; | ||
function sort(...sa) { | ||
if (order) | ||
order(data, { sort: dic.sort, group_sort: dic.group_sort }, ...(sArgs = sa)); | ||
set(data); | ||
export function MapReduce({ format, index = (_id) => _id, initialize = nop, reduce, order, start }) { | ||
const children = new Map(); | ||
const map = new Map(); | ||
const data = format(); | ||
const find = (_id) => map.get(index(_id)); | ||
const { subscribe, set } = writable(format(), __BROWSER__ ? start : undefined); | ||
let sArgs = []; | ||
return { deploy, clear, add, del, find, index, reduce: doReduce, filter, sort, format, data, subscribe }; | ||
function sort(...sa) { | ||
if (order) order(data, { sort: dic.sort, group_sort: dic.group_sort }, ...(sArgs = sa)); | ||
set(data); | ||
} | ||
function full_calculate() { | ||
const { list } = data; | ||
clear(); | ||
for (const doc of list) { | ||
data.list.push(doc); | ||
reduce(data, doc); | ||
} | ||
function full_calculate() { | ||
const { list } = data; | ||
clear(); | ||
for (const doc of list) { | ||
data.list.push(doc); | ||
reduce(data, doc); | ||
} | ||
} | ||
function deploy(json, init = initialize) { | ||
const list = []; | ||
for (const _id in json) { | ||
const o = json[_id]; | ||
o._id = _id; | ||
list.push(o); | ||
} | ||
function deploy(json, init = initialize) { | ||
const list = []; | ||
for (const _id in json) { | ||
const o = json[_id]; | ||
o._id = _id; | ||
list.push(o); | ||
} | ||
add(list, init); | ||
add(list, init); | ||
} | ||
function filter(validator, key = validator.toString()) { | ||
return query; | ||
function query(...filter_args) { | ||
const child = MapReduce({ index, format, reduce, order }); | ||
children.set(key, { validator, filter_args, add: child.add, del: child.del }); | ||
// child.clear() | ||
child.add(data.list.filter((o) => validator(o, ...filter_args))); | ||
return { | ||
reduce: child.reduce, | ||
filter: child.filter, | ||
sort: child.sort, | ||
data: child.data, | ||
subscribe: child.subscribe, | ||
validator | ||
}; | ||
} | ||
function filter(validator, key = validator.toString()) { | ||
return query; | ||
function query(...filter_args) { | ||
const child = MapReduce({ format, reduce, order }); | ||
children.set(key, { validator, filter_args, add: child.add, del: child.del }); | ||
// child.clear() | ||
child.add(data.list.filter((o) => validator(o, ...filter_args))); | ||
return { | ||
reduce: child.reduce, | ||
filter: child.filter, | ||
sort: child.sort, | ||
data: child.data, | ||
subscribe: child.subscribe, | ||
validator | ||
}; | ||
} | ||
} | ||
function doReduce(ids, emit) { | ||
const map = new Map(); | ||
for (const _id of ids) { | ||
const item = find(_id); | ||
if (!item) continue; | ||
map.set(index(_id), { ...item }); | ||
} | ||
function doReduce(ids, emit) { | ||
const map = new Map(); | ||
for (const id of ids) { | ||
const item = find(id); | ||
if (!item) | ||
continue; | ||
map.set(id, { ...item }); | ||
} | ||
const list = [...map.values()]; | ||
for (const item of list) { | ||
emit(item); | ||
} | ||
return dic.sort(list); | ||
const list = [...map.values()]; | ||
for (const item of list) { | ||
emit(item); | ||
} | ||
function clear() { | ||
Object.assign(data, format()); | ||
set(data); | ||
return dic.sort(list); | ||
} | ||
function clear() { | ||
Object.assign(data, format()); | ||
set(data); | ||
} | ||
function add(docs, init = initialize) { | ||
let is_update = false; | ||
for (const doc of docs) { | ||
const _id = index(doc._id); | ||
if (find(_id)) { | ||
is_update = true; | ||
} else { | ||
data.list.push(doc); | ||
init && init(doc); | ||
reduce(data, doc); | ||
} | ||
map.set(_id, doc); | ||
} | ||
function add(docs, init = initialize) { | ||
let is_update = false; | ||
for (const doc of docs) { | ||
const id = doc._id; | ||
if (find(id)) { | ||
is_update = true; | ||
} | ||
else { | ||
data.list.push(doc); | ||
init && init(doc); | ||
reduce(data, doc); | ||
} | ||
map.set(id, doc); | ||
} | ||
if (is_update) | ||
full_calculate(); | ||
sort(...sArgs); | ||
set(data); | ||
for (const { validator, filter_args, add } of children.values()) { | ||
add(docs.filter((o) => validator(o, ...filter_args))); | ||
} | ||
if (is_update) full_calculate(); | ||
sort(...sArgs); | ||
set(data); | ||
for (const { validator, filter_args, add } of children.values()) { | ||
add(docs.filter((o) => validator(o, ...filter_args))); | ||
} | ||
function del(ids) { | ||
let is_update = false; | ||
for (const id of ids) { | ||
if (map.delete(id)) | ||
is_update = true; | ||
} | ||
if (is_update) | ||
full_calculate(); | ||
set(data); | ||
for (const { del } of children.values()) { | ||
del(ids); | ||
} | ||
} | ||
function del(ids) { | ||
let is_update = false; | ||
for (const _id of ids) { | ||
if (map.delete(index(_id))) is_update = true; | ||
} | ||
if (is_update) full_calculate(); | ||
set(data); | ||
for (const { del } of children.values()) { | ||
del(ids); | ||
} | ||
} | ||
} |
410
dic.d.ts
import type { SortCmd } from './fast-sort'; | ||
export declare type DIC<T> = { | ||
[id: string]: T; | ||
[id: string]: T; | ||
}; | ||
export declare type ARY<T> = T[] & { | ||
_id: string; | ||
_id: string; | ||
}; | ||
declare type SORT<T> = (data: T) => T; | ||
declare type SORT_DICT<T> = (data: DIC<T>) => (T & { | ||
_id: string; | ||
declare type SORT_DICT<T> = ( | ||
data: DIC<T> | ||
) => (T & { | ||
_id: string; | ||
})[]; | ||
export declare function sort<D>(value: D[]): SortCmd<D>; | ||
export declare function sort<D>(value: DIC<D>): SortCmd<D & { | ||
export declare function sort<D>( | ||
value: DIC<D> | ||
): SortCmd< | ||
D & { | ||
_id: string; | ||
}>; | ||
export declare function group_sort<T>(data: DIC<DIC<DIC<DIC<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<DIC<ARY<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<ARY<DIC<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<ARY<ARY<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<DIC<DIC<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<DIC<ARY<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<ARY<DIC<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<ARY<ARY<T>>>>, cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<DIC<DIC<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<DIC<ARY<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<ARY<DIC<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<ARY<ARY<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<DIC<DIC<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<DIC<ARY<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<ARY<DIC<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<ARY<ARY<T>>>>, cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<DIC<T>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<ARY<T>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<DIC<T>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<ARY<T>>>, cb4: SORT_DICT<ARY<ARY<T>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<DIC<T>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<ARY<T>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<DIC<T>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<ARY<T>>>, cb4: SORT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<T>>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<ARY<T>>>; | ||
} | ||
>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<DIC<DIC<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<DIC<ARY<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<ARY<DIC<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<ARY<ARY<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<DIC<DIC<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<DIC<ARY<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<ARY<DIC<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<ARY<ARY<T>>>>, | ||
cb5: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<DIC<DIC<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<DIC<ARY<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<ARY<DIC<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<ARY<ARY<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<DIC<DIC<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<DIC<ARY<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<ARY<DIC<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<ARY<ARY<T>>>>, | ||
cb5: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<DIC<T>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<ARY<T>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<DIC<T>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<ARY<T>>>, | ||
cb4: SORT_DICT<ARY<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<DIC<T>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<ARY<T>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<T>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<DIC<T>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<T>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<ARY<T>>>, | ||
cb4: SORT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<T>>, | ||
cb1: SORT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<T>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT_DICT<T>, cb1: SORT<T>): ARY<ARY<T>>; | ||
@@ -47,26 +213,162 @@ export declare function group_sort<T>(data: DIC<ARY<T>>, cb3: SORT_DICT<ARY<T>>, cb2: SORT<ARY<T>>, cb1: SORT<T>): ARY<ARY<T>>; | ||
export declare function group_sort<T>(data: T, cb1: SORT<T>): T; | ||
export declare function group_sort<T>(data: DIC<DIC<DIC<DIC<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<DIC<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<ARY<DIC<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<ARY<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<DIC<DIC<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<DIC<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<ARY<DIC<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<ARY<ARY<T>>>>, cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<DIC<DIC<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<DIC<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<ARY<DIC<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<ARY<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<DIC<DIC<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<DIC<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<ARY<DIC<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<ARY<ARY<T>>>>, cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<DIC<T>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<ARY<T>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<DIC<T>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<ARY<ARY<T>>>, cb3: SORT_DICT<ARY<ARY<T>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<DIC<T>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<DIC<ARY<T>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<DIC<T>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT_DICT<T>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: ARY<ARY<ARY<T>>>, cb3: SORT<ARY<ARY<ARY<T>>>>, cb2: SORT<ARY<ARY<T>>>, cb1: SORT<ARY<T>>): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<DIC<DIC<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<DIC<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<ARY<DIC<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<ARY<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<DIC<DIC<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<DIC<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<ARY<DIC<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT_DICT<ARY<ARY<ARY<T>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<DIC<DIC<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<DIC<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<ARY<DIC<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<ARY<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<DIC<DIC<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<DIC<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<ARY<DIC<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<ARY<ARY<T>>>>, | ||
cb4: SORT<ARY<ARY<ARY<ARY<T>>>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<ARY<T>>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<DIC<T>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<DIC<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<DIC<T>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: DIC<ARY<ARY<T>>>, | ||
cb3: SORT_DICT<ARY<ARY<T>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<DIC<T>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<DIC<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT_DICT<ARY<T>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<DIC<T>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT_DICT<T> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>( | ||
data: ARY<ARY<ARY<T>>>, | ||
cb3: SORT<ARY<ARY<ARY<T>>>>, | ||
cb2: SORT<ARY<ARY<T>>>, | ||
cb1: SORT<ARY<T>> | ||
): ARY<ARY<ARY<T>>>; | ||
export declare function group_sort<T>(data: DIC<DIC<T>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT_DICT<T>): ARY<ARY<T>>; | ||
@@ -73,0 +375,0 @@ export declare function group_sort<T>(data: DIC<ARY<T>>, cb2: SORT_DICT<ARY<T>>, cb1: SORT<ARY<T>>): ARY<ARY<T>>; |
62
dic.js
import { inPlaceSort } from './fast-sort'; | ||
export function sort(value) { | ||
if (!(value instanceof Array)) { | ||
const list = []; | ||
for (const id in value) { | ||
const item = value[id]; | ||
item._id = id; | ||
list.push(item); | ||
} | ||
value = list; | ||
if (!(value instanceof Array)) { | ||
const list = []; | ||
for (const id in value) { | ||
const item = value[id]; | ||
item._id = id; | ||
list.push(item); | ||
} | ||
return inPlaceSort(value); | ||
value = list; | ||
} | ||
return inPlaceSort(value); | ||
} | ||
export function group_sort(data, cb, ...cbs) { | ||
if (!cbs.length) | ||
return cb(data); | ||
if (data instanceof Array) { | ||
for (const o of data) { | ||
; | ||
group_sort(o, ...cbs); | ||
} | ||
if (!cbs.length) return cb(data); | ||
if (data instanceof Array) { | ||
for (const o of data) { | ||
group_sort(o, ...cbs); | ||
} | ||
else { | ||
const list = []; | ||
for (const idx in data) { | ||
const item = group_sort(data[idx], ...cbs); | ||
item._id = idx; | ||
list.push(item); | ||
} | ||
data = list; | ||
} else { | ||
const list = []; | ||
for (const idx in data) { | ||
const item = group_sort(data[idx], ...cbs); | ||
item._id = idx; | ||
list.push(item); | ||
} | ||
return cb(data); | ||
data = list; | ||
} | ||
return cb(data); | ||
} | ||
export function dic(o, ...levels) { | ||
for (let i = 0; i < levels.length; i += 2) { | ||
const id = levels[i]; | ||
const format = levels[i + 1]; | ||
if (!o[id]) | ||
o[id] = format; | ||
o = o[id]; | ||
} | ||
return o; | ||
for (let i = 0; i < levels.length; i += 2) { | ||
const id = levels[i]; | ||
const format = levels[i + 1]; | ||
if (!o[id]) o[id] = format; | ||
o = o[id]; | ||
} | ||
return o; | ||
} | ||
@@ -44,0 +40,0 @@ /* |
declare type IOrder = 1 | -1; | ||
export interface IComparer { | ||
(a: any, b: any, order: IOrder): number; | ||
(a: any, b: any, order: IOrder): number; | ||
} | ||
export interface ISortInstanceOptions { | ||
comparer?: IComparer; | ||
inPlaceSorting?: boolean; | ||
comparer?: IComparer; | ||
inPlaceSorting?: boolean; | ||
} | ||
export interface ISortByFunction<T> { | ||
(prop: T): any; | ||
(prop: T): any; | ||
} | ||
export declare type ISortBy<T> = keyof T | ISortByFunction<T> | (keyof T | ISortByFunction<T>)[]; | ||
export interface ISortByAscSorter<T> extends ISortInstanceOptions { | ||
asc: boolean | ISortBy<T>; | ||
asc: boolean | ISortBy<T>; | ||
} | ||
export interface ISortByDescSorter<T> extends ISortInstanceOptions { | ||
desc: boolean | ISortBy<T>; | ||
desc: boolean | ISortBy<T>; | ||
} | ||
export declare type ISortByObjectSorter<T> = ISortByAscSorter<T> | ISortByDescSorter<T>; | ||
export declare type SortCmd<T> = { | ||
asc(sortBy?: ISortBy<T> | ISortBy<T>[]): T[]; | ||
desc(sortBy?: ISortBy<T> | ISortBy<T>[]): T[]; | ||
by(sortBy: ISortByObjectSorter<T> | ISortByObjectSorter<T>[]): T[]; | ||
asc(sortBy?: ISortBy<T> | ISortBy<T>[]): T[]; | ||
desc(sortBy?: ISortBy<T> | ISortBy<T>[]): T[]; | ||
by(sortBy: ISortByObjectSorter<T> | ISortByObjectSorter<T>[]): T[]; | ||
}; | ||
@@ -25,0 +25,0 @@ export declare const createNewSortInstance: (opts: ISortInstanceOptions) => <T>(_ctx: T[]) => SortCmd<T>; |
230
fast-sort.js
// >>> HELPERS <<< | ||
const castComparer = (comparer) => (a, b, order) => comparer(a, b, order) * order; | ||
const throwInvalidConfigErrorIfTrue = function (condition, context) { | ||
if (condition) | ||
throw Error(`Invalid sort config: ${context}`); | ||
if (condition) throw Error(`Invalid sort config: ${context}`); | ||
}; | ||
const unpackObjectSorter = function (sortByObj) { | ||
const { asc, desc } = sortByObj || {}; | ||
const order = asc ? 1 : -1; | ||
const sortBy = (asc || desc); | ||
// Validate object config | ||
throwInvalidConfigErrorIfTrue(!sortBy, 'Expected `asc` or `desc` property'); | ||
throwInvalidConfigErrorIfTrue(asc && desc, 'Ambiguous object with `asc` and `desc` config properties'); | ||
const comparer = sortByObj.comparer && castComparer(sortByObj.comparer); | ||
return { order, sortBy, comparer }; | ||
const { asc, desc } = sortByObj || {}; | ||
const order = asc ? 1 : -1; | ||
const sortBy = asc || desc; | ||
// Validate object config | ||
throwInvalidConfigErrorIfTrue(!sortBy, 'Expected `asc` or `desc` property'); | ||
throwInvalidConfigErrorIfTrue(asc && desc, 'Ambiguous object with `asc` and `desc` config properties'); | ||
const comparer = sortByObj.comparer && castComparer(sortByObj.comparer); | ||
return { order, sortBy, comparer }; | ||
}; | ||
// >>> SORTERS <<< | ||
const multiPropertySorterProvider = function (defaultComparer) { | ||
return function multiPropertySorter(sortBy, sortByArr, depth, order, comparer, a, b) { | ||
let valA; | ||
let valB; | ||
if (typeof sortBy === 'string') { | ||
valA = a[sortBy]; | ||
valB = b[sortBy]; | ||
} | ||
else if (typeof sortBy === 'function') { | ||
valA = sortBy(a); | ||
valB = sortBy(b); | ||
} | ||
else { | ||
const objectSorterConfig = unpackObjectSorter(sortBy); | ||
return multiPropertySorter(objectSorterConfig.sortBy, sortByArr, depth, objectSorterConfig.order, objectSorterConfig.comparer || defaultComparer, a, b); | ||
} | ||
const equality = comparer(valA, valB, order); | ||
if ((equality === 0 || (valA == null && valB == null)) && sortByArr.length > depth) { | ||
return multiPropertySorter(sortByArr[depth], sortByArr, depth + 1, order, comparer, a, b); | ||
} | ||
return equality; | ||
}; | ||
}; | ||
function getSortStrategy(sortBy, comparer, order) { | ||
// Flat array sorter | ||
if (sortBy === undefined || sortBy === true) { | ||
return (a, b) => comparer(a, b, order); | ||
} | ||
// Sort list of objects by single object key | ||
return function multiPropertySorter(sortBy, sortByArr, depth, order, comparer, a, b) { | ||
let valA; | ||
let valB; | ||
if (typeof sortBy === 'string') { | ||
throwInvalidConfigErrorIfTrue(sortBy.includes('.'), 'String syntax not allowed for nested properties.'); | ||
return (a, b) => comparer(a[sortBy], b[sortBy], order); | ||
valA = a[sortBy]; | ||
valB = b[sortBy]; | ||
} else if (typeof sortBy === 'function') { | ||
valA = sortBy(a); | ||
valB = sortBy(b); | ||
} else { | ||
const objectSorterConfig = unpackObjectSorter(sortBy); | ||
return multiPropertySorter( | ||
objectSorterConfig.sortBy, | ||
sortByArr, | ||
depth, | ||
objectSorterConfig.order, | ||
objectSorterConfig.comparer || defaultComparer, | ||
a, | ||
b | ||
); | ||
} | ||
// Sort list of objects by single function sorter | ||
if (typeof sortBy === 'function') { | ||
return (a, b) => comparer(sortBy(a), sortBy(b), order); | ||
const equality = comparer(valA, valB, order); | ||
if ((equality === 0 || (valA == null && valB == null)) && sortByArr.length > depth) { | ||
return multiPropertySorter(sortByArr[depth], sortByArr, depth + 1, order, comparer, a, b); | ||
} | ||
// Sort by multiple properties | ||
if (Array.isArray(sortBy)) { | ||
const multiPropSorter = multiPropertySorterProvider(comparer); | ||
return (a, b) => multiPropSorter(sortBy[0], sortBy, 1, order, comparer, a, b); | ||
} | ||
// Unpack object config to get actual sorter strategy | ||
const objectSorterConfig = unpackObjectSorter(sortBy); | ||
return getSortStrategy(objectSorterConfig.sortBy, objectSorterConfig.comparer || comparer, objectSorterConfig.order); | ||
return equality; | ||
}; | ||
}; | ||
function getSortStrategy(sortBy, comparer, order) { | ||
// Flat array sorter | ||
if (sortBy === undefined || sortBy === true) { | ||
return (a, b) => comparer(a, b, order); | ||
} | ||
// Sort list of objects by single object key | ||
if (typeof sortBy === 'string') { | ||
throwInvalidConfigErrorIfTrue(sortBy.includes('.'), 'String syntax not allowed for nested properties.'); | ||
return (a, b) => comparer(a[sortBy], b[sortBy], order); | ||
} | ||
// Sort list of objects by single function sorter | ||
if (typeof sortBy === 'function') { | ||
return (a, b) => comparer(sortBy(a), sortBy(b), order); | ||
} | ||
// Sort by multiple properties | ||
if (Array.isArray(sortBy)) { | ||
const multiPropSorter = multiPropertySorterProvider(comparer); | ||
return (a, b) => multiPropSorter(sortBy[0], sortBy, 1, order, comparer, a, b); | ||
} | ||
// Unpack object config to get actual sorter strategy | ||
const objectSorterConfig = unpackObjectSorter(sortBy); | ||
return getSortStrategy(objectSorterConfig.sortBy, objectSorterConfig.comparer || comparer, objectSorterConfig.order); | ||
} | ||
const sortArray = function (order, ctx, sortBy, comparer) { | ||
if (!Array.isArray(ctx)) { | ||
return ctx; | ||
} | ||
// Unwrap sortBy if array with only 1 value to get faster sort strategy | ||
if (Array.isArray(sortBy) && sortBy.length < 2) { | ||
; | ||
[sortBy] = sortBy; | ||
} | ||
return ctx.sort(getSortStrategy(sortBy, comparer, order)); | ||
if (!Array.isArray(ctx)) { | ||
return ctx; | ||
} | ||
// Unwrap sortBy if array with only 1 value to get faster sort strategy | ||
if (Array.isArray(sortBy) && sortBy.length < 2) { | ||
[sortBy] = sortBy; | ||
} | ||
return ctx.sort(getSortStrategy(sortBy, comparer, order)); | ||
}; | ||
export const createNewSortInstance = function (opts) { | ||
const comparer = castComparer(opts.comparer); | ||
return function (_ctx) { | ||
const ctx = Array.isArray(_ctx) && !opts.inPlaceSorting ? _ctx.slice() : _ctx; | ||
return { | ||
/** | ||
* Sort array in ascending order. | ||
* @example | ||
* sort([3, 1, 4]).asc(); | ||
* sort(users).asc(u => u.firstName); | ||
* sort(users).asc([ | ||
* U => u.firstName | ||
* u => u.lastName, | ||
* ]); | ||
*/ | ||
asc(sortBy) { | ||
return sortArray(1, ctx, sortBy, comparer); | ||
}, | ||
/** | ||
* Sort array in descending order. | ||
* @example | ||
* sort([3, 1, 4]).desc(); | ||
* sort(users).desc(u => u.firstName); | ||
* sort(users).desc([ | ||
* U => u.firstName | ||
* u => u.lastName, | ||
* ]); | ||
*/ | ||
desc(sortBy) { | ||
return sortArray(-1, ctx, sortBy, comparer); | ||
}, | ||
/** | ||
* Sort array in ascending or descending order. It allows sorting on multiple props | ||
* in different order for each of them. | ||
* @example | ||
* sort(users).by([ | ||
* { asc: u => u.score } | ||
* { desc: u => u.age } | ||
* ]); | ||
*/ | ||
by(sortBy) { | ||
return sortArray(1, ctx, sortBy, comparer); | ||
} | ||
}; | ||
const comparer = castComparer(opts.comparer); | ||
return function (_ctx) { | ||
const ctx = Array.isArray(_ctx) && !opts.inPlaceSorting ? _ctx.slice() : _ctx; | ||
return { | ||
/** | ||
* Sort array in ascending order. | ||
* @example | ||
* sort([3, 1, 4]).asc(); | ||
* sort(users).asc(u => u.firstName); | ||
* sort(users).asc([ | ||
* U => u.firstName | ||
* u => u.lastName, | ||
* ]); | ||
*/ | ||
asc(sortBy) { | ||
return sortArray(1, ctx, sortBy, comparer); | ||
}, | ||
/** | ||
* Sort array in descending order. | ||
* @example | ||
* sort([3, 1, 4]).desc(); | ||
* sort(users).desc(u => u.firstName); | ||
* sort(users).desc([ | ||
* U => u.firstName | ||
* u => u.lastName, | ||
* ]); | ||
*/ | ||
desc(sortBy) { | ||
return sortArray(-1, ctx, sortBy, comparer); | ||
}, | ||
/** | ||
* Sort array in ascending or descending order. It allows sorting on multiple props | ||
* in different order for each of them. | ||
* @example | ||
* sort(users).by([ | ||
* { asc: u => u.score } | ||
* { desc: u => u.age } | ||
* ]); | ||
*/ | ||
by(sortBy) { | ||
return sortArray(1, ctx, sortBy, comparer); | ||
} | ||
}; | ||
}; | ||
}; | ||
const defaultComparer = (a, b, order) => { | ||
if (a == null) | ||
return order; | ||
if (b == null) | ||
return -order; | ||
if (a < b) | ||
return -1; | ||
if (a === b) | ||
return 0; | ||
return 1; | ||
if (a == null) return order; | ||
if (b == null) return -order; | ||
if (a < b) return -1; | ||
if (a === b) return 0; | ||
return 1; | ||
}; | ||
export const sort = createNewSortInstance({ | ||
comparer: defaultComparer | ||
comparer: defaultComparer | ||
}); | ||
export const inPlaceSort = createNewSortInstance({ | ||
comparer: defaultComparer, | ||
inPlaceSorting: true | ||
comparer: defaultComparer, | ||
inPlaceSorting: true | ||
}); |
@@ -1,7 +0,13 @@ | ||
export declare function groupBy<T, U extends boolean>(list: T[], cb: (item: T) => 'true' | 'false'): { | ||
true?: T[]; | ||
false?: T[]; | ||
export declare function groupBy<T, U extends boolean>( | ||
list: T[], | ||
cb: (item: T) => 'true' | 'false' | ||
): { | ||
true?: T[]; | ||
false?: T[]; | ||
}; | ||
export declare function groupBy<T, U extends string>(list: T[], cb: (item: T) => U): { | ||
[category in U]?: T[]; | ||
export declare function groupBy<T, U extends string>( | ||
list: T[], | ||
cb: (item: T) => U | ||
): { | ||
[category in U]?: T[]; | ||
}; |
export function groupBy(list, cb) { | ||
const result = {}; | ||
for (const item of list) { | ||
const bucketCategory = cb(item).toString(); | ||
const bucket = result[bucketCategory]; | ||
if (bucket) { | ||
result[bucketCategory].push(item); | ||
} | ||
else { | ||
result[bucketCategory] = [item]; | ||
} | ||
const result = {}; | ||
for (const item of list) { | ||
const bucketCategory = cb(item).toString(); | ||
const bucket = result[bucketCategory]; | ||
if (bucket) { | ||
result[bucketCategory].push(item); | ||
} else { | ||
result[bucketCategory] = [item]; | ||
} | ||
return result; | ||
} | ||
return result; | ||
} |
{ | ||
"name": "svelte-map-reduce-store", | ||
"version": "0.1.5", | ||
"version": "0.1.6", | ||
"homepage": "https://github.com/7korobi/svelte-giji/tree/master/src/lib/map-reduce", | ||
@@ -18,3 +18,3 @@ "license": "MIT", | ||
"svelte": "^3.46.4", | ||
"svelte-petit-utils": "^0.1.0", | ||
"svelte-petit-utils": "^0.1.1", | ||
"tslib": "^2.3.1" | ||
@@ -25,8 +25,9 @@ }, | ||
".": "./index.js", | ||
"./base": "./base.js", | ||
"./dic": "./dic.js", | ||
"./fast-sort": "./fast-sort.js", | ||
"./group-by": "./group-by.js" | ||
"./store": "./store.js", | ||
"./tracker": "./tracker.js", | ||
"./diagram.svelte": "./diagram.svelte", | ||
"./pen.svelte": "./pen.svelte", | ||
"./zoom.svelte": "./zoom.svelte" | ||
}, | ||
"svelte": "./index.js" | ||
} |
## Svelte Map Reduce Store | ||
```typescript | ||
import { MapReduce } from 'svelte-map-reduce-store' | ||
import { MapReduce } from 'svelte-map-reduce-store'; | ||
export type Folder = { | ||
_id: 'hello' | 'test' | 'beta' | ||
server?: string | ||
_id: 'hello' | 'test' | 'beta'; | ||
server?: string; | ||
config?: { | ||
maxsize: { | ||
MAXSIZE_ACTION: number | ||
MAXSIZE_MEMOCNT: number | ||
MAXSIZE_MEMOLINE: number | ||
} | ||
MAXSIZE_ACTION: number; | ||
MAXSIZE_MEMOCNT: number; | ||
MAXSIZE_MEMOLINE: number; | ||
}; | ||
path: { | ||
DIR_LIB: './lib' | ||
DIR_HTML: './html' | ||
DIR_RS: './rs' | ||
DIR_VIL: './data/vil' | ||
DIR_USER: '../data/user' | ||
} | ||
} | ||
} | ||
DIR_LIB: './lib'; | ||
DIR_HTML: './html'; | ||
DIR_RS: './rs'; | ||
DIR_VIL: './data/vil'; | ||
DIR_USER: '../data/user'; | ||
}; | ||
}; | ||
}; | ||
@@ -31,8 +31,8 @@ export const Folders = MapReduce({ | ||
reduce: (data, doc) => { | ||
if (doc.server) data.sameSites.add(`http://${doc.server}`) | ||
if (doc.server) data.sameSites.add(`http://${doc.server}`); | ||
}, | ||
order: (data, { sort, group_sort }, mode: 'asc' | 'desc') => { | ||
data.list = sort(data.list)[mode]((o) => o.server) | ||
data.list = sort(data.list)[mode]((o) => o.server); | ||
} | ||
}) | ||
}); | ||
``` | ||
@@ -42,3 +42,3 @@ | ||
<script lang="ts"> | ||
import { Folders } from './model' | ||
import { Folders } from './model'; | ||
@@ -54,3 +54,3 @@ Folders.add([ | ||
} | ||
]) | ||
]); | ||
@@ -64,15 +64,15 @@ Folders.deploy({ | ||
} | ||
}) | ||
}); | ||
Folders.find('hello') | ||
Folders.find('hello'); | ||
Folders.reduce(['hello', 'test'], (o: { count: number }) => { | ||
o.count ||= 0 | ||
o.count++ | ||
}).asc((o) => o.count) | ||
o.count ||= 0; | ||
o.count++; | ||
}).asc((o) => o.count); | ||
Folders.sort('desc') | ||
Folders.sort('asc') | ||
Folders.sort('desc'); | ||
Folders.sort('asc'); | ||
$: console.log($Folders.list) | ||
$: console.log($Folders.list); | ||
</script> | ||
``` |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
860
29386
Updatedsvelte-petit-utils@^0.1.1