UNPKG

jdb-lite

Version:

A lightweight schema-based JSON database library with validation

113 lines 3.85 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ObjectId = exports.Schema = exports.JsonSchemaDB = void 0; const database_1 = require("./database"); const schema_1 = require("./schema"); Object.defineProperty(exports, "Schema", { enumerable: true, get: function () { return schema_1.Schema; } }); const objectid_1 = require("./objectid"); Object.defineProperty(exports, "ObjectId", { enumerable: true, get: function () { return objectid_1.ObjectId; } }); const model_1 = require("./model"); class EventEmitter { constructor() { this.events = {}; } on(event, listener) { if (!this.events[event]) { this.events[event] = []; } this.events[event].push(listener); return this; } emit(event, ...args) { if (!this.events[event]) { return false; } this.events[event].forEach(listener => listener(...args)); return true; } off(event, listener) { if (!this.events[event]) { return this; } this.events[event] = this.events[event].filter(l => l !== listener); return this; } } class JsonSchemaDBConnection extends EventEmitter { constructor(dbPath) { super(); this.readyState = 0; // 0: disconnected, 1: connected this.models = {}; this.collections = {}; this.name = 'jdb-lite'; this.host = 'localhost'; this.port = 0; this.db = new database_1.DatabaseManager(dbPath); this.readyState = 1; } async close() { this.readyState = 0; this.emit('close'); } getDatabase() { return this.db; } } class JsonSchemaDBStatic { constructor() { this.Schema = schema_1.Schema; this.Types = { ObjectId: objectid_1.ObjectId }; this._models = {}; this.connection = new JsonSchemaDBConnection('.db_json'); } async connect(uri = '.db_json', options) { if (this.connection) { await this.connection.close(); } this.connection = new JsonSchemaDBConnection(uri); // Emit connection events setTimeout(() => { this.connection.emit('connected'); this.connection.emit('open'); }, 0); return this.connection; } async disconnect() { if (this.connection) { await this.connection.close(); } } model(name, schema) { if (!schema && this._models[name]) { return this._models[name]; } if (!schema) { throw new Error(`Schema hasn't been registered for model "${name}".`); } const model = (0, model_1.createModel)(name, schema, this.connection.getDatabase()); this._models[name] = model; this.connection.models[name] = model; return model; } } exports.JsonSchemaDB = JsonSchemaDBStatic; // Create the default instance const jsonDB = new JsonSchemaDBStatic(); // Export both the instance and the class for flexibility exports.default = jsonDB; __exportStar(require("./types"), exports); //# sourceMappingURL=index.js.map