epic-p2p-shipping
Version:
A Point to Point Shipping calculation library.
34 lines (33 loc) • 1.6 kB
TypeScript
import { ShippingBranch, BranchName, BranchNodes, MergeUnion, NodeAmount } from "./branch";
export declare type ZoneName<T extends ShippingZone<any, any>> = T extends ShippingZone<infer N, any> ? N : never;
export declare type ZoneBranches<T extends ShippingZone<any, any>> = T extends ShippingZone<infer Z, infer B> ? MergeUnion<Z, B> : never;
export declare type ZoneResolverCallback = (toBranch: number, branchToBranch: number, fromBranch: number) => (number | undefined)[];
export declare type GetIndex<A extends any[], T> = {
[K in keyof A]: A[K] extends T ? K : never;
}[number];
export declare class ShippingZone<N extends string, T extends ShippingBranch<any, any>> {
protected name: N;
protected branches: T[];
protected Branches: {
[key: string]: ShippingBranch<any, any>;
};
protected Amounts: {
[key: string]: {
[key: string]: number;
};
};
protected ResolverCallback?: ZoneResolverCallback;
constructor(name: N, branches: T[]);
has: (branchName: string) => boolean;
getName: () => N;
getBranch: <B extends BranchName<T>>(name: B) => ShippingBranch<B, Record<BranchNodes<T>, NodeAmount>>;
getBranches: () => T[];
setAmount: (from: BranchName<T>, to: BranchName<T>, amount: number, recursive?: boolean) => this;
branchOf: (node: BranchNodes<T>) => T;
setResolver: (callback: ZoneResolverCallback) => this;
getPayments: (from: BranchNodes<T>, to: BranchNodes<T>) => {
toBranch: any;
branchToBranch: number;
fromBranch: any;
};
}