@datastax/astra-mongoose
Version:
Astra's NodeJS Mongoose compatibility client
133 lines • 4.77 kB
JavaScript
;
// Copyright DataStax, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.TablesDb = exports.CollectionsDb = exports.BaseDb = void 0;
const astraMongooseError_1 = require("../astraMongooseError");
/**
* Defines the base database class for interacting with Astra DB. Responsible for creating collections and tables.
* This class abstracts the operations for both collections mode and tables mode. There is a separate TablesDb class
* for tables and CollectionsDb class for collections.
*/
class BaseDb {
constructor(astraDb, keyspaceName, isTable) {
this.astraDb = astraDb;
astraDb.useKeyspace(keyspaceName);
this.isTable = !!isTable;
this.name = keyspaceName;
}
/**
* Create a new table with the specified name and definition
* @param name
* @param definition
*/
async createTable(name, definition, options) {
return this.astraDb.createTable(name, { ...options, definition });
}
/**
* Drop a collection by name.
* @param name The name of the collection to be dropped.
*/
async dropCollection(name, options) {
return this.astraDb.dropCollection(name, options);
}
/**
* Drop a table by name. This function does **not** throw an error if the table does not exist.
* @param name
*/
async dropTable(name, options) {
return this.astraDb.dropTable(name, {
ifExists: true,
...options
});
}
async listCollections(options) {
if (options?.nameOnly) {
return this.astraDb.listCollections({ ...options, nameOnly: true });
}
return this.astraDb.listCollections({ ...options, nameOnly: false });
}
async listTables(options) {
if (options?.nameOnly) {
return this.astraDb.listTables({ ...options, nameOnly: true });
}
return this.astraDb.listTables({ ...options, nameOnly: false });
}
/**
* Execute a command against the database.
* @param command The command to be executed.
*/
async command(command) {
return this.astraDb.command(command);
}
}
exports.BaseDb = BaseDb;
/**
* Db instance that creates and manages collections.
* @extends BaseDb
*/
class CollectionsDb extends BaseDb {
/**
* Creates an instance of CollectionsDb. Do not instantiate this class directly.
* @param astraDb The AstraDb instance to interact with the database.
* @param keyspaceName The name of the keyspace to use.
*/
constructor(astraDb, keyspaceName) {
super(astraDb, keyspaceName, false);
}
/**
* Get a collection by name.
* @param name The name of the collection.
*/
collection(name, options) {
return this.astraDb.collection(name, options);
}
/**
* Send a CreateCollection command to Data API.
*/
createCollection(name, options) {
return this.astraDb.createCollection(name, options);
}
}
exports.CollectionsDb = CollectionsDb;
/**
* Db instance that creates and manages tables.
* @extends BaseDb
*/
class TablesDb extends BaseDb {
/**
* Creates an instance of TablesDb. Do not instantiate this class directly.
* @param astraDb The AstraDb instance to interact with the database.
* @param keyspaceName The name of the keyspace to use.
*/
constructor(astraDb, keyspaceName) {
super(astraDb, keyspaceName, true);
}
/**
* Get a table by name. This method is called `collection()` for compatibility with Mongoose, which calls
* this method for getting a Mongoose Collection instance, which may map to a table in Astra DB when using tables mode.
* @param name The name of the table.
*/
collection(name, options) {
return this.astraDb.table(name, options);
}
/**
* Throws an error, astra-mongoose does not support creating collections in tables mode.
*/
createCollection(name, options) {
throw new astraMongooseError_1.AstraMongooseError('Cannot createCollection in tables mode; use createTable instead', { name, options });
}
}
exports.TablesDb = TablesDb;
//# sourceMappingURL=db.js.map