@codemask-labs/nestjs-mongodb
Version:
Nestjs Mongodb Module
80 lines (79 loc) • 2.38 kB
TypeScript
import { InjectionToken } from '@nestjs/common';
import { CreateIndexesOptions } from 'mongodb';
import { MongoClientOptions, MongoDatabaseOptions } from './mongo';
import { BSONType } from './enums';
export type Class<T = any> = new (...args: Array<any>) => T;
export type MixedList<T> = Array<T> | {
[key: string]: T;
};
export type MongoHost = {
host: string;
port: string;
};
export type DataSourceOptions = {
database?: string;
host?: string;
port?: number;
hosts?: Array<MongoHost>;
replicaSet?: string;
username?: string;
password?: string;
synchronize?: boolean;
entities?: MixedList<Class>;
migrations?: MixedList<Class>;
clientOptions?: MongoClientOptions;
dbOptions?: MongoDatabaseOptions;
};
export type ForRootOptions = {
global?: boolean;
connectionName?: string;
options?: DataSourceOptions;
};
export type ForRootAsyncOptions = {
global?: boolean;
connectionName?: string;
inject?: Array<InjectionToken>;
useFactory: (...args: Array<any>) => Promise<DataSourceOptions> | DataSourceOptions;
};
export type EntityColumnTypes = StringConstructor | NumberConstructor | BooleanConstructor | ObjectConstructor | Class | Record<string, any>;
export type EntityColumn = {
type: EntityColumnTypes;
parent: Class;
propertyKey: string;
options: EntityColumnOptions;
};
export type EntityColumnOptions = {
type?: EntityColumnTypes;
array?: boolean;
enum?: object;
required?: boolean;
index?: string | Array<string> | CreateIndexesOptions;
};
export type EntityOptions = {
index?: Record<string, CreateIndexesOptions>;
validationLevel?: 'off' | 'strict' | 'moderate';
validationAction?: 'error' | 'warn';
};
export type EntityMetadata = {
collectionName: string | null;
entityOptions: EntityOptions;
entityColumns: Array<EntityColumn>;
};
export type EntityIndex = {
keys: Array<string>;
options: CreateIndexesOptions;
};
export type EntityColumnValidator = {
bsonType?: BSONType;
description?: string;
minItems?: number;
maxItems?: number;
required?: Array<string>;
enum?: Array<string>;
additionalProperties?: boolean;
items?: EntityColumnValidator;
properties?: Record<string, EntityColumnValidator>;
};
export type MongoJsonSchema = {
$jsonSchema?: EntityColumnValidator;
};