UNPKG

epic-p2p-shipping

Version:
34 lines (33 loc) 1.6 kB
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; }; }