49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
// License: LGPL-3.0-or-later
|
|
// from https://github.com/mtraynham/lodash-joins/blob/c252b462981562451d85d1e09c8f273ce7fe06c5/lib/util/joinWrapper.ts
|
|
import {Accessor, Join, Merger, NonMergeJoin} from '../typings';
|
|
import basicAccessor from './basicAccessor';
|
|
import basicMerger from './basicMerger';
|
|
|
|
/**
|
|
* Wrap a join function to process inputs in a more succinct manner.
|
|
*/
|
|
/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/consistent-type-assertions */
|
|
function joinWrapper<LeftRow, Key>(
|
|
joinFn: NonMergeJoin<LeftRow, LeftRow, Key>
|
|
): NonMergeJoin<LeftRow, LeftRow, Key>;
|
|
function joinWrapper<LeftRow, RightRow, Key>(
|
|
joinFn: NonMergeJoin<LeftRow, RightRow, Key>
|
|
): NonMergeJoin<LeftRow, RightRow, Key>;
|
|
function joinWrapper<LeftRow, Key>(
|
|
joinFn: Join<LeftRow, LeftRow, Key, LeftRow>
|
|
): Join<LeftRow, LeftRow, Key, LeftRow>;
|
|
function joinWrapper<LeftRow, RightRow, Key>(
|
|
joinFn: Join<LeftRow, RightRow, Key, LeftRow & RightRow>
|
|
): Join<LeftRow, RightRow, Key, LeftRow & RightRow>;
|
|
function joinWrapper<LeftRow, RightRow, Key, MergeResult>(
|
|
joinFn: Join<LeftRow, RightRow, Key, MergeResult>
|
|
): Join<LeftRow, RightRow, Key, MergeResult> {
|
|
return (
|
|
a: LeftRow[],
|
|
aAccessor: Accessor<LeftRow, Key>,
|
|
b: RightRow[] = <any> a,
|
|
bAccessor: Accessor<RightRow, Key> = <any> aAccessor,
|
|
merger: Merger<LeftRow, RightRow, MergeResult> = <any> basicMerger
|
|
): MergeResult[] => {
|
|
if (!a) {
|
|
throw new Error('Missing required left array');
|
|
} else if (!aAccessor) {
|
|
throw new Error('Missing required left accessor');
|
|
}
|
|
return joinFn(
|
|
a,
|
|
basicAccessor(aAccessor),
|
|
b,
|
|
basicAccessor(bAccessor),
|
|
merger
|
|
);
|
|
};
|
|
}
|
|
/* eslint-enable @typescript-eslint/no-explicit-any,@typescript-eslint/consistent-type-assertions */
|
|
|
|
export default joinWrapper;
|