@hawiah/core 1.0.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,101 +1,122 @@
1
- # @hawiah/core [![NPM version](https://img.shields.io/npm/v/@hawiah/core.svg?style=flat-square&color=informational)](https://npmjs.com/package/@hawiah/core)
1
+ # @hawiah/core
2
2
 
3
- Core package for Hawiah - Schema-less database abstraction layer with multiple driver support, relationships, and DataLoader batching.
3
+ **Hawiah** is a lightweight, schema-less database abstraction layer designed for modern applications. It provides a unified API for various databases while handling advanced features like **Connection Pooling**, **Relationship Management**, and **Data Batching** automatically.
4
4
 
5
- > **Note:** This is the core package. For the main package, install `hawiah` instead.
5
+ ## Features
6
+
7
+ - **Unified Interface**: Use MongoDB, SQLite, Firebase, or SQL with the exact same API.
8
+ - **Smart Connection Pooling**: Automatically shares physical connections between instances to maximize performance.
9
+ - **Next.js & Serverless Ready**: Built-in support for HMR (Hot Module Replacement) and Server Components.
10
+ - **Schema Validation**: Optional, simple, and powerful schema definitions.
11
+ - **Zero-Config Relations**: Handle database relationships with ease.
6
12
 
7
13
  ## Installation
8
14
 
9
15
  ```bash
10
- # Install core package only
11
16
  npm install @hawiah/core
17
+ ```
12
18
 
13
- # Or install the main package
14
- npm install hawiah
19
+ Then install the driver of your choice:
20
+
21
+ ```bash
22
+ npm install @hawiah/mongo
23
+ # OR
24
+ npm install @hawiah/sqlite
25
+ # OR
26
+ npm install @hawiah/firebase
15
27
  ```
16
28
 
17
- ## Features
29
+ ## Usage Examples
18
30
 
19
- - 🚀 Lightweight and fast
20
- - 🔌 Multiple database driver support
21
- - 🔗 Built-in relationships with DataLoader batching
22
- - 📦 Schema-less design
23
- - 🎯 Simple and intuitive API
24
- - 🔄 Automatic N+1 query optimization
25
- - 💾 Memory driver included
31
+ Hawiah automatically manages connections. You can create as many instances as you need; if they share the same configuration, they will share the same physical connection.
26
32
 
27
- ## Quick Start
33
+ ### 1. MongoDB
28
34
 
29
- ```typescript
30
- import { Hawiah, MemoryDriver } from '@hawiah/core';
31
- const db = new Hawiah({ driver: new MemoryDriver() });
32
- ```
35
+ ```javascript
36
+ import { Hawiah } from '@hawiah/core';
37
+ import { MongoDriver } from '@hawiah/mongo';
33
38
 
34
- ## API Methods
35
-
36
- ### Basic Operations
37
- - `insert(data)` - Insert a record
38
- - `insertMany(dataArray)` - Insert multiple records
39
- - `get(query, limit?)` - Get records matching query
40
- - `getOne(query)` - Get single record
41
- - `getAll()` - Get all records
42
- - `update(query, data)` - Update records
43
- - `remove(query)` - Remove records
44
- - `clear()` - Clear all records
45
-
46
- ### Query Operations
47
- - `getById(id)` - Get record by ID
48
- - `getBy(field, value)` - Get records by field value
49
- - `has(query)` - Check if records exist
50
- - `count(query)` - Count matching records
51
- - `sort(query, field, direction)` - Sort results
52
- - `select(query, fields)` - Select specific fields
53
- - `paginate(query, page, pageSize)` - Paginate results
54
-
55
- ### Array Operations
56
- - `push(query, field, value)` - Add to array
57
- - `pull(query, field, value)` - Remove from array
58
- - `shift(query, field)` - Remove first element
59
- - `unshift(query, field, value)` - Add to beginning
60
- - `pop(query, field)` - Remove last element
61
-
62
- ### Numeric Operations
63
- - `increment(query, field, amount)` - Increment field
64
- - `decrement(query, field, amount)` - Decrement field
65
- - `sum(field, query)` - Sum field values
66
-
67
- ### Relationships
39
+ const db = new Hawiah({
40
+ driver: MongoDriver,
41
+ config: {
42
+ uri: 'mongodb://localhost:27017',
43
+ dbName: 'my_project',
44
+ collectionName: 'users' // <--- Collection 1
45
+ }
46
+ });
68
47
 
69
- ```typescript
70
- // Define relationships
71
- const users = new Hawiah({ driver: new MemoryDriver() });
72
- const posts = new Hawiah({ driver: new MemoryDriver() });
48
+ const posts = new Hawiah({
49
+ driver: MongoDriver,
50
+ config: {
51
+ uri: 'mongodb://localhost:27017',
52
+ dbName: 'my_project',
53
+ collectionName: 'posts' // <--- Collection 2 (Shares connection with users)
54
+ }
55
+ });
73
56
 
74
- users.relation('posts', posts, '_id', 'userId', 'many');
75
- posts.relation('author', users, 'userId', '_id', 'one');
57
+ await db.connect(); // Orchestrates the connection for all sharing instances
58
+ ```
59
+
60
+ ### 2. SQLite
61
+
62
+ ```javascript
63
+ import { Hawiah } from '@hawiah/core';
64
+ import { SqliteDriver } from '@hawiah/sqlite';
65
+
66
+ const users = new Hawiah({
67
+ driver: SqliteDriver,
68
+ config: {
69
+ filename: './database.sqlite', // <--- Physical File
70
+ table: 'users'
71
+ }
72
+ });
73
+
74
+ const logs = new Hawiah({
75
+ driver: SqliteDriver,
76
+ config: {
77
+ filename: './database.sqlite', // <--- Same Config = Same Connection
78
+ table: 'logs'
79
+ }
80
+ });
81
+ ```
76
82
 
77
- // Query with relationships
78
- const usersWithPosts = await users.getWith({}, 'posts');
83
+ ### 3. Firebase (Firestore)
84
+
85
+ ```javascript
86
+ import { Hawiah } from '@hawiah/core';
87
+ import { FirebaseDriver } from '@hawiah/firebase';
88
+
89
+ const firebaseConfig = {
90
+ apiKey: "AIzaSy...",
91
+ projectId: "my-app",
92
+ // ...
93
+ };
94
+
95
+ const profiles = new Hawiah({
96
+ driver: FirebaseDriver,
97
+ config: {
98
+ firebaseConfig: firebaseConfig,
99
+ collectionName: 'profiles'
100
+ }
101
+ });
79
102
  ```
80
103
 
81
- ## Custom Drivers
104
+ ## Next.js 16+ Support
82
105
 
83
- Implement the `IDriver` interface to create custom drivers:
106
+ If you are using **Next.js**, use the `HawiahNext` class. It ensures that your database connections persist across Hot Module Reloads (HMR) to prevent "Too Many Connections" errors during development.
84
107
 
85
108
  ```typescript
86
- import { IDriver, Query, Data } from '@hawiah/core';
87
-
88
- class MyDriver implements IDriver {
89
- async connect(): Promise<void> { /* ... */ }
90
- async disconnect(): Promise<void> { /* ... */ }
91
- async get(query: Query): Promise<Data[]> { /* ... */ }
92
- async getOne(query: Query): Promise<Data | null> { /* ... */ }
93
- async set(data: Data): Promise<Data> { /* ... */ }
94
- async update(query: Query, data: Data): Promise<number> { /* ... */ }
95
- async delete(query: Query): Promise<number> { /* ... */ }
96
- async exists(query: Query): Promise<boolean> { /* ... */ }
97
- async count(query: Query): Promise<number> { /* ... */ }
98
- }
109
+ // lib/db.ts
110
+ import { HawiahNext } from '@hawiah/core';
111
+ import { MongoDriver } from '@hawiah/mongo';
112
+
113
+ export const dbEvents = new HawiahNext({
114
+ driver: MongoDriver,
115
+ config: {
116
+ uri: process.env.MONGO_URI,
117
+ collectionName: 'events'
118
+ }
119
+ });
99
120
  ```
100
121
 
101
122
  ## License
package/dist/Hawiah.d.ts CHANGED
@@ -1,20 +1,35 @@
1
1
  import { IDriver, Query, Data } from './interfaces/IDriver';
2
+ import { Schema, SchemaDefinition } from './Schema';
3
+ import DataLoader from 'dataloader';
2
4
  /**
3
5
  * Hawiah: A lightweight, schema-less database abstraction layer.
4
6
  * Designed to be friendly and easy to use.
5
7
  */
6
8
  export declare class Hawiah {
7
- private driver;
8
- private isConnected;
9
- private relations;
10
- private loaders;
9
+ protected driver: IDriver;
10
+ protected isConnected: boolean;
11
+ protected relations: Map<string, RelationConfig>;
12
+ protected loaders: Map<string, DataLoader<any, any>>;
13
+ protected schema?: Schema;
14
+ static readonly IGNORE_KEYS: Set<string>;
15
+ private static readonly driversPool;
16
+ private static readonly connectionPromises;
17
+ private connectionKey?;
18
+ /**
19
+ * Generates a unique fingerprint for a connection setup.
20
+ */
21
+ static getPoolKey(driver: any, config: any): string;
11
22
  /**
12
23
  * Creates a new Hawiah instance.
13
24
  * @param options - Configuration options
14
- * @param options.driver - The database driver to use
25
+ * @param options.driver - The database driver instance OR Driver Class for auto-pooling
26
+ * @param options.config - Configuration for the driver if passing a Class
27
+ * @param options.schema - Optional schema definition
15
28
  */
16
29
  constructor(options: {
17
- driver: IDriver;
30
+ driver: IDriver | (new (config: any) => IDriver);
31
+ config?: any;
32
+ schema?: Schema | SchemaDefinition;
18
33
  });
19
34
  /**
20
35
  * Connects to the database.
@@ -345,4 +360,15 @@ export declare class Hawiah {
345
360
  * Clear relationship cache
346
361
  */
347
362
  clearCache(): void;
363
+ /**
364
+ * Helper to validate data if schema exists and driver is not SQL.
365
+ */
366
+ private validateData;
367
+ }
368
+ interface RelationConfig {
369
+ target: Hawiah;
370
+ localKey: string;
371
+ foreignKey: string;
372
+ type: 'one' | 'many';
348
373
  }
374
+ export {};
package/dist/Hawiah.js CHANGED
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Hawiah = void 0;
7
+ const Schema_1 = require("./Schema");
7
8
  const dataloader_1 = __importDefault(require("dataloader"));
8
9
  /**
9
10
  * Hawiah: A lightweight, schema-less database abstraction layer.
@@ -14,13 +15,66 @@ class Hawiah {
14
15
  isConnected = false;
15
16
  relations = new Map();
16
17
  loaders = new Map();
18
+ schema;
19
+ static IGNORE_KEYS = new Set(['collectionName', 'tableName', 'collection', 'table', 'connectionKey']);
20
+ static driversPool = new Map();
21
+ static connectionPromises = new Map();
22
+ connectionKey;
23
+ /**
24
+ * Generates a unique fingerprint for a connection setup.
25
+ */
26
+ static getPoolKey(driver, config) {
27
+ let cKey = config.connectionKey;
28
+ if (cKey)
29
+ return cKey;
30
+ cKey = typeof driver === 'function' ? driver.name : (driver.constructor?.name || 'UnknownDriver');
31
+ for (const key in config) {
32
+ if (!Hawiah.IGNORE_KEYS.has(key)) {
33
+ const val = config[key];
34
+ if (val !== null && typeof val !== 'object') {
35
+ cKey += `|${key}:${val}`;
36
+ }
37
+ else if (val !== null) {
38
+ cKey += `|${key}:${JSON.stringify(val)}`;
39
+ }
40
+ }
41
+ }
42
+ return cKey;
43
+ }
17
44
  /**
18
45
  * Creates a new Hawiah instance.
19
46
  * @param options - Configuration options
20
- * @param options.driver - The database driver to use
47
+ * @param options.driver - The database driver instance OR Driver Class for auto-pooling
48
+ * @param options.config - Configuration for the driver if passing a Class
49
+ * @param options.schema - Optional schema definition
21
50
  */
22
51
  constructor(options) {
23
- this.driver = options.driver;
52
+ if (typeof options.driver === 'function') {
53
+ const config = options.config || {};
54
+ const cKey = Hawiah.getPoolKey(options.driver, config);
55
+ this.connectionKey = cKey;
56
+ if (Hawiah.driversPool.has(cKey)) {
57
+ const rootDriver = Hawiah.driversPool.get(cKey);
58
+ const tableName = config.collectionName || config.tableName || config.collection || config.table || 'default';
59
+ this.driver = rootDriver.table ? rootDriver.table(tableName) : rootDriver;
60
+ if (this.driver.isConnected && this.driver.isConnected()) {
61
+ this.isConnected = true;
62
+ }
63
+ }
64
+ else {
65
+ this.driver = new options.driver(config);
66
+ Hawiah.driversPool.set(cKey, this.driver);
67
+ }
68
+ }
69
+ else {
70
+ this.driver = options.driver;
71
+ }
72
+ if (options.schema) {
73
+ this.schema = options.schema instanceof Schema_1.Schema ? options.schema : new Schema_1.Schema(options.schema);
74
+ if (this.driver.setSchema && this.schema) {
75
+ this.driver.setSchema(this.schema);
76
+ }
77
+ }
24
78
  }
25
79
  /**
26
80
  * Connects to the database.
@@ -29,7 +83,19 @@ class Hawiah {
29
83
  if (this.isConnected) {
30
84
  return;
31
85
  }
32
- await this.driver.connect();
86
+ const poolKey = this.connectionKey || this.driver;
87
+ let connectionPromise = Hawiah.connectionPromises.get(poolKey);
88
+ if (!connectionPromise) {
89
+ if (this.driver.isConnected && this.driver.isConnected()) {
90
+ this.isConnected = true;
91
+ return;
92
+ }
93
+ connectionPromise = (async () => {
94
+ await this.driver.connect();
95
+ })();
96
+ Hawiah.connectionPromises.set(poolKey, connectionPromise);
97
+ }
98
+ await connectionPromise;
33
99
  this.isConnected = true;
34
100
  }
35
101
  /**
@@ -49,7 +115,8 @@ class Hawiah {
49
115
  */
50
116
  async insert(data) {
51
117
  this.ensureConnected();
52
- return await this.driver.set(data);
118
+ const validated = this.validateData(data);
119
+ return await this.driver.set(validated);
53
120
  }
54
121
  /**
55
122
  * Inserts multiple records into the database.
@@ -60,7 +127,8 @@ class Hawiah {
60
127
  this.ensureConnected();
61
128
  const results = [];
62
129
  for (const data of dataArray) {
63
- const result = await this.driver.set(data);
130
+ const validated = this.validateData(data);
131
+ const result = await this.driver.set(validated);
64
132
  results.push(result);
65
133
  }
66
134
  return results;
@@ -118,7 +186,8 @@ class Hawiah {
118
186
  */
119
187
  async update(query, data) {
120
188
  this.ensureConnected();
121
- return await this.driver.update(query, data);
189
+ const validated = this.validateData(data, true);
190
+ return await this.driver.update(query, validated);
122
191
  }
123
192
  /**
124
193
  * Updates a single record matching the query.
@@ -128,7 +197,8 @@ class Hawiah {
128
197
  */
129
198
  async updateOne(query, data) {
130
199
  this.ensureConnected();
131
- const count = await this.driver.update(query, data);
200
+ const validated = this.validateData(data, true);
201
+ const count = await this.driver.update(query, validated);
132
202
  return count > 0;
133
203
  }
134
204
  /**
@@ -141,11 +211,14 @@ class Hawiah {
141
211
  this.ensureConnected();
142
212
  const existing = await this.driver.getOne(query);
143
213
  if (existing) {
144
- await this.driver.update(query, data);
145
- return { ...existing, ...data };
214
+ const validated = this.validateData(data, true);
215
+ await this.driver.update(query, validated);
216
+ return { ...existing, ...validated };
146
217
  }
147
218
  else {
148
- return await this.driver.set({ ...query, ...data });
219
+ const fullData = { ...query, ...data };
220
+ const validated = this.validateData(fullData);
221
+ return await this.driver.set(validated);
149
222
  }
150
223
  }
151
224
  /**
@@ -382,7 +455,7 @@ class Hawiah {
382
455
  }
383
456
  const currentValue = Number(record[field]) || 0;
384
457
  const newValue = currentValue + amount;
385
- await this.driver.update(query, { [field]: newValue });
458
+ await this.update(query, { [field]: newValue });
386
459
  return newValue;
387
460
  }
388
461
  /**
@@ -412,7 +485,8 @@ class Hawiah {
412
485
  record[field] = [];
413
486
  }
414
487
  record[field].push(value);
415
- await this.driver.update(query, record);
488
+ const validated = this.validateData(record, false);
489
+ await this.driver.update(query, validated);
416
490
  count++;
417
491
  }
418
492
  return count;
@@ -432,8 +506,10 @@ class Hawiah {
432
506
  if (Array.isArray(record[field])) {
433
507
  const initialLength = record[field].length;
434
508
  record[field] = record[field].filter((item) => JSON.stringify(item) !== JSON.stringify(value));
509
+ record[field] = record[field].filter((item) => JSON.stringify(item) !== JSON.stringify(value));
435
510
  if (record[field].length !== initialLength) {
436
- await this.driver.update(query, record);
511
+ const validated = this.validateData(record, false);
512
+ await this.driver.update(query, validated);
437
513
  count++;
438
514
  }
439
515
  }
@@ -453,7 +529,8 @@ class Hawiah {
453
529
  for (const record of records) {
454
530
  if (Array.isArray(record[field]) && record[field].length > 0) {
455
531
  record[field].shift();
456
- await this.driver.update(query, record);
532
+ const validated = this.validateData(record, false);
533
+ await this.driver.update(query, validated);
457
534
  count++;
458
535
  }
459
536
  }
@@ -475,7 +552,8 @@ class Hawiah {
475
552
  record[field] = [];
476
553
  }
477
554
  record[field].unshift(value);
478
- await this.driver.update(query, record);
555
+ const validated = this.validateData(record, false);
556
+ await this.driver.update(query, validated);
479
557
  count++;
480
558
  }
481
559
  return count;
@@ -493,7 +571,8 @@ class Hawiah {
493
571
  for (const record of records) {
494
572
  if (Array.isArray(record[field]) && record[field].length > 0) {
495
573
  record[field].pop();
496
- await this.driver.update(query, record);
574
+ const validated = this.validateData(record, false);
575
+ await this.driver.update(query, validated);
497
576
  count++;
498
577
  }
499
578
  }
@@ -512,7 +591,8 @@ class Hawiah {
512
591
  for (const record of records) {
513
592
  if (field in record) {
514
593
  delete record[field];
515
- await this.driver.update(query, record);
594
+ const validated = this.validateData(record, false);
595
+ await this.driver.update(query, validated);
516
596
  count++;
517
597
  }
518
598
  }
@@ -533,7 +613,8 @@ class Hawiah {
533
613
  if (oldField in record) {
534
614
  record[newField] = record[oldField];
535
615
  delete record[oldField];
536
- await this.driver.update(query, record);
616
+ const validated = this.validateData(record, false);
617
+ await this.driver.update(query, validated);
537
618
  count++;
538
619
  }
539
620
  }
@@ -704,6 +785,15 @@ class Hawiah {
704
785
  this.loaders.forEach(loader => loader.clearAll());
705
786
  this.loaders.clear();
706
787
  }
788
+ /**
789
+ * Helper to validate data if schema exists and driver is not SQL.
790
+ */
791
+ validateData(data, isPartial = false) {
792
+ if (this.schema && this.driver.dbType !== 'sql') {
793
+ return this.schema.validate(data, isPartial);
794
+ }
795
+ return data;
796
+ }
707
797
  }
708
798
  exports.Hawiah = Hawiah;
709
799
  //# sourceMappingURL=Hawiah.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Hawiah.js","sourceRoot":"","sources":["../src/Hawiah.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Hawiah.js","sourceRoot":"","sources":["../src/Hawiah.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Hawiah } from './Hawiah';
2
+ import { Schema, SchemaDefinition } from './Schema';
3
+ import { IDriver } from './interfaces/IDriver';
4
+ /**
5
+ * A specialized Hawiah class designed for Next.js environments.
6
+ * Implements a singleton pattern (HMR-safe) to prevent multiple database connections during development.
7
+ */
8
+ export declare class HawiahNext extends Hawiah {
9
+ /**
10
+ * Creates a new instance that persists across Hot Module Replacements.
11
+ * @param options Configuration options
12
+ */
13
+ constructor(options: {
14
+ driver: IDriver | (new (config: any) => IDriver);
15
+ config?: any;
16
+ schema?: Schema | SchemaDefinition;
17
+ });
18
+ /**
19
+ * Creates a request-scoped instance sharing the same underlying connection.
20
+ * Useful for isolation in Server Components.
21
+ * @param name Table or Collection name
22
+ * @param schema Optional schema override
23
+ */
24
+ table(name: string, schema?: Schema | SchemaDefinition): Hawiah;
25
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HawiahNext = void 0;
4
+ const Hawiah_1 = require("./Hawiah");
5
+ const Schema_1 = require("./Schema");
6
+ /**
7
+ * A specialized Hawiah class designed for Next.js environments.
8
+ * Implements a singleton pattern (HMR-safe) to prevent multiple database connections during development.
9
+ */
10
+ class HawiahNext extends Hawiah_1.Hawiah {
11
+ /**
12
+ * Creates a new instance that persists across Hot Module Replacements.
13
+ * @param options Configuration options
14
+ */
15
+ constructor(options) {
16
+ const config = options.config || {};
17
+ const driverName = typeof options.driver === 'function' ? options.driver.name : (options.driver.constructor?.name || 'Unknown');
18
+ const tableName = config.collectionName || config.tableName || config.collection || config.table || 'default';
19
+ const instanceKey = `HAWIAH_INST_${driverName}_${tableName}_${Hawiah_1.Hawiah.getPoolKey(options.driver, config)}`;
20
+ const g = globalThis;
21
+ const pool = g.__HAWIAH_INSTANCES__ || (g.__HAWIAH_INSTANCES__ = new Map());
22
+ if (pool.has(instanceKey)) {
23
+ const existing = pool.get(instanceKey);
24
+ if (options.schema) {
25
+ const newSchema = options.schema instanceof Schema_1.Schema ? options.schema : new Schema_1.Schema(options.schema);
26
+ existing.schema = newSchema;
27
+ if (existing.driver.setSchema) {
28
+ existing.driver.setSchema(newSchema);
29
+ }
30
+ }
31
+ return existing;
32
+ }
33
+ super(options);
34
+ pool.set(instanceKey, this);
35
+ }
36
+ /**
37
+ * Creates a request-scoped instance sharing the same underlying connection.
38
+ * Useful for isolation in Server Components.
39
+ * @param name Table or Collection name
40
+ * @param schema Optional schema override
41
+ */
42
+ table(name, schema) {
43
+ return new Hawiah_1.Hawiah({
44
+ driver: this.driver.table ? this.driver.table(name) : this.driver,
45
+ schema: schema || this.schema
46
+ });
47
+ }
48
+ }
49
+ exports.HawiahNext = HawiahNext;
50
+ //# sourceMappingURL=HawiahNext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HawiahNext.js","sourceRoot":"","sources":["../src/HawiahNext.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAClC,qCAAoD;AAGpD;;;GAGG;AACH,MAAa,UAAW,SAAQ,eAAM;IAClC;;;OAGG;IACH,YAAY,OAIX;QACG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QAEpC,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC;QAChI,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;QAC9G,MAAM,WAAW,GAAG,eAAe,UAAU,IAAI,SAAS,IAAI,eAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAE1G,MAAM,CAAC,GAAG,UAAiB,CAAC;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QAE5E,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAe,CAAC;YAErD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,YAAY,eAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,eAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChG,QAAgB,CAAC,MAAM,GAAG,SAAS,CAAC;gBACrC,IAAK,QAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACpC,QAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC;YAED,OAAO,QAAe,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAY,EAAE,MAAkC;QAClD,OAAO,IAAI,eAAM,CAAC;YACd,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;YACjE,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM;SAChC,CAAC,CAAC;IACP,CAAC;CACJ;AAjDD,gCAiDC"}
@@ -0,0 +1,52 @@
1
+ export type SchemaType = 'string' | 'text' | 'char' | 'number' | 'integer' | 'float' | 'bigint' | 'boolean' | 'date' | 'array' | 'object' | 'json' | 'blob' | 'uuid' | 'email' | 'url' | 'any';
2
+ export declare const DataTypes: {
3
+ STRING: SchemaType;
4
+ TEXT: SchemaType;
5
+ CHAR: SchemaType;
6
+ NUMBER: SchemaType;
7
+ INTEGER: SchemaType;
8
+ FLOAT: SchemaType;
9
+ BIGINT: SchemaType;
10
+ BOOLEAN: SchemaType;
11
+ DATE: SchemaType;
12
+ ARRAY: SchemaType;
13
+ OBJECT: SchemaType;
14
+ JSON: SchemaType;
15
+ BLOB: SchemaType;
16
+ UUID: SchemaType;
17
+ EMAIL: SchemaType;
18
+ URL: SchemaType;
19
+ ANY: SchemaType;
20
+ };
21
+ export interface SchemaField {
22
+ type: SchemaType;
23
+ required?: boolean;
24
+ default?: any;
25
+ }
26
+ export interface SchemaDefinition {
27
+ [key: string]: SchemaField | SchemaType;
28
+ }
29
+ /**
30
+ * Ensures data integrity by validating input against a defined structure.
31
+ */
32
+ export declare class Schema {
33
+ private definition;
34
+ constructor(definition: SchemaDefinition);
35
+ /**
36
+ * Returns the raw schema definition.
37
+ */
38
+ getDefinition(): SchemaDefinition;
39
+ /**
40
+ * Validates and processes the data against the schema.
41
+ * - Applies default values.
42
+ * - Checks required fields (unless isPartial is true).
43
+ * - Validates data types.
44
+ *
45
+ * @param data The input data object.
46
+ * @param isPartial If true, skips 'required' checks (useful for updates).
47
+ * @returns The validated (and possibly modified) data object.
48
+ * @throws Error if validation fails.
49
+ */
50
+ validate(data: any, isPartial?: boolean): any;
51
+ private checkType;
52
+ }
package/dist/Schema.js ADDED
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Schema = exports.DataTypes = void 0;
4
+ exports.DataTypes = {
5
+ STRING: 'string',
6
+ TEXT: 'text',
7
+ CHAR: 'char',
8
+ NUMBER: 'number',
9
+ INTEGER: 'integer',
10
+ FLOAT: 'float',
11
+ BIGINT: 'bigint',
12
+ BOOLEAN: 'boolean',
13
+ DATE: 'date',
14
+ ARRAY: 'array',
15
+ OBJECT: 'object',
16
+ JSON: 'json',
17
+ BLOB: 'blob',
18
+ UUID: 'uuid',
19
+ EMAIL: 'email',
20
+ URL: 'url',
21
+ ANY: 'any',
22
+ };
23
+ /**
24
+ * Ensures data integrity by validating input against a defined structure.
25
+ */
26
+ class Schema {
27
+ definition;
28
+ constructor(definition) {
29
+ this.definition = definition;
30
+ }
31
+ /**
32
+ * Returns the raw schema definition.
33
+ */
34
+ getDefinition() {
35
+ return this.definition;
36
+ }
37
+ /**
38
+ * Validates and processes the data against the schema.
39
+ * - Applies default values.
40
+ * - Checks required fields (unless isPartial is true).
41
+ * - Validates data types.
42
+ *
43
+ * @param data The input data object.
44
+ * @param isPartial If true, skips 'required' checks (useful for updates).
45
+ * @returns The validated (and possibly modified) data object.
46
+ * @throws Error if validation fails.
47
+ */
48
+ validate(data, isPartial = false) {
49
+ const validatedData = { ...data };
50
+ for (const key in this.definition) {
51
+ let rule = this.definition[key];
52
+ if (typeof rule === 'string') {
53
+ rule = { type: rule };
54
+ }
55
+ let value = validatedData[key];
56
+ // Apply default value if missing and not in partial mode
57
+ if (!isPartial && value === undefined && rule.default !== undefined) {
58
+ value = rule.default;
59
+ validatedData[key] = value;
60
+ }
61
+ // Check required fields
62
+ if (!isPartial && rule.required && (value === undefined || value === null)) {
63
+ throw new Error(`Validation Error: Field "${key}" is required.`);
64
+ }
65
+ // Validate Type
66
+ if (value !== undefined && value !== null && rule.type !== 'any') {
67
+ if (!this.checkType(value, rule.type)) {
68
+ throw new Error(`Validation Error: Field "${key}" expected type ${rule.type}.`);
69
+ }
70
+ }
71
+ }
72
+ return validatedData;
73
+ }
74
+ checkType(value, type) {
75
+ switch (type) {
76
+ case 'string':
77
+ case 'text':
78
+ case 'char':
79
+ return typeof value === 'string';
80
+ case 'number':
81
+ case 'float':
82
+ return typeof value === 'number' && !isNaN(value);
83
+ case 'integer':
84
+ return Number.isInteger(value);
85
+ case 'bigint':
86
+ return typeof value === 'bigint';
87
+ case 'boolean':
88
+ return typeof value === 'boolean';
89
+ case 'array':
90
+ return Array.isArray(value);
91
+ case 'object':
92
+ case 'json':
93
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
94
+ case 'date':
95
+ return value instanceof Date || (!isNaN(Date.parse(value)) && typeof value !== 'number');
96
+ case 'blob':
97
+ return typeof Buffer !== 'undefined' ? Buffer.isBuffer(value) : value instanceof Uint8Array;
98
+ case 'uuid':
99
+ return typeof value === 'string' && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);
100
+ case 'email':
101
+ return typeof value === 'string' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
102
+ case 'url':
103
+ if (typeof value !== 'string')
104
+ return false;
105
+ try {
106
+ new URL(value);
107
+ return true;
108
+ }
109
+ catch {
110
+ return false;
111
+ }
112
+ case 'any':
113
+ default:
114
+ return true;
115
+ }
116
+ }
117
+ }
118
+ exports.Schema = Schema;
119
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,22 @@
1
1
  import { IDriver, Query, Data } from '../interfaces/IDriver';
2
+ /**
3
+ * MemoryDriver: A simple in-memory database driver for testing.
4
+ * Supports shared data (Pooling) via references.
5
+ */
2
6
  export declare class MemoryDriver implements IDriver {
3
7
  private data;
4
8
  private idCounter;
9
+ private connected;
10
+ private collectionName;
11
+ dbType: 'nosql';
12
+ constructor(options?: any);
5
13
  connect(): Promise<void>;
6
14
  disconnect(): Promise<void>;
15
+ isConnected(): boolean;
16
+ /**
17
+ * Returns a new instance for a different collection while sharing the same data array.
18
+ */
19
+ table(name: string): IDriver;
7
20
  set(data: Data): Promise<Data>;
8
21
  get(query: Query): Promise<Data[]>;
9
22
  getOne(query: Query): Promise<Data | null>;
@@ -12,6 +25,5 @@ export declare class MemoryDriver implements IDriver {
12
25
  exists(query: Query): Promise<boolean>;
13
26
  count(query: Query): Promise<number>;
14
27
  private matches;
15
- getAll(): Promise<Data[]>;
16
28
  clear(): Promise<void>;
17
29
  }
@@ -1,80 +1,94 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MemoryDriver = void 0;
4
+ /**
5
+ * MemoryDriver: A simple in-memory database driver for testing.
6
+ * Supports shared data (Pooling) via references.
7
+ */
4
8
  class MemoryDriver {
5
- data = [];
6
- idCounter = 1;
9
+ data;
10
+ idCounter;
11
+ connected = false;
12
+ collectionName;
13
+ dbType = 'nosql';
14
+ constructor(options = {}) {
15
+ this.collectionName = options.collectionName || 'default';
16
+ this.data = options.data || [];
17
+ this.idCounter = options.idCounter || { value: 1 };
18
+ }
7
19
  async connect() {
8
- this.data = [];
9
- this.idCounter = 1;
20
+ this.connected = true;
10
21
  }
11
22
  async disconnect() {
12
- this.data = [];
23
+ this.connected = false;
24
+ }
25
+ isConnected() {
26
+ return this.connected;
27
+ }
28
+ /**
29
+ * Returns a new instance for a different collection while sharing the same data array.
30
+ */
31
+ table(name) {
32
+ const newDriver = new MemoryDriver({
33
+ collectionName: name,
34
+ data: this.data,
35
+ idCounter: this.idCounter
36
+ });
37
+ newDriver.connected = this.connected;
38
+ return newDriver;
13
39
  }
14
40
  async set(data) {
15
41
  const record = {
16
- _id: this.idCounter++,
42
+ _id: this.idCounter.value++,
17
43
  ...data,
44
+ __col__: this.collectionName,
18
45
  _createdAt: new Date().toISOString(),
19
46
  };
20
47
  this.data.push(record);
21
48
  return record;
22
49
  }
23
50
  async get(query) {
24
- return this.data.filter(record => this.matches(record, query));
51
+ return this.data.filter(r => r.__col__ === this.collectionName && this.matches(r, query));
25
52
  }
26
53
  async getOne(query) {
27
- const record = this.data.find(record => this.matches(record, query));
54
+ const record = this.data.find(r => r.__col__ === this.collectionName && this.matches(r, query));
28
55
  return record || null;
29
56
  }
30
57
  async update(query, data) {
31
58
  let count = 0;
32
- this.data = this.data.map(record => {
33
- if (this.matches(record, query)) {
59
+ this.data.forEach((r, i) => {
60
+ if (r.__col__ === this.collectionName && this.matches(r, query)) {
34
61
  count++;
35
- return {
36
- ...record,
37
- ...data,
38
- _updatedAt: new Date().toISOString(),
39
- };
62
+ this.data[i] = { ...r, ...data, _updatedAt: new Date().toISOString() };
40
63
  }
41
- return record;
42
64
  });
43
65
  return count;
44
66
  }
45
67
  async delete(query) {
46
- const initialLength = this.data.length;
47
- this.data = this.data.filter(record => !this.matches(record, query));
48
- return initialLength - this.data.length;
68
+ const initialLen = this.data.length;
69
+ this.data = this.data.filter(r => !(r.__col__ === this.collectionName && this.matches(r, query)));
70
+ return initialLen - this.data.length;
49
71
  }
50
72
  async exists(query) {
51
- return this.data.some(record => this.matches(record, query));
73
+ return this.data.some(r => r.__col__ === this.collectionName && this.matches(r, query));
52
74
  }
53
75
  async count(query) {
54
- return this.data.filter(record => this.matches(record, query)).length;
76
+ return this.get(query).then(res => res.length);
55
77
  }
56
78
  matches(record, query) {
57
- if (Object.keys(query).length === 0) {
79
+ if (Object.keys(query).length === 0)
58
80
  return true;
59
- }
60
81
  return Object.keys(query).every(key => {
61
- const queryValue = query[key];
62
- const recordValue = record[key];
63
- if (typeof queryValue === 'object' && queryValue !== null) {
64
- if (typeof recordValue === 'object' && recordValue !== null) {
65
- return this.matches(recordValue, queryValue);
66
- }
67
- return false;
82
+ const qVal = query[key];
83
+ const rVal = record[key];
84
+ if (typeof qVal === 'object' && qVal !== null && typeof rVal === 'object' && rVal !== null) {
85
+ return this.matches(rVal, qVal);
68
86
  }
69
- return recordValue === queryValue;
87
+ return rVal === qVal;
70
88
  });
71
89
  }
72
- async getAll() {
73
- return [...this.data];
74
- }
75
90
  async clear() {
76
- this.data = [];
77
- this.idCounter = 1;
91
+ this.data = this.data.filter(r => r.__col__ !== this.collectionName);
78
92
  }
79
93
  }
80
94
  exports.MemoryDriver = MemoryDriver;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryDriver.js","sourceRoot":"","sources":["../../src/drivers/MemoryDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryDriver.js","sourceRoot":"","sources":["../../src/drivers/MemoryDriver.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export { Hawiah } from './Hawiah';
2
+ export { HawiahNext } from './HawiahNext';
2
3
  export { IDriver, Query, Data } from './interfaces/IDriver';
3
4
  export { MemoryDriver } from './drivers/MemoryDriver';
5
+ export { Schema, SchemaDefinition, SchemaType, SchemaField, DataTypes } from './Schema';
package/dist/index.js CHANGED
@@ -1,8 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MemoryDriver = exports.Hawiah = void 0;
3
+ exports.DataTypes = exports.Schema = exports.MemoryDriver = exports.HawiahNext = exports.Hawiah = void 0;
4
4
  var Hawiah_1 = require("./Hawiah");
5
5
  Object.defineProperty(exports, "Hawiah", { enumerable: true, get: function () { return Hawiah_1.Hawiah; } });
6
+ var HawiahNext_1 = require("./HawiahNext");
7
+ Object.defineProperty(exports, "HawiahNext", { enumerable: true, get: function () { return HawiahNext_1.HawiahNext; } });
6
8
  var MemoryDriver_1 = require("./drivers/MemoryDriver");
7
9
  Object.defineProperty(exports, "MemoryDriver", { enumerable: true, get: function () { return MemoryDriver_1.MemoryDriver; } });
10
+ var Schema_1 = require("./Schema");
11
+ Object.defineProperty(exports, "Schema", { enumerable: true, get: function () { return Schema_1.Schema; } });
12
+ Object.defineProperty(exports, "DataTypes", { enumerable: true, get: function () { return Schema_1.DataTypes; } });
8
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AAIf,uDAAsD;AAA7C,4GAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AAInB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,mCAAwF;AAA/E,gGAAA,MAAM,OAAA;AAA6C,mGAAA,SAAS,OAAA"}
@@ -1,68 +1,80 @@
1
1
  /**
2
- * Query interface for filtering data
2
+ * Query interface for filtering and selecting data
3
3
  */
4
4
  export interface Query {
5
5
  [key: string]: any;
6
6
  }
7
7
  /**
8
- * Data interface for storing information
8
+ * Generic data interface representing a database record
9
9
  */
10
10
  export interface Data {
11
11
  [key: string]: any;
12
12
  }
13
13
  /**
14
- * Driver interface that all database drivers must implement
14
+ * The standard interface that all database drivers must implement.
15
+ * Supports connection pooling, CRUD operations, and schema validation.
15
16
  */
16
17
  export interface IDriver {
17
18
  /**
18
- * Connect to the database
19
+ * The type of database (sql or nosql).
20
+ */
21
+ dbType?: 'sql' | 'nosql';
22
+ /**
23
+ * Establishes a connection to the database.
19
24
  */
20
25
  connect(): Promise<void>;
21
26
  /**
22
- * Disconnect from the database
27
+ * Closes the database connection.
23
28
  */
24
29
  disconnect(): Promise<void>;
25
30
  /**
26
- * Set/Insert data into the database
27
- * @param data - The data to store
28
- * @returns The stored data with any additional fields (like auto-generated IDs)
31
+ * Checks if the driver is currently connected.
32
+ */
33
+ isConnected?(): boolean;
34
+ /**
35
+ * Creates a new driver instance for a specific table/collection, sharing the same connection.
36
+ * @param name The name of the table or collection
37
+ */
38
+ table?(name: string): IDriver;
39
+ /**
40
+ * Inserts a new record into the database.
41
+ * @param data The data to insert
29
42
  */
30
43
  set(data: Data): Promise<Data>;
31
44
  /**
32
- * Get data from the database based on query
33
- * @param query - The query to filter data
34
- * @returns Array of matching records
45
+ * Retrieves records matching the query.
46
+ * @param query Filter criteria
35
47
  */
36
48
  get(query: Query): Promise<Data[]>;
37
49
  /**
38
- * Update data in the database
39
- * @param query - The query to find records to update
40
- * @param data - The new data to set
41
- * @returns Number of updated records
50
+ * Updates records matching the query.
51
+ * @param query Filter criteria
52
+ * @param data Data to update
42
53
  */
43
54
  update(query: Query, data: Data): Promise<number>;
44
55
  /**
45
- * Delete data from the database
46
- * @param query - The query to find records to delete
47
- * @returns Number of deleted records
56
+ * Deletes records matching the query.
57
+ * @param query Filter criteria
48
58
  */
49
59
  delete(query: Query): Promise<number>;
50
60
  /**
51
- * Get a single record from the database
52
- * @param query - The query to filter data
53
- * @returns A single matching record or null
61
+ * Retrieves a single record matching the query.
62
+ * @param query Filter criteria
54
63
  */
55
64
  getOne(query: Query): Promise<Data | null>;
56
65
  /**
57
- * Check if a record exists
58
- * @param query - The query to check
59
- * @returns True if exists, false otherwise
66
+ * Checks if any record matches the query.
67
+ * @param query Filter criteria
60
68
  */
61
69
  exists(query: Query): Promise<boolean>;
62
70
  /**
63
- * Count records matching the query
64
- * @param query - The query to filter data
65
- * @returns Number of matching records
71
+ * Counts the number of records matching the query.
72
+ * @param query Filter criteria
66
73
  */
67
74
  count(query: Query): Promise<number>;
75
+ /**
76
+ * Sets the schema for the driver (optional support).
77
+ * @param schema The schema definition
78
+ */
79
+ setSchema?(schema: any): void;
68
80
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hawiah/core",
3
- "version": "1.0.2",
3
+ "version": "1.2.4",
4
4
  "description": "Core package for Hawiah - Schema-less database abstraction layer with relationships and DataLoader batching",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,11 +35,11 @@
35
35
  "license": "MIT",
36
36
  "repository": {
37
37
  "type": "git",
38
- "url": "https://github.com/Shuruhatik/hawiah-core"
38
+ "url": "git+https://github.com/hawiahjs/core.git"
39
39
  },
40
- "homepage": "https://hawiah.shuruhatik.com/",
40
+ "homepage": "https://github.com/hawiahjs/core#readme",
41
41
  "bugs": {
42
- "url": "https://github.com/Shuruhatik/hawiah-core/issues"
42
+ "url": "https://github.com/hawiahjs/core/issues"
43
43
  },
44
44
  "dependencies": {
45
45
  "dataloader": "^2.2.3"
@@ -48,4 +48,4 @@
48
48
  "@types/node": "^20.0.0",
49
49
  "typescript": "^5.0.0"
50
50
  }
51
- }
51
+ }