{"_id":"hawiah","_rev":"4-b28089dd4df566ee70a6b4ab3bc903e6","name":"hawiah","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"hawiah","version":"1.0.0","keywords":["database","schema-less","driver","abstraction","orm","query-builder","json","yaml","sqlite","mongodb","firebase","postgresql","mysql","multi-database","unified-api","dataloader","relationships","n+1","bun","deno","nodejs","typescript","nosql","sql"],"author":{"name":"Shuruhatik"},"license":"MIT","_id":"hawiah@1.0.0","maintainers":[{"name":"shuruhatik","email":"mohamedabdelkarim020@gmail.com"}],"homepage":"https://hawiah.shuruhatik.com/","bugs":{"url":"https://github.com/Shuruhatik/hawiah/issues"},"dist":{"shasum":"4744e5da019917c2a3510f8756602bf71868f17b","tarball":"https://registry.npmjs.org/hawiah/-/hawiah-1.0.0.tgz","fileCount":7,"integrity":"sha512-j9Xyy8KZUWoKenRLVX0Rv8uOUSvszK6CquAxHJW0Smi6geckYBQgvT1IEjR6NMLIksh0j9z8MHSFlTOH1rWfEQ==","signatures":[{"sig":"MEUCIQDi9tP/F6/JkUoSyrjrFW/tqgulqzpHXxo4dG9bEOVcawIgZBN3+/82zYZ70Rh/lLhqgkAvMWoxnx29TFCpU+n/SH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/hawiah@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9025},"main":"dist/index.js","types":"./dist/index.d.ts","module":"dist/index.js","gitHead":"7fb6ead1714e3e0cf82eaa1c34fbfb6eb7d5858e","scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"shuruhatik","email":"mohamedabdelkarim020@gmail.com"},"repository":{"url":"git+https://github.com/Shuruhatik/hawiah.git","type":"git"},"_npmVersion":"10.8.2","description":"One API. Multiple Databases. Zero Complexity. Schema-less database abstraction with smart relationships and DataLoader optimization. Works with Node.js, Bun, and Deno.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@hawiah/core":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"peerDependencies":{"@hawiah/core":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hawiah_1.0.0_1764535081416_0.5725168526340345","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"hawiah","version":"1.1.0","keywords":["database","schema-less","driver","abstraction","orm","query-builder","json","yaml","sqlite","mongodb","firebase","postgresql","mysql","multi-database","unified-api","dataloader","relationships","n+1","bun","deno","nodejs","typescript","nosql","sql"],"author":{"name":"Shuruhatik"},"license":"MIT","_id":"hawiah@1.1.0","maintainers":[{"name":"shuruhatik","email":"mohamedabdelkarim020@gmail.com"},{"name":"tahawy111","email":"amertahawy111@gmail.com"}],"homepage":"https://hawiah.js.org/","bugs":{"url":"https://github.com/Shuruhatik/hawiah/issues"},"dist":{"shasum":"778c6d3004424c361ee278b5452c73f802d6d7b3","tarball":"https://registry.npmjs.org/hawiah/-/hawiah-1.1.0.tgz","fileCount":7,"integrity":"sha512-33BjZ6EB7zaO6fmzaUb2o0qW5NOjin6KLpspB+G3XKSoNCQnIj0Zkixco+bLTIp3KEuJI/mUDHD1JNZ4aNa3NQ==","signatures":[{"sig":"MEQCIDvEReqKOVvX4T2RS006xnnSpMMtUJX/6ci9NgHIorFiAiAuDKIW0EP2biYCOSBvVM2c2WJWc2MTo5AQNczM7OYMhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/hawiah@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10995},"main":"dist/index.js","types":"./dist/index.d.ts","module":"dist/index.js","gitHead":"f01ad67d3ca53c45aec14b4a8a547c4f07912e6c","scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"shuruhatik","email":"mohamedabdelkarim020@gmail.com"},"repository":{"url":"git+https://github.com/Shuruhatik/hawiah.git","type":"git"},"_npmVersion":"10.8.2","description":"One API. Multiple Databases. Zero Complexity. Schema-less database abstraction with smart relationships and DataLoader optimization. Works with Node.js, Bun, and Deno.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@hawiah/core":"^1.1.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hawiah_1.1.0_1766590955503_0.6087854955114005","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"hawiah","version":"1.1.1","description":"One API. Multiple Databases. Zero Complexity. Schema-less database abstraction with smart relationships and DataLoader optimization. Works with Node.js, Bun, and Deno.","main":"dist/index.js","module":"dist/index.js","scripts":{"build":"tsc","dev":"tsc --watch"},"keywords":["database","schema-less","driver","abstraction","orm","query-builder","json","yaml","sqlite","mongodb","firebase","postgresql","mysql","multi-database","unified-api","dataloader","relationships","n+1","bun","deno","nodejs","typescript","nosql","sql"],"author":{"name":"Shuruhatik"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Shuruhatik/hawiah.git"},"homepage":"https://hawiah.js.org/","bugs":{"url":"https://github.com/Shuruhatik/hawiah/issues"},"dependencies":{"@hawiah/core":"^1.1.2"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.0.0"},"_id":"hawiah@1.1.1","gitHead":"27b08346bd69a9f491d22db202111432f05bd87d","types":"./dist/index.d.ts","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-KmmYJPDLua/VOdPqhfPEYb8/XJrGxuziVoxR/tjSNQW6lAPMytEYg4VHvr5wBGF2ukxMXKKjJTlQLyztZAFM0g==","shasum":"c1295b7b4a1e87446a491a941716f18cf95a3111","tarball":"https://registry.npmjs.org/hawiah/-/hawiah-1.1.1.tgz","fileCount":7,"unpackedSize":11314,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/hawiah@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICC3ZAG9oG+8k2g1JAtQXX1o2m0CGTONduj5Wq4Rl5R5AiBIrQ6chCvuCMM/FiWdNYnDRtX/2+9N0xmxAYpmg2Gj1A=="}]},"_npmUser":{"name":"shuruhatik","email":"mohamedabdelkarim020@gmail.com"},"directories":{},"maintainers":[{"name":"shuruhatik","email":"mohamedabdelkarim020@gmail.com"},{"name":"tahawy111","email":"amertahawy111@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hawiah_1.1.1_1766595912566_0.5539684586106"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-30T20:38:01.287Z","modified":"2025-12-24T17:05:13.083Z","1.0.0":"2025-11-30T20:38:01.613Z","1.1.0":"2025-12-24T15:42:35.676Z","1.1.1":"2025-12-24T17:05:12.711Z"},"bugs":{"url":"https://github.com/Shuruhatik/hawiah/issues"},"author":{"name":"Shuruhatik"},"license":"MIT","homepage":"https://hawiah.js.org/","keywords":["database","schema-less","driver","abstraction","orm","query-builder","json","yaml","sqlite","mongodb","firebase","postgresql","mysql","multi-database","unified-api","dataloader","relationships","n+1","bun","deno","nodejs","typescript","nosql","sql"],"repository":{"type":"git","url":"git+https://github.com/Shuruhatik/hawiah.git"},"description":"One API. Multiple Databases. Zero Complexity. Schema-less database abstraction with smart relationships and DataLoader optimization. Works with Node.js, Bun, and Deno.","maintainers":[{"name":"shuruhatik","email":"mohamedabdelkarim020@gmail.com"},{"name":"tahawy111","email":"amertahawy111@gmail.com"}],"readme":"<div align=\"center\">\n\t<br />\n\t<p>\n\t\t<a href=\"https://github.com/shuruhatik/hawiah\"><img src=\"https://i.ibb.co/9kNhFwnT/hawiah-npm.png\" alt=\"hawiah\" /></a></br>\n\t\t<a href=\"https://www.npmjs.com/package/hawiah\"><img src=\"https://img.shields.io/npm/dt/hawiah?color=50BAA8&style=for-the-badge\" alt=\"NPM Downloads\" /></a>\n\t\t<a href=\"https://www.npmjs.com/package/hawiah\"><img src=\"https://img.shields.io/npm/v/hawiah?color=3CB9A7&style=for-the-badge\" alt=\"npm Version\" /></a>\n\t\t<a href=\"https://opensource.org/licenses/MIT\"><img src=\"https://img.shields.io/badge/License-MIT-2E9B8C?style=for-the-badge\" alt=\"License\" /></a>\n\t</p>\n</div>\n\n-----\nModular database abstraction with virtual relationships. Support for 7 drivers, 50+ methods, and DataLoader batching. One API to rule them all.\n\n## ✨ Features\n\n- **Universal API** - Same code works with any database\n- **Multiple Drivers** - JSON, YAML, SQLite, MongoDB, Firebase, PostgreSQL, MySQL\n- **Runtime Agnostic** - Works with Node.js, Bun, and Deno\n- **Virtual Relationships** - Define relations between any collections, even across different databases!\n- **Hybrid Schema** - Blends SQL tables with NoSQL flexibility (Real columns + JSON)\n- **DataLoader Optimization** - Automatic query batching and caching eliminates N+1 problems\n- **Extensible** - Create custom drivers for any data source\n- **Schema-less / Schema-full** - You choose: Strict validation or total freedom\n- **TypeScript Ready** - Full type definitions included\n\n## 📦 Installation\n\n```bash\n# Core package (required)\nnpm install hawiah\n# or\nbun add hawiah\n# or\ndeno install npm:hawiah\n\n# Choose one or more drivers\nnpm install @hawiah/local      # JSON & YAML\nnpm install @hawiah/sqlite     # SQLite\nnpm install @hawiah/mongo      # MongoDB\nnpm install @hawiah/firebase   # Firebase Firestore\nnpm install @hawiah/postgres   # PostgreSQL\nnpm install @hawiah/mysql      # MySQL\n```\n\n**Works with:**\n- ✅ Node.js\n- ✅ Bun\n- ✅ Deno\n\n## 🚀 Quick Start\n\n```javascript\nimport { Hawiah } from 'hawiah';\nimport { MongoDriver } from '@hawiah/mongo';\n\nconst db = new Hawiah({\n  driver: new MongoDriver({\n    uri: 'mongodb://localhost:27017',\n    databaseName: 'myapp',\n    collectionName: 'users'\n  })\n});\n\nawait db.connect();\nawait db.insert({ id: 1, name: 'John', age: 25 });\nconst users = await db.get({});\nawait db.disconnect();\n```\n\nSwitch to SQLite or Firebase? Just change the driver. Your code stays the same.\n\n## 🧬 The Hybrid Schema System\n\nHawiah v1.1 introduces a game-changing **Hybrid Schema** capabilities.\n\n### Virtual vs. Real Schemas\nHow Hawiah handles your schema depends on the driver:\n\n| Feature | SQL Drivers (Postgres, SQLite, MySQL) | NoSQL Drivers (Mongo, Firebase, Local) |\n| :--- | :--- | :--- |\n| **Logic** | **Real Schema (Physical columns)** | **Virtual Schema (Validator)** |\n| **Storage** | Columns for defined fields + JSON for extras. | Full JSON Document. |\n| **Benefit** | Native SQL performance & indexing. | Maximum flexibility & speed. |\n\n### Schema Definition\n```javascript\nimport { Schema, DataTypes } from '@hawiah/core';\n\nconst userSchema = new Schema({\n  // Basic Types\n  username: { type: DataTypes.STRING, required: true },\n  age:      { type: DataTypes.INTEGER, min: 18 },\n  \n  // Advanced Types\n  email:    { type: DataTypes.EMAIL, unique: true },\n  tags:     { type: DataTypes.ARRAY },\n  \n  // Default Values\n  isActive: { type: DataTypes.BOOLEAN, default: true },\n  created:  { type: DataTypes.DATE, default: () => new Date() }\n});\n```\n\n## 🔗 Virtual Relationships - The Game Changer\n\nDefine relationships between collections **without foreign keys or schema changes**. Works across different databases!\n\n```javascript\nimport { Hawiah } from 'hawiah';\nimport { MongoDriver } from '@hawiah/mongo';\nimport { SQLiteDriver } from '@hawiah/sqlite';\n\n// Users in MongoDB\nconst users = new Hawiah({\n  driver: new MongoDriver({\n    uri: 'mongodb://localhost:27017',\n    databaseName: 'myapp',\n    collectionName: 'users'\n  })\n});\n\n// Posts in SQLite\nconst posts = new Hawiah({\n  driver: new SQLiteDriver('./blog.db', 'posts')\n});\n\n// Define virtual relationship - MongoDB ↔ SQLite!\nusers.relation('posts', posts, '_id', 'userId', 'many');\nposts.relation('author', users, 'userId', '_id', 'one');\n\nawait users.connect();\nawait posts.connect();\n\n// Query with relationships - automatically optimized!\nconst usersWithPosts = await users.getWith({}, 'posts');\n// Each user includes their posts from SQLite - no N+1 queries!\n\nconst postsWithAuthors = await posts.getWith({}, 'author');\n// Each post includes author from MongoDB - fully batched!\n```\n\n**Why Virtual Relationships are Powerful:**\n\n✨ **Cross-Database Relations** - Connect MongoDB users with SQLite posts, or any combination  \n⚡ **Zero N+1 Problems** - DataLoader automatically batches and caches all queries  \n🚀 **No Schema Changes** - No foreign keys, no migrations, just pure flexibility  \n🎯 **Type-Safe** - Full TypeScript support with proper typing  \n🔄 **Nested Relations** - Load relations of relations infinitely  \n💪 **Production Ready** - Battle-tested optimization used by GraphQL servers worldwide\n\n## 🗄️ Available Drivers\n\n| Driver | Package | Use Case |\n|--------|---------|----------|\n| **JSON** | `@hawiah/local` | Development, Testing |\n| **YAML** | `@hawiah/local` | Configuration |\n| **SQLite** | `@hawiah/sqlite` | Desktop/Mobile Apps |\n| **MongoDB** | `@hawiah/mongo` | Web/Cloud Apps |\n| **Firebase** | `@hawiah/firebase` | Real-time Apps |\n| **PostgreSQL** | `@hawiah/postgres` | Enterprise Apps |\n| **MySQL** | `@hawiah/mysql` | Web Apps |\n| **Custom** | - | Any Data Source |\n\n## 📚 API Overview\n\n**Basic Operations:** `insert`, `insertMany`, `get`, `getOne`, `getById`, `update`, `updateById`, `remove`, `removeById`, `clear`\n\n**Virtual Relationships:** \n- `relation(name, targetCollection, localKey, foreignKey, type)` - Define virtual relation\n- `getWith(query, relations)` - Load data with relations (auto-optimized with DataLoader)\n\n**Advanced:** `sort`, `paginate`, `select`, `count`, `sum`, `group`, `unique`\n\n**Arrays:** `push`, `pull`, `shift`, `unshift`, `pop`\n\n**Fields:** `increment`, `decrement`, `unset`, `rename`\n\n## 📖 Documentation\n\nFor detailed documentation, driver examples, relationships guide, and custom driver tutorials:\n\n**[📚 Full Documentation](https://github.com/shuruhatik/hawiah)**\n\n## 🔗 Links\n\n- [GitHub](https://github.com/shuruhatik/hawiah)\n- [NPM](https://npmjs.com/package/hawiah)\n- [Issues](https://github.com/shuruhatik/hawiah/issues)\n\n## 📦 GitHub Repositories\n\n### Core & Documentation\n- [hawiah](https://github.com/Shuruhatik/hawiah) - Main package and unified API\n- [hawiah-core](https://github.com/shuruhatik/hawiah-core) - Core abstractions and base classes\n- [hawiah-docs](https://github.com/Shuruhatik/hawiah-docs) - Full documentation and guides\n\n### Database Drivers\n- [hawiah-local](https://github.com/Shuruhatik/hawiah-local) - JSON & YAML driver\n- [hawiah-sqlite](https://github.com/Shuruhatik/hawiah-sqlite) - SQLite driver\n- [hawiah-mysql](https://github.com/Shuruhatik/hawiah-mysql) - MySQL driver\n- [hawiah-postgres](https://github.com/Shuruhatik/hawiah-postgres) - PostgreSQL driver\n- [hawiah-firebase](https://github.com/Shuruhatik/hawiah-firebase) - Firebase Firestore driver\n- [hawiah-mongo](https://github.com/Shuruhatik/hawiah-mongo) - MongoDB driver\n\n## 📄 License\n\nMIT © [Shuruhatik](https://github.com/shuruhatik)\n","readmeFilename":"README.md"}