Skip to content

Commit

Permalink
fix!: remove custom Denque type information and fix event issue
Browse files Browse the repository at this point in the history
  • Loading branch information
nbbeeken committed May 20, 2021
1 parent afe89df commit 176f7da
Show file tree
Hide file tree
Showing 9 changed files with 10,181 additions and 84 deletions.
10,180 changes: 10,159 additions & 21 deletions package-lock.json

Large diffs are not rendered by default.

12 changes: 3 additions & 9 deletions src/change_stream.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const Denque = require('denque') as DenqueConstructor;
import Denque = require('denque');
import { MongoError, AnyError, isResumableError } from './error';
import { AggregateOperation, AggregateOptions } from './operations/aggregate';
import {
Expand Down Expand Up @@ -27,13 +27,7 @@ import {
} from './cursor/abstract_cursor';
import type { ClientSession } from './sessions';
import { executeOperation, ExecutionResult } from './operations/execute_operation';
import {
DenqueConstructor,
DenqueLike,
InferIdType,
Nullable,
TypedEventEmitter
} from './mongo_types';
import { InferIdType, Nullable, TypedEventEmitter } from './mongo_types';

/** @internal */
const kResumeQueue = Symbol('resumeQueue');
Expand Down Expand Up @@ -207,7 +201,7 @@ export class ChangeStream<TSchema extends Document> extends TypedEventEmitter<Ch
cursor?: ChangeStreamCursor<TSchema>;
streamOptions?: CursorStreamOptions;
/** @internal */
[kResumeQueue]: DenqueLike;
[kResumeQueue]: Denque;
/** @internal */
[kCursorStream]?: Readable;
/** @internal */
Expand Down
13 changes: 4 additions & 9 deletions src/cmap/connection_pool.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const Denque = require('denque') as DenqueConstructor;
import Denque = require('denque');
import { Logger } from '../logger';
import { APM_EVENTS, Connection, ConnectionEvents, ConnectionOptions } from './connection';
import { connect } from './connect';
Expand All @@ -18,12 +18,7 @@ import {
ConnectionCheckedInEvent,
ConnectionPoolClearedEvent
} from './connection_pool_events';
import {
CancellationToken,
DenqueConstructor,
DenqueLike,
TypedEventEmitter
} from '../mongo_types';
import { CancellationToken, TypedEventEmitter } from '../mongo_types';

/** @internal */
const kLogger = Symbol('logger');
Expand Down Expand Up @@ -92,7 +87,7 @@ export class ConnectionPool extends TypedEventEmitter<ConnectionPoolEvents> {
/** @internal */
[kLogger]: Logger;
/** @internal */
[kConnections]: DenqueLike<Connection>;
[kConnections]: Denque<Connection>;
/**
* An integer expressing how many total connections are permitted
* @internal
Expand All @@ -110,7 +105,7 @@ export class ConnectionPool extends TypedEventEmitter<ConnectionPoolEvents> {
/** @internal */
[kCancellationToken]: CancellationToken;
/** @internal */
[kWaitQueue]: DenqueLike<WaitQueueMember>;
[kWaitQueue]: Denque<WaitQueueMember>;

/**
* Emitted when the connection pool is created.
Expand Down
4 changes: 1 addition & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,5 @@ export type {
InferIdType,
ProjectionOperators,
MetaProjectionOperators,
MetaSortOperators,
DenqueLike,
DenqueConstructor
MetaSortOperators
} from './mongo_types';
6 changes: 5 additions & 1 deletion src/mongo_client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,11 @@ export interface MongoClientPrivate {
}

/** @public */
export type MongoClientEvents = Pick<TopologyEvents, typeof MONGO_CLIENT_EVENTS[number]>;
export type MongoClientEvents = Pick<TopologyEvents, typeof MONGO_CLIENT_EVENTS[number]> & {
// In previous versions the open event emitted a topology, in an effort to no longer
// expose internals but continue to expose this useful event API, it now emits a mongoClient
open(mongoClient: MongoClient): void;
};

/** @internal */
const kOptions = Symbol('options');
Expand Down
28 changes: 0 additions & 28 deletions src/mongo_types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,31 +178,3 @@ export class TypedEventEmitter<Events extends EventsDescription> extends EventEm

/** @public */
export class CancellationToken extends TypedEventEmitter<{ cancel(): void }> {}

/** @internal */
export type DenqueConstructor = {
new <T = any>(): DenqueLike<T>;
new <T = any>(array: T[]): DenqueLike<T>;
new <T = any>(array: T[], options: { capacity?: number }): DenqueLike<T>;
};

/** @internal */
export type DenqueLike<T = any> = {
push(item: T): number;
unshift(item: T): number;
pop(): T | undefined;
removeBack(): T | undefined;
shift(): T | undefined;
peekBack(): T | undefined;
peekFront(): T | undefined;
peekAt(index: number): T | undefined;
get(index: number): T | undefined;
remove(index: number, count: number): T[];
removeOne(index: number): T | undefined;
splice(index: number, count: number, ...item: T[]): T[] | undefined;
isEmpty(): boolean;
clear(): void;
toString(): string;
toArray(): T[];
readonly length: number;
};
7 changes: 1 addition & 6 deletions src/operations/connect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,7 @@ function createTopology(
// save the reference to the topology on the client ASAP if the event handlers need to access it
mongoClient.topology = topology;

// TODO(NODE-3273) - remove error
topology.once(Topology.OPEN, (error, topology) =>
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
mongoClient.emit(Topology.OPEN, error, topology)
);
topology.once(Topology.OPEN, () => mongoClient.emit('open', mongoClient));

for (const event of MONGO_CLIENT_EVENTS) {
topology.on(event, (...args: any[]) => mongoClient.emit(event, ...(args as any)));
Expand Down
12 changes: 6 additions & 6 deletions src/sdam/topology.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const Denque = require('denque') as DenqueConstructor;
import Denque = require('denque');
import { ReadPreference, ReadPreferenceLike } from '../read_preference';
import { compareTopologyVersion, ServerDescription } from './server_description';
import { TopologyDescription } from './topology_description';
Expand Down Expand Up @@ -53,7 +53,7 @@ import { DestroyOptions, Connection, ConnectionEvents } from '../cmap/connection
import type { MongoOptions, ServerApi } from '../mongo_client';
import { DEFAULT_OPTIONS } from '../connection_string';
import { serialize, deserialize } from '../bson';
import { DenqueConstructor, DenqueLike, TypedEventEmitter } from '../mongo_types';
import { TypedEventEmitter } from '../mongo_types';

// Global state
let globalTopologyCounter = 0;
Expand Down Expand Up @@ -172,8 +172,8 @@ export type TopologyEvents = {
serverOpening(event: ServerOpeningEvent): void;
serverClosed(event: ServerClosedEvent): void;
serverDescriptionChanged(event: ServerDescriptionChangedEvent): void;
topologyClosed(event: TopologyOpeningEvent): void;
topologyOpening(event: TopologyClosedEvent): void;
topologyClosed(event: TopologyClosedEvent): void;
topologyOpening(event: TopologyOpeningEvent): void;
topologyDescriptionChanged(event: TopologyDescriptionChangedEvent): void;
error(error: Error): void;
/** TODO(NODE-3273) - remove error @internal */
Expand All @@ -192,7 +192,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
/** @internal */
s: TopologyPrivate;
/** @internal */
[kWaitQueue]: DenqueLike<ServerSelectionRequest>;
[kWaitQueue]: Denque<ServerSelectionRequest>;
/** @internal */
ismaster?: Document;
/** @internal */
Expand Down Expand Up @@ -950,7 +950,7 @@ function srvPollingHandler(topology: Topology) {
};
}

function drainWaitQueue(queue: DenqueLike<ServerSelectionRequest>, err?: AnyError) {
function drainWaitQueue(queue: Denque<ServerSelectionRequest>, err?: AnyError) {
while (queue.length) {
const waitQueueMember = queue.shift();
if (!waitQueueMember) {
Expand Down
3 changes: 2 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
"target": "ES2018",
"module": "commonJS",
"moduleResolution": "node",
"esModuleInterop": true,
"lib": ["ES2018"],
// We don't make use of tslib helpers, all syntax used is supported by target engine
"importHelpers": false,
"noEmitHelpers": true,
"noEmitHelpers": false,
// Never emit error filled code
"noEmitOnError": true,
"outDir": "lib",
Expand Down

0 comments on commit 176f7da

Please sign in to comment.