<A extends PrimaryKey.PrimaryKey>(
nodes: Iterable<A>,
options?: { readonly weight?: number | undefined }
): (self: HashRing<A>) => HashRing<A>
<A extends PrimaryKey.PrimaryKey>(
self: HashRing<A>,
nodes: Iterable<A>,
options?: { readonly weight?: number | undefined }
): HashRing<A>Adds new nodes to the ring. If a node already exists in the ring, it will be updated. For example, you can use this to update the node's weight.
When to use
Use to register or update several nodes in a HashRing at the same weight.
export const const addMany: {
<A extends PrimaryKey.PrimaryKey>(
nodes: Iterable<A>,
options?: {
readonly weight?: number | undefined
}
): (self: HashRing<A>) => HashRing<A>
<A extends PrimaryKey.PrimaryKey>(
self: HashRing<A>,
nodes: Iterable<A>,
options?: {
readonly weight?: number | undefined
}
): HashRing<A>
}
Adds new nodes to the ring. If a node already exists in the ring, it
will be updated. For example, you can use this to update the node's weight.
When to use
Use to register or update several nodes in a HashRing at the same weight.
addMany: {
<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): (self: HashRing<A>) => HashRing<A>
A extends import PrimaryKeyPrimaryKey.PrimaryKey>(nodes: Iterable<A>nodes: interface Iterable<T, TReturn = any, TNext = any>Iterable<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): (self: HashRing<A>) => HashRing<A>
A>, options: | {
readonly weight?: number | undefined
}
| undefined
options?: {
readonly weight?: number | undefinedweight?: number | undefined
}): (self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self: interface HashRing<A extends PrimaryKey.PrimaryKey>A weighted consistent-hashing ring for assigning inputs to nodes with stable
remapping as nodes are added or removed.
When to use
Use to maintain a mutable weighted hash ring for routing keys or shards to
nodes identified by PrimaryKey.
Details
Nodes are identified by their PrimaryKey value and can be iterated from the
ring.
HashRing<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): (self: HashRing<A>) => HashRing<A>
A>) => interface HashRing<A extends PrimaryKey.PrimaryKey>A weighted consistent-hashing ring for assigning inputs to nodes with stable
remapping as nodes are added or removed.
When to use
Use to maintain a mutable weighted hash ring for routing keys or shards to
nodes identified by PrimaryKey.
Details
Nodes are identified by their PrimaryKey value and can be iterated from the
ring.
HashRing<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): (self: HashRing<A>) => HashRing<A>
A>
<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A extends import PrimaryKeyPrimaryKey.PrimaryKey>(self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self: interface HashRing<A extends PrimaryKey.PrimaryKey>A weighted consistent-hashing ring for assigning inputs to nodes with stable
remapping as nodes are added or removed.
When to use
Use to maintain a mutable weighted hash ring for routing keys or shards to
nodes identified by PrimaryKey.
Details
Nodes are identified by their PrimaryKey value and can be iterated from the
ring.
HashRing<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A>, nodes: Iterable<A>nodes: interface Iterable<T, TReturn = any, TNext = any>Iterable<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A>, options: | {
readonly weight?: number | undefined
}
| undefined
options?: {
readonly weight?: number | undefinedweight?: number | undefined
}): interface HashRing<A extends PrimaryKey.PrimaryKey>A weighted consistent-hashing ring for assigning inputs to nodes with stable
remapping as nodes are added or removed.
When to use
Use to maintain a mutable weighted hash ring for routing keys or shards to
nodes identified by PrimaryKey.
Details
Nodes are identified by their PrimaryKey value and can be iterated from the
ring.
HashRing<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A>
} = import dualdual(
(args: anyargs) => const isHashRing: (
u: unknown
) => u is HashRing<any>
Checks whether a value is a HashRing.
When to use
Use to narrow an unknown value before treating it as a HashRing, such as
values crossing an untyped boundary.
Details
The guard checks for the module's internal TypeId property and narrows to
HashRing<any>.
Gotchas
This is a structural type-id check; it does not validate the ring's nodes,
ring, or weight state.
isHashRing(args: anyargs[0]),
<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A extends import PrimaryKeyPrimaryKey.PrimaryKey>(self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self: interface HashRing<A extends PrimaryKey.PrimaryKey>A weighted consistent-hashing ring for assigning inputs to nodes with stable
remapping as nodes are added or removed.
When to use
Use to maintain a mutable weighted hash ring for routing keys or shards to
nodes identified by PrimaryKey.
Details
Nodes are identified by their PrimaryKey value and can be iterated from the
ring.
HashRing<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A>, nodes: Iterable<A>nodes: interface Iterable<T, TReturn = any, TNext = any>Iterable<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A>, options: | {
readonly weight?: number | undefined
}
| undefined
options?: {
readonly weight?: number | undefinedweight?: number | undefined
}): interface HashRing<A extends PrimaryKey.PrimaryKey>A weighted consistent-hashing ring for assigning inputs to nodes with stable
remapping as nodes are added or removed.
When to use
Use to maintain a mutable weighted hash ring for routing keys or shards to
nodes identified by PrimaryKey.
Details
Nodes are identified by their PrimaryKey value and can be iterated from the
ring.
HashRing<function (type parameter) A in <A extends PrimaryKey.PrimaryKey>(self: HashRing<A>, nodes: Iterable<A>, options?: {
readonly weight?: number | undefined;
}): HashRing<A>
A> => {
const const weight: numberweight = var Math: MathAn intrinsic object that provides basic mathematics functionality and constants.
Math.Math.max(...values: number[]): numberReturns the larger of a set of supplied numeric expressions.
max(options: | {
readonly weight?: number | undefined
}
| undefined
options?.weight?: number | undefinedweight ?? 1, 0.1)
const const keys: string[]keys: interface Array<T>Array<string> = []
let let toRemove: Set<string> | undefinedtoRemove: interface Set<T>Set<string> | undefined
for (const const node: A extends PrimaryKey.PrimaryKeynode of nodes: Iterable<A>nodes) {
const const key: stringkey = import PrimaryKeyPrimaryKey.const value: (self: PrimaryKey) => stringExtracts the string value from a PrimaryKey.
When to use
Use to read the stable string identifier from a value that implements
PrimaryKey.
Example (Reading primary key values)
import { PrimaryKey } from "effect"
class OrderId implements PrimaryKey.PrimaryKey {
constructor(private timestamp: number, private sequence: number) {}
[PrimaryKey.symbol](): string {
return `order_${this.timestamp}_${this.sequence}`
}
}
const orderId = new OrderId(1640995200000, 1)
console.log(PrimaryKey.value(orderId)) // "order_1640995200000_1"
// Can also be used with simple string-based implementations
const simpleKey = {
[PrimaryKey.symbol]: () => "simple-key-123"
}
console.log(PrimaryKey.value(simpleKey)) // "simple-key-123"
value(const node: A extends PrimaryKey.PrimaryKeynode)
const const entry:
| [node: A, weight: number]
| undefined
entry = self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A>.nodes: Map<string, [node: A, weight: number]>nodes.Map<string, [node: A, weight: number]>.get(key: string): [node: A, weight: number] | undefinedReturns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.
get(const key: stringkey)
if (const entry:
| [node: A, weight: number]
| undefined
entry) {
if (const entry: [node: A, weight: number]const entry: {
0: A;
1: number;
length: 2;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
pop: () => number | A | undefined;
push: (...items: Array<number | A>) => number;
concat: { (...items: Array<ConcatArray<number | A>>): Array<number | A>; (...items: Array<number | A | ConcatArray<number | A>>): Array<number | A> };
join: (separator?: string) => string;
reverse: () => Array<number | A>;
shift: () => number | A | undefined;
slice: (start?: number, end?: number) => Array<number | A>;
sort: (compareFn?: ((a: number | A, b: number | A) => number) | undefined) => [node: A, weight: number];
splice: { (start: number, deleteCount?: number): Array<number | A>; (start: number, deleteCount: number, ...items: Array<number | A>): Array<number | A> };
unshift: (...items: Array<number | A>) => number;
indexOf: (searchElement: number | A, fromIndex?: number) => number;
lastIndexOf: (searchElement: number | A, fromIndex?: number) => number;
every: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): this is S[]; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): boolean };
some: (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: number | A, index: number, array: Array<number | A>) => void, thisArg?: any) => void;
map: (callbackfn: (value: number | A, index: number, array: Array<number | A>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): Array<S>; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): Array<number | A> };
reduce: { (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array: Array<number | A>) => number | A): number | A; (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array…;
reduceRight: { (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array: Array<number | A>) => number | A): number | A; (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array…;
find: { (predicate: (value: number | A, index: number, obj: Array<number | A>) => value is S, thisArg?: any): S | undefined; (predicate: (value: number | A, index: number, obj: Array<number | A>) => unknown, thisArg?: any): number | A | undefine…;
findIndex: (predicate: (value: number | A, index: number, obj: Array<number | A>) => unknown, thisArg?: any) => number;
fill: (value: number | A, start?: number, end?: number) => [node: A, weight: number];
copyWithin: (target: number, start: number, end?: number) => [node: A, weight: number];
entries: () => ArrayIterator<[number, number | A]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<number | A>;
includes: (searchElement: number | A, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: number | A, index: number, array: Array<number | A>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => number | A | undefined;
findLast: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): S | undefined; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): number | A | unde…;
findLastIndex: (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any) => number;
toReversed: () => Array<number | A>;
toSorted: (compareFn?: ((a: number | A, b: number | A) => number) | undefined) => Array<number | A>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<number | A>): Array<number | A>; (start: number, deleteCount?: number): Array<number | A> };
with: (index: number, value: number | A) => Array<number | A>;
}
entry[1] === const weight: numberweight) continue
let toRemove: Set<string> | undefinedtoRemove ??= new var Set: SetConstructor
new <string>(iterable?: Iterable<string> | null | undefined) => Set<string> (+1 overload)
Set()
let toRemove: Set<string>toRemove.Set<string>.add(value: string): Set<string>Appends a new element with a specified value to the end of the Set.
add(const key: stringkey)
self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A extends PrimaryKey.PrimaryKey>.totalWeightCache: numbertotalWeightCache -= const entry: [node: A, weight: number]const entry: {
0: A;
1: number;
length: 2;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
pop: () => number | A | undefined;
push: (...items: Array<number | A>) => number;
concat: { (...items: Array<ConcatArray<number | A>>): Array<number | A>; (...items: Array<number | A | ConcatArray<number | A>>): Array<number | A> };
join: (separator?: string) => string;
reverse: () => Array<number | A>;
shift: () => number | A | undefined;
slice: (start?: number, end?: number) => Array<number | A>;
sort: (compareFn?: ((a: number | A, b: number | A) => number) | undefined) => [node: A, weight: number];
splice: { (start: number, deleteCount?: number): Array<number | A>; (start: number, deleteCount: number, ...items: Array<number | A>): Array<number | A> };
unshift: (...items: Array<number | A>) => number;
indexOf: (searchElement: number | A, fromIndex?: number) => number;
lastIndexOf: (searchElement: number | A, fromIndex?: number) => number;
every: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): this is S[]; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): boolean };
some: (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: number | A, index: number, array: Array<number | A>) => void, thisArg?: any) => void;
map: (callbackfn: (value: number | A, index: number, array: Array<number | A>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): Array<S>; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): Array<number | A> };
reduce: { (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array: Array<number | A>) => number | A): number | A; (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array…;
reduceRight: { (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array: Array<number | A>) => number | A): number | A; (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array…;
find: { (predicate: (value: number | A, index: number, obj: Array<number | A>) => value is S, thisArg?: any): S | undefined; (predicate: (value: number | A, index: number, obj: Array<number | A>) => unknown, thisArg?: any): number | A | undefine…;
findIndex: (predicate: (value: number | A, index: number, obj: Array<number | A>) => unknown, thisArg?: any) => number;
fill: (value: number | A, start?: number, end?: number) => [node: A, weight: number];
copyWithin: (target: number, start: number, end?: number) => [node: A, weight: number];
entries: () => ArrayIterator<[number, number | A]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<number | A>;
includes: (searchElement: number | A, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: number | A, index: number, array: Array<number | A>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => number | A | undefined;
findLast: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): S | undefined; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): number | A | unde…;
findLastIndex: (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any) => number;
toReversed: () => Array<number | A>;
toSorted: (compareFn?: ((a: number | A, b: number | A) => number) | undefined) => Array<number | A>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<number | A>): Array<number | A>; (start: number, deleteCount?: number): Array<number | A> };
with: (index: number, value: number | A) => Array<number | A>;
}
entry[1]
self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A extends PrimaryKey.PrimaryKey>.totalWeightCache: numbertotalWeightCache += const weight: numberweight
const entry: [node: A, weight: number]const entry: {
0: A;
1: number;
length: 2;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
pop: () => number | A | undefined;
push: (...items: Array<number | A>) => number;
concat: { (...items: Array<ConcatArray<number | A>>): Array<number | A>; (...items: Array<number | A | ConcatArray<number | A>>): Array<number | A> };
join: (separator?: string) => string;
reverse: () => Array<number | A>;
shift: () => number | A | undefined;
slice: (start?: number, end?: number) => Array<number | A>;
sort: (compareFn?: ((a: number | A, b: number | A) => number) | undefined) => [node: A, weight: number];
splice: { (start: number, deleteCount?: number): Array<number | A>; (start: number, deleteCount: number, ...items: Array<number | A>): Array<number | A> };
unshift: (...items: Array<number | A>) => number;
indexOf: (searchElement: number | A, fromIndex?: number) => number;
lastIndexOf: (searchElement: number | A, fromIndex?: number) => number;
every: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): this is S[]; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): boolean };
some: (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: number | A, index: number, array: Array<number | A>) => void, thisArg?: any) => void;
map: (callbackfn: (value: number | A, index: number, array: Array<number | A>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): Array<S>; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): Array<number | A> };
reduce: { (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array: Array<number | A>) => number | A): number | A; (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array…;
reduceRight: { (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array: Array<number | A>) => number | A): number | A; (callbackfn: (previousValue: number | A, currentValue: number | A, currentIndex: number, array…;
find: { (predicate: (value: number | A, index: number, obj: Array<number | A>) => value is S, thisArg?: any): S | undefined; (predicate: (value: number | A, index: number, obj: Array<number | A>) => unknown, thisArg?: any): number | A | undefine…;
findIndex: (predicate: (value: number | A, index: number, obj: Array<number | A>) => unknown, thisArg?: any) => number;
fill: (value: number | A, start?: number, end?: number) => [node: A, weight: number];
copyWithin: (target: number, start: number, end?: number) => [node: A, weight: number];
entries: () => ArrayIterator<[number, number | A]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<number | A>;
includes: (searchElement: number | A, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: number | A, index: number, array: Array<number | A>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => number | A | undefined;
findLast: { (predicate: (value: number | A, index: number, array: Array<number | A>) => value is S, thisArg?: any): S | undefined; (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any): number | A | unde…;
findLastIndex: (predicate: (value: number | A, index: number, array: Array<number | A>) => unknown, thisArg?: any) => number;
toReversed: () => Array<number | A>;
toSorted: (compareFn?: ((a: number | A, b: number | A) => number) | undefined) => Array<number | A>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<number | A>): Array<number | A>; (start: number, deleteCount?: number): Array<number | A> };
with: (index: number, value: number | A) => Array<number | A>;
}
entry[1] = const weight: numberweight
} else {
self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A>.nodes: Map<string, [node: A, weight: number]>nodes.Map<string, [node: A, weight: number]>.set(key: string, value: [node: A, weight: number]): Map<string, [node: A, weight: number]>Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.
set(const key: stringkey, [const node: A extends PrimaryKey.PrimaryKeynode, const weight: numberweight])
self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A extends PrimaryKey.PrimaryKey>.totalWeightCache: numbertotalWeightCache += const weight: numberweight
}
const keys: string[]keys.Array<string>.push(...items: string[]): numberAppends new elements to the end of an array, and returns the new length of the array.
push(const key: stringkey)
}
if (let toRemove: Set<string> | undefinedtoRemove) {
self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A extends PrimaryKey.PrimaryKey>.ring: [hash: number, node: string][]ring = self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A extends PrimaryKey.PrimaryKey>.ring: [hash: number, node: string][]ring.Array<[hash: number, node: string]>.filter(predicate: (value: [hash: number, node: string], index: number, array: [hash: number, node: string][]) => unknown, thisArg?: any): [hash: number, node: string][] (+1 overload)Returns the elements of an array that meet the condition specified in a callback function.
filter(([, n: stringn]) => !let toRemove: Set<string>toRemove.Set<string>.has(value: string): booleanhas(n: stringn))
}
function addNodesToRing<
A extends PrimaryKey.PrimaryKey
>(
self: HashRing<A>,
keys: Array<string>,
weight: number
): void
addNodesToRing(self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self, const keys: string[]keys, var Math: MathAn intrinsic object that provides basic mathematics functionality and constants.
Math.Math.round(x: number): numberReturns a supplied numeric expression rounded to the nearest integer.
round(const weight: numberweight * self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self.HashRing<A extends PrimaryKey.PrimaryKey>.baseWeight: numberbaseWeight))
return self: HashRing<A>(parameter) self: {
baseWeight: number;
totalWeightCache: number;
nodes: Map<string, [node: A, weight: number]>;
ring: Array<[hash: number, node: string]>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self
}
)