57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { MongoInvalidArgumentError } from './error';
|
|
|
|
/** @internal */
|
|
const kPromise = Symbol('promise');
|
|
|
|
interface PromiseStore {
|
|
[kPromise]: PromiseConstructor | null;
|
|
}
|
|
|
|
const store: PromiseStore = {
|
|
[kPromise]: null
|
|
};
|
|
|
|
/**
|
|
* Global promise store allowing user-provided promises
|
|
* @deprecated Setting a custom promise library is deprecated the next major version will use the global Promise constructor only.
|
|
* @public
|
|
*/
|
|
export class PromiseProvider {
|
|
/**
|
|
* Validates the passed in promise library
|
|
* @deprecated Setting a custom promise library is deprecated the next major version will use the global Promise constructor only.
|
|
*/
|
|
static validate(lib: unknown): lib is PromiseConstructor {
|
|
if (typeof lib !== 'function')
|
|
throw new MongoInvalidArgumentError(`Promise must be a function, got ${lib}`);
|
|
return !!lib;
|
|
}
|
|
|
|
/**
|
|
* Sets the promise library
|
|
* @deprecated Setting a custom promise library is deprecated the next major version will use the global Promise constructor only.
|
|
*/
|
|
static set(lib: PromiseConstructor | null): void {
|
|
// eslint-disable-next-line no-restricted-syntax
|
|
if (lib === null) {
|
|
// Check explicitly against null since `.set()` (no args) should fall through to validate
|
|
store[kPromise] = null;
|
|
return;
|
|
}
|
|
|
|
if (!PromiseProvider.validate(lib)) {
|
|
// validate
|
|
return;
|
|
}
|
|
store[kPromise] = lib;
|
|
}
|
|
|
|
/**
|
|
* Get the stored promise library, or resolves passed in
|
|
* @deprecated Setting a custom promise library is deprecated the next major version will use the global Promise constructor only.
|
|
*/
|
|
static get(): PromiseConstructor | null {
|
|
return store[kPromise];
|
|
}
|
|
}
|