Skip to content

Commit d3a8199

Browse files
committed
fix: Make Denque types more acurate and break out constructor types.
1 parent f5980f2 commit d3a8199

File tree

5 files changed

+40
-12
lines changed

5 files changed

+40
-12
lines changed

src/change_stream.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// eslint-disable-next-line @typescript-eslint/no-var-requires
2-
const Denque = require('denque') as DenqueLike;
2+
const Denque = require('denque') as DenqueConstructor;
33
import { MongoError, AnyError, isResumableError } from './error';
44
import { AggregateOperation, AggregateOptions } from './operations/aggregate';
55
import {
@@ -27,7 +27,13 @@ import {
2727
} from './cursor/abstract_cursor';
2828
import type { ClientSession } from './sessions';
2929
import { executeOperation, ExecutionResult } from './operations/execute_operation';
30-
import { DenqueLike, InferIdType, Nullable, TypedEventEmitter } from './mongo_types';
30+
import {
31+
DenqueConstructor,
32+
DenqueLike,
33+
InferIdType,
34+
Nullable,
35+
TypedEventEmitter
36+
} from './mongo_types';
3137

3238
/** @internal */
3339
const kResumeQueue = Symbol('resumeQueue');

src/cmap/connection_pool.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// eslint-disable-next-line @typescript-eslint/no-var-requires
2-
const Denque = require('denque') as DenqueLike;
2+
const Denque = require('denque') as DenqueConstructor;
33
import { Logger } from '../logger';
44
import { APM_EVENTS, Connection, ConnectionEvents, ConnectionOptions } from './connection';
55
import { connect } from './connect';
@@ -18,7 +18,12 @@ import {
1818
ConnectionCheckedInEvent,
1919
ConnectionPoolClearedEvent
2020
} from './connection_pool_events';
21-
import { CancellationToken, DenqueLike, TypedEventEmitter } from '../mongo_types';
21+
import {
22+
CancellationToken,
23+
DenqueConstructor,
24+
DenqueLike,
25+
TypedEventEmitter
26+
} from '../mongo_types';
2227

2328
/** @internal */
2429
const kLogger = Symbol('logger');

src/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -366,5 +366,6 @@ export type {
366366
ProjectionOperators,
367367
MetaProjectionOperators,
368368
MetaSortOperators,
369-
DenqueLike
369+
DenqueLike,
370+
DenqueConstructor
370371
} from './mongo_types';

src/mongo_types.ts

+21-5
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,30 @@ export class TypedEventEmitter<Events extends EventsDescription> extends EventEm
179179
/** @public */
180180
export class CancellationToken extends TypedEventEmitter<{ cancel(): void }> {}
181181

182+
/** @internal */
183+
export type DenqueConstructor = {
184+
new <T = any>(): DenqueLike<T>;
185+
new <T = any>(array: T[]): DenqueLike<T>;
186+
new <T = any>(array: T[], options: { capacity?: number }): DenqueLike<T>;
187+
};
188+
182189
/** @internal */
183190
export type DenqueLike<T = any> = {
184-
new (): DenqueLike<T>;
191+
push(item: T): number;
192+
unshift(item: T): number;
193+
pop(): T | undefined;
194+
removeBack(): T | undefined;
185195
shift(): T | undefined;
186-
push(item: T): void;
187-
pop(): T;
188-
peekFront(): T;
189-
toArray(): T[];
196+
peekBack(): T | undefined;
197+
peekFront(): T | undefined;
198+
peekAt(index: number): T | undefined;
199+
get(index: number): T | undefined;
200+
remove(index: number, count: number): T[];
201+
removeOne(index: number): T | undefined;
202+
splice(index: number, count: number, ...item: T[]): T[] | undefined;
203+
isEmpty(): boolean;
190204
clear(): void;
205+
toString(): string;
206+
toArray(): T[];
191207
readonly length: number;
192208
};

src/sdam/topology.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// eslint-disable-next-line @typescript-eslint/no-var-requires
2-
const Denque = require('denque') as DenqueLike;
2+
const Denque = require('denque') as DenqueConstructor;
33
import { ReadPreference, ReadPreferenceLike } from '../read_preference';
44
import { compareTopologyVersion, ServerDescription } from './server_description';
55
import { TopologyDescription } from './topology_description';
@@ -53,7 +53,7 @@ import { DestroyOptions, Connection, ConnectionEvents } from '../cmap/connection
5353
import type { MongoOptions, ServerApi } from '../mongo_client';
5454
import { DEFAULT_OPTIONS } from '../connection_string';
5555
import { serialize, deserialize } from '../bson';
56-
import { DenqueLike, TypedEventEmitter } from '../mongo_types';
56+
import { DenqueConstructor, DenqueLike, TypedEventEmitter } from '../mongo_types';
5757

5858
// Global state
5959
let globalTopologyCounter = 0;

0 commit comments

Comments
 (0)