@pixagram/lacerta-db 0.3.1 → 0.5.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixagram/lacerta-db",
3
- "version": "0.3.1",
3
+ "version": "0.5.0",
4
4
  "description": "Lacerta-DB is a Javascript IndexedDB Database for Web Browsers. Simple, Fast, Secure.",
5
5
  "devDependencies": {
6
6
  "@babel/core": "^7.23.6",
@@ -25,9 +25,13 @@
25
25
  "permanent",
26
26
  "encrypt",
27
27
  "compress",
28
- "joyson",
29
- "triplesec",
30
- "snappy",
28
+ "index",
29
+ "encrypted",
30
+ "DB",
31
+ "advanced",
32
+ "PBKDF2",
33
+ "turboserial",
34
+ "turbojson",
31
35
  "js",
32
36
  "fast"
33
37
  ],
package/readme.md CHANGED
@@ -991,87 +991,173 @@ try {
991
991
 
992
992
  ## 📝 Best Practices
993
993
 
994
- ### 1. 🎯 Design Your Schema
994
+ ### 1. Index Strategy
995
995
 
996
996
  ```javascript
997
- // Good: Consistent document structure
998
- const userSchema = {
999
- type: 'user',
1000
- email: '',
1001
- profile: {
1002
- name: '',
1003
- avatar: '',
1004
- bio: ''
1005
- },
1006
- settings: {},
1007
- metadata: {
1008
- createdAt: Date.now(),
1009
- lastLogin: null
1010
- }
997
+ // Analyze query patterns first
998
+ const queryPatterns = {
999
+ byEmail: { email: 'user@example.com' }, // Hash index
1000
+ byAgeRange: { age: { $gte: 25, $lte: 35 } }, // B-Tree index
1001
+ byDescription: { $text: 'search terms' }, // Text index
1002
+ byLocation: { $near: { lat: 0, lng: 0 } } // Geo index
1011
1003
  };
1004
+
1005
+ // Create appropriate indexes
1006
+ await users.createIndex('email', { type: 'hash', unique: true });
1007
+ await users.createIndex('age', { type: 'btree' });
1008
+ await users.createIndex('bio', { type: 'text' });
1009
+ await users.createIndex('location', { type: 'geo' });
1012
1010
  ```
1013
1011
 
1014
- ### 2. 🔍 Index Planning
1012
+ ### 2. Cache Optimization
1015
1013
 
1016
1014
  ```javascript
1017
- // Create indexes for frequently queried fields
1018
- // (Indexes are automatically created for _id and _modified)
1019
- // For custom indexes, use query patterns to identify needs
1015
+ // Match cache strategy to access patterns
1016
+ const cacheStrategies = {
1017
+ // Frequently changing data - LRU with short TTL
1018
+ activeSessions: { type: 'lru', maxSize: 1000, ttl: 60000 },
1019
+
1020
+ // Hot data - LFU for keeping popular items
1021
+ trendingProducts: { type: 'lfu', maxSize: 500 },
1022
+
1023
+ // Time-sensitive - TTL only
1024
+ tempTokens: { type: 'ttl', ttl: 300000 },
1025
+
1026
+ // Sensitive data - No cache
1027
+ privateKeys: { type: 'none', enabled: false }
1028
+ };
1020
1029
  ```
1021
1030
 
1022
- ### 3. 🔐 Security First
1031
+ ### 3. Security Best Practices
1023
1032
 
1024
1033
  ```javascript
1025
- // Always encrypt sensitive data
1026
- const sensitiveOps = {
1027
- encrypted: true,
1028
- password: await generateSecurePassword(),
1029
- permanent: true // Prevent accidental deletion
1034
+ // For private keys and sensitive data
1035
+ const secureDb = await lacerta.getSecureDatabase(
1036
+ 'vault',
1037
+ SecureDatabaseEncryption.generateSecurePIN(12) // 12-digit secure PIN
1038
+ );
1039
+
1040
+ // Always use additional authentication
1041
+ await secureDb.storePrivateKey('key-name', privateKey, userEmail);
1042
+
1043
+ // Regular PIN rotation
1044
+ const rotatePin = async () => {
1045
+ const newPin = SecureDatabaseEncryption.generateSecurePIN(12);
1046
+ await secureDb.changePin(currentPin, newPin);
1047
+ // Securely store newPin
1030
1048
  };
1031
1049
  ```
1032
1050
 
1033
- ### 4. Performance Optimization
1051
+ ### 4. Performance Optimization
1034
1052
 
1035
1053
  ```javascript
1036
- // Use batch operations for bulk actions
1037
- await collection.batchAdd(largeDataset, {
1038
- compressed: true // Compress large datasets
1039
- });
1040
-
1041
1054
  // Enable monitoring during development
1042
1055
  lacerta.performanceMonitor.startMonitoring();
1043
- // ... test operations ...
1056
+
1057
+ // Test different strategies
1058
+ const testPerformance = async () => {
1059
+ // Test without index
1060
+ const start1 = Date.now();
1061
+ await collection.query({ field: 'value' });
1062
+ console.log('Without index:', Date.now() - start1);
1063
+
1064
+ // Create index
1065
+ await collection.createIndex('field', { type: 'hash' });
1066
+
1067
+ // Test with index
1068
+ const start2 = Date.now();
1069
+ await collection.query({ field: 'value' });
1070
+ console.log('With index:', Date.now() - start2);
1071
+ };
1072
+
1073
+ // Get optimization suggestions
1044
1074
  const tips = lacerta.performanceMonitor.getOptimizationTips();
1045
1075
  ```
1046
1076
 
1047
- ### 5. 🧹 Regular Maintenance
1077
+ ### 5. Storage Management
1048
1078
 
1049
1079
  ```javascript
1050
1080
  // Set appropriate limits
1051
1081
  db.updateSettings({
1052
- sizeLimitKB: 50000,
1053
- bufferLimitKB: 40000,
1054
- freeSpaceEvery: 300000 // 5 minutes
1082
+ sizeLimitKB: 100000, // 100MB total
1083
+ bufferLimitKB: 80000, // Start cleanup at 80MB
1084
+ freeSpaceEvery: 300000 // Check every 5 minutes
1055
1085
  });
1056
1086
 
1057
- // Regular backups
1058
- const dailyBackup = async () => {
1059
- const backup = await lacerta.createBackup('secure-password');
1060
- await saveToCloud(backup);
1087
+ // Mark critical documents as permanent
1088
+ await collection.add(importantData, { permanent: true });
1089
+
1090
+ // Regular maintenance
1091
+ const maintenance = async () => {
1092
+ const stats = db.getStats();
1093
+ if (stats.totalSizeKB > 90000) {
1094
+ // Cleanup old non-permanent documents
1095
+ await collection.freeSpace();
1096
+ }
1061
1097
  };
1062
- setInterval(dailyBackup, 24 * 60 * 60 * 1000);
1063
1098
  ```
1064
1099
 
1065
- ### 6. 📊 Monitor Usage
1100
+ ## 🔄 Migration from v4.x
1101
+
1102
+ ### Breaking Changes
1103
+
1104
+ None! LacertaDB v5.0.0 is fully backward compatible. All v4.x code continues to work without modifications.
1105
+
1106
+ ### New Features to Adopt
1066
1107
 
1067
1108
  ```javascript
1068
- // Track database growth
1069
- const monitor = async () => {
1070
- const stats = db.getStats();
1071
- if (stats.totalSizeKB > 40000) {
1072
- console.warn('Database size exceeds 40MB');
1073
- // Trigger cleanup or alert
1074
- }
1109
+ // v4.x code (still works)
1110
+ const collection = await db.createCollection('data');
1111
+ const results = await collection.query({ status: 'active' });
1112
+
1113
+ // v5.0.0 optimized code
1114
+ const collection = await db.createCollection('data');
1115
+
1116
+ // Add index for 50x faster queries
1117
+ await collection.createIndex('status', { type: 'hash' });
1118
+
1119
+ // Configure smart caching
1120
+ await collection.configureCacheStrategy({
1121
+ type: 'lru',
1122
+ maxSize: 500,
1123
+ ttl: 120000
1124
+ });
1125
+
1126
+ // Now queries are much faster
1127
+ const results = await collection.query({ status: 'active' });
1128
+ ```
1129
+
1130
+ ### Migration Checklist
1131
+
1132
+ 1. **Add Indexes** to frequently queried fields
1133
+ 2. **Configure Cache Strategies** based on access patterns
1134
+ 3. **Enable PIN encryption** for databases with sensitive data
1135
+ 4. **Update force delete** calls for permanent document management
1136
+ 5. **Monitor performance** to identify optimization opportunities
1137
+
1138
+ ```javascript
1139
+ // Complete migration example
1140
+ const migrate = async () => {
1141
+ // 1. Get existing database
1142
+ const db = await lacerta.getDatabase('myApp');
1143
+
1144
+ // 2. Add indexes to collections
1145
+ const users = await db.getCollection('users');
1146
+ await users.createIndex('email', { type: 'hash', unique: true });
1147
+ await users.createIndex('createdAt', { type: 'btree' });
1148
+
1149
+ // 3. Configure caching
1150
+ await users.configureCacheStrategy({
1151
+ type: 'lru',
1152
+ maxSize: 1000,
1153
+ ttl: 300000
1154
+ });
1155
+
1156
+ // 4. For sensitive data, create new secure database
1157
+ const secureDb = await lacerta.getSecureDatabase('secure', pin);
1158
+ // Migrate sensitive data to secure database
1159
+
1160
+ console.log('Migration complete!');
1075
1161
  };
1076
1162
  ```
1077
1163
 
@@ -1079,10 +1165,10 @@ const monitor = async () => {
1079
1165
 
1080
1166
  We welcome contributions! Here's how you can help:
1081
1167
 
1082
- 1. 🐛 **Report Bugs**: Open an issue with reproduction steps
1083
- 2. 💡 **Suggest Features**: Share your ideas in discussions
1084
- 3. 📝 **Improve Docs**: Fix typos or add examples
1085
- 4. 🔧 **Submit PRs**: Fork, code, test, and submit
1168
+ 1. **Report Bugs**: Open an issue with reproduction steps
1169
+ 2. **Suggest Features**: Share your ideas in discussions
1170
+ 3. **Improve Docs**: Fix typos or add examples
1171
+ 4. **Submit PRs**: Fork, code, test, and submit
1086
1172
 
1087
1173
  ### Development Setup
1088
1174
 
@@ -1092,7 +1178,7 @@ git clone https://github.com/pixagram-blockchain/LacertaDB.git
1092
1178
  cd LacertaDB
1093
1179
 
1094
1180
  # Install dependencies
1095
- npm install @pixagram/lacerta-db
1181
+ npm install
1096
1182
 
1097
1183
  # Run tests
1098
1184
  npm test
@@ -1101,6 +1187,27 @@ npm test
1101
1187
  npm run build
1102
1188
  ```
1103
1189
 
1190
+ ### Testing
1191
+
1192
+ ```javascript
1193
+ // Test your changes
1194
+ import { LacertaDB } from './lacertadb.js';
1195
+
1196
+ const runTests = async () => {
1197
+ const lacerta = new LacertaDB();
1198
+ const db = await lacerta.getDatabase('test');
1199
+
1200
+ // Test new features
1201
+ const collection = await db.createCollection('test');
1202
+ await collection.createIndex('field', { type: 'hash' });
1203
+
1204
+ // Verify functionality
1205
+ console.assert(collection.indexManager.indexes.size === 1);
1206
+
1207
+ console.log('Tests passed!');
1208
+ };
1209
+ ```
1210
+
1104
1211
  ## 📄 License
1105
1212
 
1106
1213
  MIT License - See [LICENSE](LICENSE) file for details
@@ -1110,13 +1217,29 @@ MIT License - See [LICENSE](LICENSE) file for details
1110
1217
  - Built with ❤️ by the Pixagram team
1111
1218
  - Uses TurboSerial and TurboBase64 for high performance
1112
1219
  - Inspired by MongoDB's query language
1113
- - Powered by modern browser APIs
1220
+ - Powered by modern browser APIs (IndexedDB, OPFS, Web Crypto)
1114
1221
 
1115
1222
  ## 📮 Support
1116
1223
 
1117
- - 📧 Email: omnibus (at) pixagram.io
1224
+ - 📧 Email: support@pixagram.com
1225
+ - 💬 Discord: [Join our community](https://discord.gg/pixagram)
1226
+ - 📚 Documentation: [docs.lacertadb.com](https://docs.lacertadb.com)
1118
1227
  - 🐛 Issues: [GitHub Issues](https://github.com/pixagram-blockchain/LacertaDB/issues)
1119
1228
 
1229
+ ## 🎉 What's New in v5.0.0
1230
+
1231
+ - ⚡ **Custom Indexing**: B-Tree, Hash, Text, and Geo indexes for 50x faster queries
1232
+ - 🧠 **Smart Caching**: LRU, LFU, and TTL strategies with per-collection configuration
1233
+ - 🔐 **Database Encryption**: PIN-based security with 1M PBKDF2 iterations for private keys
1234
+ - 💪 **Force Delete**: Administrative control over permanent documents
1235
+ - 📊 **Enhanced Monitoring**: Detailed performance metrics and optimization tips
1236
+
1120
1237
  ---
1121
1238
 
1122
- 🦎 LacertaDB - Fast, Secure, Browser-Native Database
1239
+ <div align="center">
1240
+ <strong>🦎 LacertaDB v5.0.0 - Fast, Secure, Browser-Native Database</strong>
1241
+ <br>
1242
+ <i>50x faster queries • Military-grade encryption • Smart caching</i>
1243
+ <br><br>
1244
+ Made with ❤️ by Pixagram Blockchain
1245
+ </div>