UNPKG

nehoid

Version:

Advanced unique ID generation utility with multi-layer encoding, collision detection, and context-aware features

597 lines (477 loc) 15.5 kB
# NehoID - Enterprise-Grade Unique Identifier Generation A comprehensive TypeScript library for generating, managing, and validating unique identifiers with advanced features for enterprise applications. NehoID provides multiple generation strategies, collision detection, encoding pipelines, and monitoring capabilities designed for production environments. ## Key Differentiators NehoID distinguishes itself from other ID generators through: - **Multi-Layer Encoding Pipeline**: 20+ encoding algorithms with configurable compression and reversibility - **Intelligent Collision Detection**: Multiple retry strategies with exponential backoff and custom validation functions - **Context-Aware Generation**: Environment, device, and behavioral data integration - **Advanced Analytics**: Real-time performance monitoring and statistical analysis - **Format Migration Tools**: Seamless conversion between different ID formats - **Batch Processing**: High-performance bulk operations with parallel execution - **Custom Character Sets**: Domain-specific alphabets and character restrictions - **Quality Assessment**: Entropy analysis and ID health scoring algorithms ## Installation ```bash npm install nehoid # or yarn add nehoid # or bun add nehoid ``` ## Quick Start ```typescript import { NehoID } from "nehoid"; // Basic ID generation const id = NehoID.generate(); console.log(id); // "6a617977416b714d-7938716a56515a52-79764d5a50775555" // Advanced generation with multiple options const customId = NehoID.generate({ size: 16, prefix: "user", case: "lower", includeTimestamp: true, format: "nanoid", }); // Collision-safe generation const safeId = await NehoID.safe({ name: "database-check", maxAttempts: 5, backoffType: "exponential", checkFunction: async (id) => !(await database.exists(id)), }); ``` ## Core Features ### 1. Advanced ID Generation The `generate()` method supports extensive customization options for various use cases: ```typescript // Preset formats const uuid = NehoID.generate({ format: "uuid" }); const nanoid = NehoID.generate({ format: "nanoid" }); const cuid = NehoID.generate({ format: "cuid" }); // Character set control const numericOnly = NehoID.generate({ charset: { numbers: true, lowercase: false, uppercase: false }, size: 12, }); // URL-safe generation const urlSafe = NehoID.generate({ quality: { urlSafe: true }, charset: { exclude: ["+", "/", "="] }, }); // Case transformations const upperCase = NehoID.generate({ case: "upper" }); const camelCase = NehoID.generate({ case: "camel" }); const snakeCase = NehoID.generate({ case: "snake" }); // Pattern-based generation const phoneFormat = NehoID.generate({ pattern: "XXX-XXX-XXXX" }); const licensePlate = NehoID.generate({ pattern: "AA-9999" }); // Sequential numbering const orderId = NehoID.generate({ sequential: { context: "orders", start: 1000, padLength: 6 }, }); // Temporal features const tempId = NehoID.generate({ expiresIn: 24 * 60 * 60 * 1000, // 24 hours version: "v2", domain: "api", }); // Quality requirements const secureId = NehoID.generate({ randomness: "crypto", quality: { minEntropy: "high", avoidPatterns: true, }, size: 32, }); // Metadata embedding const taggedId = NehoID.generate({ metadata: { createdBy: "system", environment: "production" }, includeChecksum: true, }); ``` ### 2. Specialized Generators ```typescript // Standard formats const uuid = NehoID.uuid(); // RFC 4122 UUID const nanoid = NehoID.nanoid(12); // NanoID-compatible const shortId = NehoID.short(8); // URL-safe short ID const hexId = NehoID.hex(32); // Hexadecimal ID // Advanced formats const hierarchicalId = NehoID.hierarchical({ parentId: "parent-123", level: 2, }); const temporalId = NehoID.temporal({ precision: "milliseconds", includeRandom: true, }); const semanticId = NehoID.semantic({ prefix: "ORDER", region: "US-WEST", department: "SALES", year: 2024, }); const sequentialId = NehoID.sequential({ prefix: "INV", counter: 1001, padLength: 6, }); ``` ### 3. Collision Detection and Safety ```typescript // Basic collision avoidance const safeId = await NehoID.safe({ name: "user-registration", maxAttempts: 10, backoffType: "exponential", checkFunction: async (id) => { const user = await database.collection("users").findOne({ id }); return !user; }, }); // Custom retry strategy const customSafeId = await NehoID.safe({ name: "payment-transaction", maxAttempts: 3, backoffType: "linear", checkFunction: async (id) => { return !(await redis.exists(`payment:${id}`)); }, }); ``` ### 4. Encoding Pipeline ```typescript import { EncodingPipeline } from "nehoid"; // Build custom encoding pipeline const pipeline = new EncodingPipeline() .addEncoder("base64") .addEncoder("hex") .addCompression("lz77") .enableReversibility() .addMetadata("version", "2.1.0"); // Use in generation const encodedId = NehoID.generate({ pipeline: pipeline, reversible: true, }); // Reverse encoding if needed const original = pipeline.reverse(encodedId); ``` ### 5. Batch Operations ```typescript // High-performance batch generation const userIds = NehoID.batch({ count: 1000, format: "uuid", parallel: true, ensureUnique: true, }); // Bulk validation const validationResults = NehoID.validateBatch(userIds, { checkFormat: true, checkCollisions: false, repairCorrupted: true, }); // Filtered results const validIds = validationResults.filter((result) => result.valid); ``` ### 6. Analytics and Monitoring ```typescript // Enable performance monitoring NehoID.startMonitoring(); // Generate IDs and collect statistics for (let i = 0; i < 1000; i++) { NehoID.generate({ format: "nanoid" }); } // Retrieve comprehensive statistics const stats = NehoID.getStats(); console.log({ totalGenerated: stats.generated, collisionIncidents: stats.collisions, averageGenerationTime: stats.averageGenerationTime, memoryFootprint: stats.memoryUsage, distributionQuality: stats.distributionScore, }); // Individual ID quality assessment const healthScore = NehoID.healthCheck("user-abc123def"); console.log({ overallScore: healthScore.score, // 0.0 to 1.0 entropyLevel: healthScore.entropy, // "low" | "medium" | "high" predictability: healthScore.predictability, improvementSuggestions: healthScore.recommendations, }); ``` ### 7. Context-Aware Generation ```typescript // Device fingerprinting const deviceId = NehoID.contextual({ includeDevice: true, includeTimezone: true, includeBrowser: true, includeScreen: true, }); // Business context const businessId = NehoID.semantic({ prefix: "ORD", region: "EU-CENTRAL", department: "FULFILLMENT", year: 2024, customSegments: { priority: "HIGH", channel: "WEB", }, }); // User behavior patterns const behavioralId = NehoID.contextual({ userBehavior: "premium-subscriber", includeLocation: true, includeTimezone: true, }); ``` ### 8. Temporal Conversions ```typescript // Convert timestamp to temporal ID const timestamp = Date.now(); const temporalId = NehoID.fromTemporal(timestamp); // Extract timestamp from temporal ID const extractedTimestamp = NehoID.fromTemporalToTimestamp(temporalId); // Time-based queries const recentIds = await database.collection .find({ temporalId: { $gte: NehoID.fromTemporal(Date.now() - 24 * 60 * 60 * 1000), }, }) .sort({ temporalId: 1 }); ``` ### 9. Checksum and Integrity ```typescript import { Checksum } from "nehoid"; // Generate checksums with different algorithms const crc32Checksum = Checksum.generate("important-data", "crc32", 8); const fnv1aChecksum = Checksum.generate("important-data", "fnv1a", 6); // Validate integrity const isValid = Checksum.validate("important-data", crc32Checksum, "crc32", 8); // Safe operations (no exceptions) const safeChecksum = Checksum.tryGenerate("data"); const safeValidation = Checksum.tryValidate("data", checksum); ``` ## Advanced Configuration ### Custom Encoding Strategies ```typescript import { NehoID, EncodingPipeline, Checksum } from "nehoid"; // Complex encoding pipeline const securePipeline = new EncodingPipeline() .addEncoders(["base64", "hex", "rot13"]) .addCompression("gzip") .enableReversibility() .addMetadata("encryption", "AES256") .addMetadata("created", new Date().toISOString()); // Generate with full configuration const enterpriseId = NehoID.generate({ size: 32, prefix: "ENT", encoding: ["base64", "urlSafeBase64"], compression: "lz77", reversible: true, includeChecksum: true, expiresIn: 30 * 24 * 60 * 60 * 1000, // 30 days version: "3.1.0", domain: "enterprise", quality: { minEntropy: "high", urlSafe: true, avoidPatterns: true, }, charset: { numbers: true, lowercase: true, uppercase: true, exclude: ["0", "O", "I", "l"], // Avoid ambiguous characters }, metadata: { department: "security", classification: "confidential", retention: "7-years", }, }); ``` ### Migration and Compatibility ```typescript // Migrate existing UUIDs to NehoID format const migratedIds = await NehoID.migrate({ from: "uuid", to: "nehoid-v2", preserveOrder: true, batchSize: 500, ids: existingUuids, }); // Cross-platform compatibility const crossPlatformId = NehoID.compatible({ platform: ["javascript", "python", "go", "rust"], format: "alphanumeric", length: 16, }); ``` ## Performance Characteristics | Operation | NehoID | Performance | Memory Usage | Notes | | ----------------------- | -------------------------- | ----------- | ------------ | --------------------- | | Single ID Generation | generate() | <0.1ms | ~2KB | Basic generation | | Batch Generation (1K) | batch({count: 1000}) | ~5ms | ~50KB | Parallel processing | | Batch Generation (100K) | batch({count: 100000}) | ~450ms | ~5MB | Memory efficient | | Collision Check | safe() | <1ms | ~5KB | Database dependent | | Validation | validate() | <0.5ms | ~1KB | Regex-based | | Health Check | healthCheck() | <2ms | ~10KB | Entropy analysis | | Encoding Pipeline | EncodingPipeline.process() | <5ms | ~8KB | Compression dependent | _Benchmarks performed on Intel i7-9750H, Node.js 18.17.0, 16GB RAM_ ## API Reference ### Core Methods #### ID Generation - `NehoID.generate(options?)` - Generate ID with full configuration options - `NehoID.safe(options)` - Generate collision-resistant ID - `NehoID.batch(options)` - Bulk ID generation #### Validation & Analysis - `NehoID.validate(id, options?)` - Validate ID format and integrity - `NehoID.validateBatch(ids, options?)` - Bulk validation - `NehoID.healthCheck(id)` - Comprehensive ID quality assessment #### Specialized Generators - `NehoID.uuid()` - RFC 4122 compliant UUID - `NehoID.nanoid(length?)` - NanoID compatible format - `NehoID.short(length?)` - URL-safe short identifier - `NehoID.hex(length?)` - Hexadecimal identifier - `NehoID.hierarchical(options)` - Tree-structured identifiers - `NehoID.temporal(options)` - Time-ordered identifiers - `NehoID.semantic(options)` - Business-meaningful identifiers - `NehoID.sequential(options)` - Database-friendly sequences #### Context & Behavior - `NehoID.contextual(options)` - Environment-aware generation - `NehoID.fromTemporal(timestamp)` - Convert timestamp to temporal ID - `NehoID.fromTemporalToTimestamp(temporalId)` - Extract timestamp from temporal ID #### Utilities - `NehoID.migrate(options)` - Format conversion and migration - `NehoID.compatible(options)` - Cross-platform identifier generation - `NehoID.startMonitoring()` - Enable performance tracking - `NehoID.getStats()` - Retrieve generation statistics ### Classes #### EncodingPipeline Fluent API for building complex encoding workflows: ```typescript const pipeline = new EncodingPipeline() .addEncoder("base64") .addCompression("gzip") .enableReversibility(); ``` #### Checksum Multiple algorithm support for data integrity: ```typescript const crc32 = Checksum.generate(data, "crc32"); const isValid = Checksum.validate(data, crc32, "crc32"); ``` ## Security Considerations - **Cryptographic Randomness**: Configurable entropy levels for security requirements - **Timing Attack Resistance**: Consistent-time operations prevent side-channel attacks - **No Predictable Patterns**: Advanced entropy analysis prevents sequential prediction - **Optional Encryption Layer**: Pipeline-based encryption support - **Audit Trail Support**: Comprehensive generation logging and monitoring - **Input Validation**: Strict parameter validation prevents injection attacks - **Memory Safety**: Controlled memory usage prevents DoS through resource exhaustion ## Framework Integrations ### Express.js Middleware ```typescript import express from "express"; import { NehoID } from "nehoid"; const app = express(); // Request ID middleware app.use( NehoID.middleware("express", { header: "X-Request-ID", format: "short", includeTimestamp: true, }) ); // Route-specific ID generation app.post("/users", (req, res) => { const userId = NehoID.generate({ prefix: "usr", includeChecksum: true, }); // ... user creation logic }); ``` ### Database ORM Integration ```typescript // Mongoose schema const UserSchema = new mongoose.Schema({ _id: { type: String, default: () => NehoID.generate({ prefix: "usr", includeChecksum: true }), }, email: String, createdAt: { type: Date, default: Date.now }, }); // Sequelize model class Order extends Model { @NehoID.database.sequelize("Order") id: string; @Column total: number; } // TypeORM entity @Entity() export class Product { @NehoID.database.typeorm("Product") id: string; @Column() name: string; } ``` ## Configuration Types ### IdGeneratorOptions ```typescript interface IdGeneratorOptions { // Basic configuration size?: number; segments?: number; separator?: string; // Format presets format?: "uuid" | "nanoid" | "cuid" | "ksuid" | "xid" | "pushid"; // Character control charset?: { numbers?: boolean; lowercase?: boolean; uppercase?: boolean; special?: boolean; exclude?: string[]; }; // Case transformations case?: "lower" | "upper" | "mixed" | "camel" | "pascal" | "snake"; // Quality requirements quality?: { minEntropy?: "low" | "medium" | "high"; avoidPatterns?: boolean; urlSafe?: boolean; }; // Advanced features expiresIn?: number; version?: string | number; domain?: string; includeChecksum?: boolean; pattern?: string; // And more options... } ``` ## Contributing We welcome contributions from the community. Please see CONTRIBUTING.md for detailed guidelines on: - Code style and standards - Testing requirements - Documentation standards - Pull request process - Issue reporting ## License Licensed under the MIT License. See LICENSE file for complete terms. ## Support - Documentation: [Full API Reference](https://lab.nehonix.space/nehoid) - Issues: [GitHub Issues](https://github.com/iDevo-ll/nehoid/issues) - Discussions: [GitHub Discussions](https://github.com/iDevo-ll/nehoid/discussions) - Email: libnehoid.support@nehonix.space