Socket
Socket
Sign inDemoInstall

svelte-map-reduce-store

Package Overview
Dependencies
3
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.5 to 0.1.6

98

base.d.ts
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 {};

@@ -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);
}
}
}
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>>;

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>;

// >>> 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>
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc