333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/driver/mongodb/MongoDriver.ts"],"names":[],"mappings":"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","file":"MongoDriver.js","sourcesContent":["import {Driver} from \"../Driver\";\nimport {ConnectionIsNotSetError} from \"../../error/ConnectionIsNotSetError\";\nimport {DriverPackageNotInstalledError} from \"../../error/DriverPackageNotInstalledError\";\nimport {MongoQueryRunner} from \"./MongoQueryRunner\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {PlatformTools} from \"../../platform/PlatformTools\";\nimport {Connection} from \"../../connection/Connection\";\nimport {MongoConnectionOptions} from \"./MongoConnectionOptions\";\nimport {MappedColumnTypes} from \"../types/MappedColumnTypes\";\nimport {ColumnType} from \"../types/ColumnTypes\";\nimport {MongoSchemaBuilder} from \"../../schema-builder/MongoSchemaBuilder\";\nimport {DataTypeDefaults} from \"../types/DataTypeDefaults\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {ConnectionOptions} from \"../../connection/ConnectionOptions\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {ObjectUtils} from \"../../util/ObjectUtils\";\nimport {ApplyValueTransformers} from \"../../util/ApplyValueTransformers\";\n\n/**\n * Organizes communication with MongoDB.\n */\nexport class MongoDriver implements Driver {\n\n    // -------------------------------------------------------------------------\n    // Public Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Underlying mongodb library.\n     */\n    mongodb: any;\n\n    /**\n     * Mongodb does not require to dynamically create query runner each time,\n     * because it does not have a regular connection pool as RDBMS systems have.\n     */\n    queryRunner?: MongoQueryRunner;\n\n    // -------------------------------------------------------------------------\n    // Public Implemented Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Connection options.\n     */\n    options: MongoConnectionOptions;\n\n    /**\n     * Master database used to perform all write queries.\n     */\n    database?: string;\n\n    /**\n     * Indicates if replication is enabled.\n     */\n    isReplicated: boolean = false;\n\n    /**\n     * Indicates if tree tables are supported by this driver.\n     */\n    treeSupport = false;\n\n    /**\n     * Mongodb does not need to have column types because they are not used in schema sync.\n     */\n    supportedDataTypes: ColumnType[] = [];\n\n    /**\n     * Gets list of spatial column data types.\n     */\n    spatialTypes: ColumnType[] = [];\n\n    /**\n     * Gets list of column data types that support length by a driver.\n     */\n    withLengthColumnTypes: ColumnType[] = [];\n\n    /**\n     * Gets list of column data types that support precision by a driver.\n     */\n    withPrecisionColumnTypes: ColumnType[] = [];\n\n    /**\n     * Gets list of column data types that support scale by a driver.\n     */\n    withScaleColumnTypes: ColumnType[] = [];\n\n    /**\n     * Mongodb does not need to have a strong defined mapped column types because they are not used in schema sync.\n     */\n    mappedDataTypes: MappedColumnTypes = {\n        createDate: \"int\",\n        createDateDefault: \"\",\n        updateDate: \"int\",\n        updateDateDefault: \"\",\n        version: \"int\",\n        treeLevel: \"int\",\n        migrationId: \"int\",\n        migrationName: \"int\",\n        migrationTimestamp: \"int\",\n        cacheId: \"int\",\n        cacheIdentifier: \"int\",\n        cacheTime: \"int\",\n        cacheDuration: \"int\",\n        cacheQuery: \"int\",\n        cacheResult: \"int\",\n        metadataType: \"int\",\n        metadataDatabase: \"int\",\n        metadataSchema: \"int\",\n        metadataTable: \"int\",\n        metadataName: \"int\",\n        metadataValue: \"int\",\n    };\n\n    /**\n     * Default values of length, precision and scale depends on column data type.\n     * Used in the cases when length/precision/scale is not specified by user.\n     */\n    dataTypeDefaults: DataTypeDefaults;\n\n    /**\n     * No documentation specifying a maximum length for identifiers could be found\n     * for MongoDB.\n     */\n    maxAliasLength?: number;\n\n    // -------------------------------------------------------------------------\n    // Protected Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Valid mongo connection options\n     * NOTE: Keep sync with MongoConnectionOptions\n     * Sync with http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html\n     */\n    protected validOptionNames: string[] = [\n        \"poolSize\",\n        \"ssl\",\n        \"sslValidate\",\n        \"sslCA\",\n        \"sslCert\",\n        \"sslKey\",\n        \"sslPass\",\n        \"sslCRL\",\n        \"autoReconnect\",\n        \"noDelay\",\n        \"keepAlive\",\n        \"keepAliveInitialDelay\",\n        \"connectTimeoutMS\",\n        \"family\",\n        \"socketTimeoutMS\",\n        \"reconnectTries\",\n        \"reconnectInterval\",\n        \"ha\",\n        \"haInterval\",\n        \"replicaSet\",\n        \"secondaryAcceptableLatencyMS\",\n        \"acceptableLatencyMS\",\n        \"connectWithNoPrimary\",\n        \"authSource\",\n        \"w\",\n        \"wtimeout\",\n        \"j\",\n        \"forceServerObjectId\",\n        \"serializeFunctions\",\n        \"ignoreUndefined\",\n        \"raw\",\n        \"bufferMaxEntries\",\n        \"readPreference\",\n        \"pkFactory\",\n        \"promiseLibrary\",\n        \"readConcern\",\n        \"maxStalenessSeconds\",\n        \"loggerLevel\",\n        // Do not overwrite BaseConnectionOptions.logger\n        // \"logger\",\n        \"promoteValues\",\n        \"promoteBuffers\",\n        \"promoteLongs\",\n        \"domainsEnabled\",\n        \"checkServerIdentity\",\n        \"validateOptions\",\n        \"appname\",\n        // omit auth - we are building url from username and password\n        // \"auth\"\n        \"authMechanism\",\n        \"compression\",\n        \"fsync\",\n        \"readPreferenceTags\",\n        \"numberOfRetries\",\n        \"auto_reconnect\",\n        \"minSize\",\n        \"monitorCommands\",\n        \"useNewUrlParser\"\n    ];\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(protected connection: Connection) {\n        this.options = connection.options as MongoConnectionOptions;\n\n        // validate options to make sure everything is correct and driver will be able to establish connection\n        this.validateOptions(connection.options);\n\n        // load mongodb package\n        this.loadDependencies();\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Performs connection to the database.\n     */\n    connect(): Promise<void> {\n        return new Promise<void>((ok, fail) => {\n            this.mongodb.MongoClient.connect(\n                this.buildConnectionUrl(),\n                this.buildConnectionOptions(),\n                (err: any, client: any) => {\n                    if (err) return fail(err);\n\n                    this.queryRunner = new MongoQueryRunner(this.connection, client);\n                    ObjectUtils.assign(this.queryRunner, { manager: this.connection.manager });\n                    ok();\n                });\n        });\n    }\n\n    afterConnect(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    /**\n     * Closes connection with the database.\n     */\n    async disconnect(): Promise<void> {\n        return new Promise<void>((ok, fail) => {\n            if (!this.queryRunner)\n                return fail(new ConnectionIsNotSetError(\"mongodb\"));\n\n            const handler = (err: any) => err ? fail(err) : ok();\n            this.queryRunner.databaseConnection.close(handler);\n            this.queryRunner = undefined;\n        });\n    }\n\n    /**\n     * Creates a schema builder used to build and sync a schema.\n     */\n    createSchemaBuilder() {\n        return new MongoSchemaBuilder(this.connection);\n    }\n\n    /**\n     * Creates a query runner used to execute database queries.\n     */\n    createQueryRunner(mode: \"master\"|\"slave\" = \"master\") {\n        return this.queryRunner!;\n    }\n\n    /**\n     * Replaces parameters in the given sql with special escaping character\n     * and an array of parameter names to be passed to a query.\n     */\n    escapeQueryWithParameters(sql: string, parameters: ObjectLiteral, nativeParameters: ObjectLiteral): [string, any[]] {\n        throw new Error(`This operation is not supported by Mongodb driver.`);\n    }\n\n    /**\n     * Escapes a column name.\n     */\n    escape(columnName: string): string {\n        return columnName;\n    }\n\n    /**\n     * Build full table name with database name, schema name and table name.\n     * E.g. \"myDB\".\"mySchema\".\"myTable\"\n     */\n    buildTableName(tableName: string, schema?: string, database?: string): string {\n        return tableName;\n    }\n\n    /**\n     * Prepares given value to a value to be persisted, based on its column type and metadata.\n     */\n    preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n        if (columnMetadata.transformer)\n            value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n        return value;\n    }\n\n    /**\n     * Prepares given value to a value to be persisted, based on its column type or metadata.\n     */\n    prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n        if (columnMetadata.transformer)\n            value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n        return value;\n    }\n\n    /**\n     * Creates a database type from a given column metadata.\n     */\n    normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number|null, scale?: number }): string {\n        throw new Error(`MongoDB is schema-less, not supported by this driver.`);\n    }\n\n    /**\n     * Normalizes \"default\" value of the column.\n     */\n    normalizeDefault(columnMetadata: ColumnMetadata): string {\n        throw new Error(`MongoDB is schema-less, not supported by this driver.`);\n    }\n\n    /**\n     * Normalizes \"isUnique\" value of the column.\n     */\n    normalizeIsUnique(column: ColumnMetadata): boolean {\n        throw new Error(`MongoDB is schema-less, not supported by this driver.`);\n    }\n\n    /**\n     * Calculates column length taking into account the default length values.\n     */\n    getColumnLength(column: ColumnMetadata): string {\n        throw new Error(`MongoDB is schema-less, not supported by this driver.`);\n    }\n\n    /**\n     * Normalizes \"default\" value of the column.\n     */\n    createFullType(column: TableColumn): string {\n        throw new Error(`MongoDB is schema-less, not supported by this driver.`);\n    }\n\n    /**\n     * Obtains a new database connection to a master server.\n     * Used for replication.\n     * If replication is not setup then returns default connection's database connection.\n     */\n    obtainMasterConnection(): Promise<any> {\n        return Promise.resolve();\n    }\n\n    /**\n     * Obtains a new database connection to a slave server.\n     * Used for replication.\n     * If replication is not setup then returns master (default) connection's database connection.\n     */\n    obtainSlaveConnection(): Promise<any> {\n        return Promise.resolve();\n    }\n\n    /**\n     * Creates generated map of values generated or returned by database after INSERT query.\n     */\n    createGeneratedMap(metadata: EntityMetadata, insertedId: any) {\n        return metadata.objectIdColumn!.createValueMap(insertedId);\n    }\n\n    /**\n     * Differentiate columns of this table and columns from the given column metadatas columns\n     * and returns only changed.\n     */\n    findChangedColumns(tableColumns: TableColumn[], columnMetadatas: ColumnMetadata[]): ColumnMetadata[] {\n        throw new Error(`MongoDB is schema-less, not supported by this driver.`);\n    }\n\n    /**\n     * Returns true if driver supports RETURNING / OUTPUT statement.\n     */\n    isReturningSqlSupported(): boolean {\n        return false;\n    }\n\n    /**\n     * Returns true if driver supports uuid values generation on its own.\n     */\n    isUUIDGenerationSupported(): boolean {\n        return false;\n    }\n\n    /**\n     * Creates an escaped parameter.\n     */\n    createParameter(parameterName: string, index: number): string {\n        return \"\";\n    }\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Validate driver options to make sure everything is correct and driver will be able to establish connection.\n     */\n    protected validateOptions(options: ConnectionOptions) { // todo: fix\n        // if (!options.url) {\n        //     if (!options.database)\n        //         throw new DriverOptionNotSetError(\"database\");\n        // }\n    }\n\n    /**\n     * Loads all driver dependencies.\n     */\n    protected loadDependencies(): any {\n        try {\n            this.mongodb = PlatformTools.load(\"mongodb\");  // try to load native driver dynamically\n\n        } catch (e) {\n            throw new DriverPackageNotInstalledError(\"MongoDB\", \"mongodb\");\n        }\n    }\n\n    /**\n     * Builds connection url that is passed to underlying driver to perform connection to the mongodb database.\n     */\n    protected buildConnectionUrl(): string {\n        if (this.options.url)\n            return this.options.url;\n\n        const credentialsUrlPart = (this.options.username && this.options.password)\n            ? `${this.options.username}:${this.options.password}@`\n            : \"\";\n\n        return `mongodb://${credentialsUrlPart}${this.options.host || \"127.0.0.1\"}:${this.options.port || \"27017\"}/${this.options.database}`;\n    }\n\n    /**\n     * Build connection options from MongoConnectionOptions\n     */\n    protected buildConnectionOptions(): any {\n        const mongoOptions: any = {};\n\n        for (let index = 0; index < this.validOptionNames.length; index++) {\n            const optionName = this.validOptionNames[index];\n\n            if (this.options.extra && optionName in this.options.extra) {\n                mongoOptions[optionName] = this.options.extra[optionName];\n            } else if (optionName in this.options) {\n                mongoOptions[optionName] = (this.options as any)[optionName];\n            }\n        }\n\n        return mongoOptions;\n    }\n\n}\n"],"sourceRoot":"../.."}