UNPKG

@onurege3467/zerohelper

Version:

ZeroHelper is a versatile JavaScript library offering helper functions, validation, logging, database utilities and migration system for developers. It supports MongoDB, MySQL, SQLite, Redis, and PostgreSQL with increment/decrement operations.

73 lines (61 loc) 2.46 kB
// database-factory.js const IDatabase = require('./IDatabase'); const MySQLDatabase = require('./mysql'); const SQLiteDatabase = require('./sqlite'); const MongoDBDatabase = require('./mongodb'); const JsonDatabase = require('./json'); const PostgreSQLDatabase = require('./pg'); const RedisDatabase = require('./redis'); // Yeni Redis adapter const CacheWrapper = require('./cacheWrapper'); const MigrationManager = require('./migration'); const adapters = { mysql: MySQLDatabase, sqlite: SQLiteDatabase, mongodb: MongoDBDatabase, postgres: PostgreSQLDatabase, json: JsonDatabase, redis: RedisDatabase, // Redis adapter eklendi }; /** * Belirtilen adaptör tipine göre bir veritabanı örneği oluşturur ve döndürür. * Bu bir "Fabrika Fonksiyonu"dur. * * @param {object} options - Yapılandırma seçenekleri. * @param {keyof adapters} options.adapter - Kullanılacak adaptör ('mysql', 'sqlite', 'redis', vb.). * @param {object} options.config - Seçilen adaptöre özel yapılandırma. * @returns {IDatabase} - IDatabase arayüzünü uygulayan bir örnek döndürür. */ function createDatabase(options) { const { adapter, config } = options; if (!adapter || !adapters[adapter]) { throw new Error(`Geçersiz veya desteklenmeyen adaptör: ${adapter}. Desteklenenler: ${Object.keys(adapters).join(', ')}`); } if (!config) { throw new Error(`'${adapter}' adaptörü için yapılandırma (config) gereklidir.`); } // İlgili adaptör sınıfını al const DatabaseClass = adapters[adapter]; // Sınıfın bir örneğini oluştur ve doğrudan döndür const dbInstance = new DatabaseClass(config); // Eğer cache etkinse, veritabanı örneğini CacheWrapper ile sarmala if (config.cache) { return new Proxy(new CacheWrapper(dbInstance, config.cache), { get: (target, prop) => { if (typeof target[prop] !== 'undefined') { return target[prop]; } else if (typeof target.db[prop] === 'function') { return target.db[prop].bind(target.db); } else { return target.db[prop]; } } }); } return dbInstance; } // Artık varsayılan olarak bu fonksiyonu export ediyoruz. module.exports = createDatabase; // Migration manager'ı da export ediyoruz module.exports.MigrationManager = MigrationManager; // Eğer hem fonksiyonu hem de tipleri export etmek isterseniz: // module.exports = { createDatabase, MigrationManager };