"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InsertManyOperation = exports.InsertOneOperation = exports.InsertOperation = void 0; const error_1 = require("../error"); const write_concern_1 = require("../write_concern"); const bulk_write_1 = require("./bulk_write"); const command_1 = require("./command"); const common_functions_1 = require("./common_functions"); const operation_1 = require("./operation"); /** @internal */ class InsertOperation extends command_1.CommandOperation { constructor(ns, documents, options) { super(undefined, options); this.options = { ...options, checkKeys: options.checkKeys ?? false }; this.ns = ns; this.documents = documents; } async execute(server, session) { const options = this.options ?? {}; const ordered = typeof options.ordered === 'boolean' ? options.ordered : true; const command = { insert: this.ns.collection, documents: this.documents, ordered }; if (typeof options.bypassDocumentValidation === 'boolean') { command.bypassDocumentValidation = options.bypassDocumentValidation; } // we check for undefined specifically here to allow falsy values // eslint-disable-next-line no-restricted-syntax if (options.comment !== undefined) { command.comment = options.comment; } return super.executeCommand(server, session, command); } } exports.InsertOperation = InsertOperation; class InsertOneOperation extends InsertOperation { constructor(collection, doc, options) { super(collection.s.namespace, (0, common_functions_1.prepareDocs)(collection, [doc], options), options); } async execute(server, session) { const res = await super.execute(server, session); if (res.code) throw new error_1.MongoServerError(res); if (res.writeErrors) { // This should be a WriteError but we can't change it now because of error hierarchy throw new error_1.MongoServerError(res.writeErrors[0]); } return { acknowledged: this.writeConcern?.w !== 0, insertedId: this.documents[0]._id }; } } exports.InsertOneOperation = InsertOneOperation; /** @internal */ class InsertManyOperation extends operation_1.AbstractOperation { constructor(collection, docs, options) { super(options); if (!Array.isArray(docs)) { throw new error_1.MongoInvalidArgumentError('Argument "docs" must be an array of documents'); } this.options = options; this.collection = collection; this.docs = docs; } async execute(server, session) { const coll = this.collection; const options = { ...this.options, ...this.bsonOptions, readPreference: this.readPreference }; const writeConcern = write_concern_1.WriteConcern.fromOptions(options); const bulkWriteOperation = new bulk_write_1.BulkWriteOperation(coll, (0, common_functions_1.prepareDocs)(coll, this.docs, options).map(document => ({ insertOne: { document } })), options); try { const res = await bulkWriteOperation.execute(server, session); return { acknowledged: writeConcern?.w !== 0, insertedCount: res.insertedCount, insertedIds: res.insertedIds }; } catch (err) { if (err && err.message === 'Operation must be an object with an operation key') { throw new error_1.MongoInvalidArgumentError('Collection.insertMany() cannot be called with an array that has null/undefined values'); } throw err; } } } exports.InsertManyOperation = InsertManyOperation; (0, operation_1.defineAspects)(InsertOperation, [operation_1.Aspect.RETRYABLE, operation_1.Aspect.WRITE_OPERATION]); (0, operation_1.defineAspects)(InsertOneOperation, [operation_1.Aspect.RETRYABLE, operation_1.Aspect.WRITE_OPERATION]); (0, operation_1.defineAspects)(InsertManyOperation, [operation_1.Aspect.WRITE_OPERATION]); //# sourceMappingURL=insert.js.map