{"_id":"@aexoo-ai/spark-id","_rev":"4-5e47bceb6ccf72e0dfecbc569df039cd","name":"@aexoo-ai/spark-id","dist-tags":{"latest":"1.1.2"},"versions":{"1.0.4":{"name":"@aexoo-ai/spark-id","version":"1.0.4","keywords":["id","generator","secure","unique","url-safe","base32","cli","cryptographic"],"author":{"name":"ÆXꝎ","email":"info@aexoo.com"},"license":"MIT","_id":"@aexoo-ai/spark-id@1.0.4","maintainers":[{"name":"aexoo-ai","email":"info@aexoo.com"}],"homepage":"https://github.com/aexoo-ai/spark-id#readme","bugs":{"url":"https://github.com/aexoo-ai/spark-id/issues"},"bin":{"spark-id":"dist/cli.js"},"dist":{"shasum":"63935a4ee5a81bb3e0b3211733d2aa00a7b4ed38","tarball":"https://registry.npmjs.org/@aexoo-ai/spark-id/-/spark-id-1.0.4.tgz","fileCount":19,"integrity":"sha512-cIUM+ofW/y5D7Bzmb4OFxDMagjpNfXSs97OasoxO1BD/ZcKBj/gI8Q8a0u5rk9bVTbJmmvcC9t21IRTWxxDyKg==","signatures":[{"sig":"MEUCID6BKgFdgFhock+RY1ZsmfWPzd2dGkGrxNG1r+MX9RW2AiEA0WfwkSlu71xNpLR4SDNo2vvevZ6sS6OODmqJOS+UCbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44360},"main":"dist/index.js","type":"module","_from":"file:aexoo-ai-spark-id-1.0.4.tgz","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write src/**/*.ts","docs:dev":"vitepress dev docs","lint:fix":"eslint src --ext .ts --fix","docs:build":"vitepress build docs","test:watch":"vitest --watch","docs:preview":"vitepress preview docs","test:coverage":"vitest --coverage"},"_npmUser":{"name":"aexoo-ai","email":"info@aexoo.com"},"_resolved":"/tmp/8776718d6b9c827d109acbedf76355ff/aexoo-ai-spark-id-1.0.4.tgz","_integrity":"sha512-cIUM+ofW/y5D7Bzmb4OFxDMagjpNfXSs97OasoxO1BD/ZcKBj/gI8Q8a0u5rk9bVTbJmmvcC9t21IRTWxxDyKg==","repository":{"url":"git+https://github.com/aexoo-ai/spark-id.git","type":"git"},"_npmVersion":"10.8.2","description":"Cryptographically secure, URL-safe ID generator with prefix support","directories":{},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.0.0","vitest":"^3.2.4","prettier":"^3.6.2","vitepress":"^1.6.4","@eslint/js":"^9.34.0","typescript":"^5.9.2","@types/node":"^24.3.0","lint-staged":"^16.1.5","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.41.0","@typescript-eslint/eslint-plugin":"^8.41.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-id_1.0.4_1756422378884_0.9928306472099304","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aexoo-ai/spark-id","version":"1.1.0","keywords":["id","generator","secure","unique","url-safe","base32","cli","cryptographic"],"author":{"name":"ÆXꝎ","email":"info@aexoo.com"},"license":"MIT","_id":"@aexoo-ai/spark-id@1.1.0","maintainers":[{"name":"aexoo-ai","email":"info@aexoo.com"}],"homepage":"https://github.com/aexoo-ai/spark-id#readme","bugs":{"url":"https://github.com/aexoo-ai/spark-id/issues"},"bin":{"spark-id":"dist/cli.js"},"dist":{"shasum":"af6d918629a7beac41cb1c928586494229b9cd99","tarball":"https://registry.npmjs.org/@aexoo-ai/spark-id/-/spark-id-1.1.0.tgz","fileCount":32,"integrity":"sha512-+XkNOLaxzphxG8QqMeevfLutbezUy/kKvtMuOE2DBOOqbatEfxrtYp3LRru+v7gRZgyEm6PY8DluIJH62shXvw==","signatures":[{"sig":"MEUCIB79/bfIB2z+TTa/HIis45kcUVvYS+pjgOn4a0pJRxn0AiEAm+yUPaE1cu/l8zdwW0c4cMWI1P7hs3x6Gbyo4jV45a0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97864},"main":"./dist/index.cjs","type":"module","_from":"file:aexoo-ai-spark-id-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./cjs":{"types":"./dist/index.d.ts","default":"./dist/index.cjs","require":"./dist/index.cjs"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js","default":"./dist/cli.js","require":"./dist/cli.cjs"},"./esm":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./spark-id":{"types":"./dist/spark-id.d.ts","import":"./dist/spark-id.js","default":"./dist/spark-id.js","require":"./dist/spark-id.cjs"}},"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest","build":"pnpm build:esm && pnpm build:cjs && pnpm build:rename","format":"prettier --write src/**/*.ts","favicon":"bash scripts/generate-favicon.sh","docs:dev":"vitepress dev docs","lint:fix":"eslint src --ext .ts --fix","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc","docs:build":"vitepress build docs","docs:check":"vitepress build docs --dry-run","test:watch":"vitest --watch","update-docs":"bash scripts/update-docs.sh","build:rename":"node scripts/rename-cjs.cjs","docs:preview":"vitepress preview docs","test:coverage":"vitest --coverage","test:integration":"node test-integration.cjs"},"_npmUser":{"name":"aexoo-ai","email":"info@aexoo.com"},"_resolved":"/tmp/6919dadd9997dc9b21cd0c39de8ef8ff/aexoo-ai-spark-id-1.1.0.tgz","_integrity":"sha512-+XkNOLaxzphxG8QqMeevfLutbezUy/kKvtMuOE2DBOOqbatEfxrtYp3LRru+v7gRZgyEm6PY8DluIJH62shXvw==","repository":{"url":"git+https://github.com/aexoo-ai/spark-id.git","type":"git"},"_npmVersion":"10.8.2","description":"Cryptographically secure, URL-safe ID generator with prefix support","directories":{},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.0.0","vitest":"^3.2.4","prettier":"^3.6.2","vitepress":"^1.6.4","@eslint/js":"^9.34.0","typescript":"^5.9.2","@types/node":"^24.3.0","lint-staged":"^16.1.5","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.41.0","@typescript-eslint/eslint-plugin":"^8.41.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-id_1.1.0_1756486497032_0.4405820254894637","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aexoo-ai/spark-id","version":"1.1.1","keywords":["id","generator","secure","unique","url-safe","base32","cli","cryptographic"],"author":{"name":"ÆXꝎ","email":"info@aexoo.com"},"license":"MIT","_id":"@aexoo-ai/spark-id@1.1.1","maintainers":[{"name":"aexoo-ai","email":"info@aexoo.com"}],"homepage":"https://github.com/aexoo-ai/spark-id#readme","bugs":{"url":"https://github.com/aexoo-ai/spark-id/issues"},"bin":{"spark-id":"dist/cli.js"},"dist":{"shasum":"039bf6f34a6d5900ebfbd0622522cba317545ff7","tarball":"https://registry.npmjs.org/@aexoo-ai/spark-id/-/spark-id-1.1.1.tgz","fileCount":32,"integrity":"sha512-oCpo3ICkOTROAGe5hHMgYaM32L8O987PcY5BAtali4Z82UG9RjX+IxSRQldzpl88eU1orILM8SrOibRPIVkcIw==","signatures":[{"sig":"MEQCIH4drTVEuRhN8dUltf+IwPI2tkUVmOme0CNy+ROwWFJkAiBBqxHrAui4wFJWDXXqER5Z/fQXhOVnhK7/bTsTOaeGHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97960},"main":"./dist/index.cjs","type":"module","_from":"file:aexoo-ai-spark-id-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./cjs":{"types":"./dist/index.d.ts","default":"./dist/index.cjs","require":"./dist/index.cjs"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js","default":"./dist/cli.js","require":"./dist/cli.cjs"},"./esm":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./spark-id":{"types":"./dist/spark-id.d.ts","import":"./dist/spark-id.js","default":"./dist/spark-id.js","require":"./dist/spark-id.cjs"}},"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest","build":"pnpm build:esm && pnpm build:cjs && pnpm build:rename","format":"prettier --write src/**/*.ts","favicon":"bash scripts/generate-favicon.sh","quality":"pnpm lint && pnpm format:check && pnpm test","docs:dev":"vitepress dev docs","lint:fix":"eslint src --ext .ts --fix","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc","docs:build":"vitepress build docs","docs:check":"vitepress build docs --dry-run","test:watch":"vitest --watch","update-docs":"bash scripts/update-docs.sh","build:rename":"node scripts/rename-cjs.cjs","docs:preview":"vitepress preview docs","format:check":"prettier --check src/**/*.ts","test:coverage":"vitest --coverage","test:integration":"node test-integration.cjs"},"_npmUser":{"name":"aexoo-ai","email":"info@aexoo.com"},"_resolved":"/tmp/266d5bf9b0cecef667ac47484a275199/aexoo-ai-spark-id-1.1.1.tgz","_integrity":"sha512-oCpo3ICkOTROAGe5hHMgYaM32L8O987PcY5BAtali4Z82UG9RjX+IxSRQldzpl88eU1orILM8SrOibRPIVkcIw==","repository":{"url":"git+https://github.com/aexoo-ai/spark-id.git","type":"git"},"_npmVersion":"10.8.2","description":"Cryptographically secure, URL-safe ID generator with prefix support","directories":{},"lint-staged":{"*.{ts,js}":["prettier --write","eslint --fix","git add"],"*.{md,json,yml,yaml}":["prettier --write","git add"]},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.0.0","vitest":"^3.2.4","prettier":"^3.6.2","vitepress":"^1.6.4","@eslint/js":"^9.34.0","typescript":"^5.9.2","@types/node":"^24.3.0","lint-staged":"^16.1.5","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.41.0","@typescript-eslint/eslint-plugin":"^8.41.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-id_1.1.1_1756487698436_0.45988515476325675","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@aexoo-ai/spark-id","version":"1.1.2","type":"module","description":"Cryptographically secure, URL-safe ID generator with prefix support","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","bin":{"spark-id":"dist/cli.cjs"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","default":"./dist/index.js"},"./spark-id":{"types":"./dist/spark-id.d.ts","import":"./dist/spark-id.js","require":"./dist/spark-id.cjs","default":"./dist/spark-id.js"},"./cjs":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","default":"./dist/index.cjs"},"./esm":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js","require":"./dist/cli.cjs","default":"./dist/cli.js"}},"keywords":["id","generator","secure","unique","url-safe","base32","cli","cryptographic"],"author":{"name":"ÆXꝎ","email":"info@aexoo.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aexoo-ai/spark-id.git"},"bugs":{"url":"https://github.com/aexoo-ai/spark-id/issues"},"homepage":"https://github.com/aexoo-ai/spark-id#readme","engines":{"node":">=16.0.0"},"lint-staged":{"*.{ts,js}":["prettier --write","eslint --fix","git add"],"*.{md,json,yml,yaml}":["prettier --write","git add"]},"devDependencies":{"@eslint/js":"^9.34.0","@types/node":"^24.3.0","@typescript-eslint/eslint-plugin":"^8.41.0","@typescript-eslint/parser":"^8.41.0","@vitest/coverage-v8":"^3.2.4","eslint":"^9.0.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","lint-staged":"^16.1.5","prettier":"^3.6.2","typescript":"^5.9.2","vitepress":"^1.6.4","vitest":"^3.2.4"},"scripts":{"build":"pnpm build:esm && pnpm build:cjs && pnpm build:rename","build:esm":"tsc","build:cjs":"tsc --project tsconfig.cjs.json","build:rename":"node scripts/rename-cjs.cjs","dev":"tsc --watch","test":"vitest","test:coverage":"vitest --coverage","test:watch":"vitest --watch","test:integration":"cd tests/integration && node test-integration.cjs","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","format":"prettier --write src/**/*.ts","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","docs:check":"vitepress build docs --dry-run","update-docs":"bash scripts/update-docs.sh","favicon":"bash scripts/generate-favicon.sh","format:check":"prettier --check src/**/*.ts","quality":"pnpm lint && pnpm format:check && pnpm test","spark-id":"node dist/cli.cjs","test:cli":"bash scripts/test-cli.sh"},"_id":"@aexoo-ai/spark-id@1.1.2","_integrity":"sha512-6Sqjj6YMKD6uNzDtA1kKHz+a6ATYG84PgXfZRMs6jO3r8kVHaXAJy77speNCjcXeN5CUR2JMeGaaJtqiLTP+Zw==","_resolved":"/tmp/499f17ab6e61c770fd666ccab8477be2/aexoo-ai-spark-id-1.1.2.tgz","_from":"file:aexoo-ai-spark-id-1.1.2.tgz","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-6Sqjj6YMKD6uNzDtA1kKHz+a6ATYG84PgXfZRMs6jO3r8kVHaXAJy77speNCjcXeN5CUR2JMeGaaJtqiLTP+Zw==","shasum":"16781f1e667e8f0211f1761c53bc122890c742bb","tarball":"https://registry.npmjs.org/@aexoo-ai/spark-id/-/spark-id-1.1.2.tgz","fileCount":32,"unpackedSize":98835,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGp91GHaH5yKPw9OrHTjnQ/baLjJhsdUaCKDfEg4yvtdAiBA46w6HGULP8ldegEfHiJiLSXaVQeiPvBtx+7t601d+g=="}]},"_npmUser":{"name":"aexoo-ai","email":"info@aexoo.com"},"directories":{},"maintainers":[{"name":"aexoo-ai","email":"info@aexoo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spark-id_1.1.2_1756663144202_0.9103091434100801"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-28T23:06:18.788Z","modified":"2025-08-31T17:59:04.567Z","1.0.4":"2025-08-28T23:06:19.116Z","1.1.0":"2025-08-29T16:54:57.223Z","1.1.1":"2025-08-29T17:14:58.633Z","1.1.2":"2025-08-31T17:59:04.408Z"},"bugs":{"url":"https://github.com/aexoo-ai/spark-id/issues"},"author":{"name":"ÆXꝎ","email":"info@aexoo.com"},"license":"MIT","homepage":"https://github.com/aexoo-ai/spark-id#readme","keywords":["id","generator","secure","unique","url-safe","base32","cli","cryptographic"],"repository":{"type":"git","url":"git+https://github.com/aexoo-ai/spark-id.git"},"description":"Cryptographically secure, URL-safe ID generator with prefix support","maintainers":[{"name":"aexoo-ai","email":"info@aexoo.com"}],"readme":"# Spark-ID 🔥\n\n[![npm version](https://img.shields.io/npm/v/@aexoo-ai/spark-id.svg)](https://www.npmjs.com/package/@aexoo-ai/spark-id)\n[![npm downloads](https://img.shields.io/npm/dm/@aexoo-ai/spark-id.svg)](https://www.npmjs.com/package/@aexoo-ai/spark-id)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n\n**Cryptographically secure, URL-safe ID generator with prefix support**\n\nSpark-ID generates cryptographically secure, URL-safe identifiers that are perfect for databases, APIs, and distributed systems. Built with TypeScript and optimized for performance.\n\n## ✨ Features\n\n- 🔐 **Cryptographically Secure** - Uses Node.js crypto for true randomness\n- 🌐 **URL-Safe** - Z-Base32 encoding, no special characters\n- 🏷️ **Prefix Support** - Add meaningful prefixes like `USER_`, `TXN_`, `ORDER_`\n- ⚡ **High Performance** - Optimized for speed and memory efficiency\n- 🛡️ **TypeScript First** - Full type safety and IntelliSense support\n- 🔧 **CLI Tool** - Generate IDs from command line\n- 📦 **Zero Dependencies** - Lightweight and secure\n- 🧪 **Well Tested** - Comprehensive test suite\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\nnpm install @aexoo-ai/spark-id\n```\n\n### Multiple Import Options\n\n```typescript\n// ESM (recommended)\nimport { generateId, sparkId, isValidId, parseId } from '@aexoo-ai/spark-id';\n\n// CommonJS\nconst {\n  generateId,\n  sparkId,\n  isValidId,\n  parseId,\n} = require('@aexoo-ai/spark-id');\n\n// Specific entry points\nimport { generateId } from '@aexoo-ai/spark-id/esm';\nconst { generateId } = require('@aexoo-ai/spark-id/cjs');\n\n// Spark-ID specific entry point\nimport { sparkId } from '@aexoo-ai/spark-id/spark-id';\n```\n\n### Basic Usage\n\n```typescript\nimport { generateId, sparkId, isValidId, parseId } from '@aexoo-ai/spark-id';\n\n// Generate a simple ID\nconst id = generateId();\nconsole.log(id); // \"YBNDRFG8EJKMCPQXOT1UWISZA345H769\"\n\n// Alternative function name\nconst id2 = sparkId();\nconsole.log(id2); // \"YBNDRFG8EJKMCPQXOT1UWISZA345H769\"\n\n// Generate with prefix\nconst userId = generateId('USER');\nconsole.log(userId); // \"USER_YBNDRFG8EJKMCPQXOT1UWISZA345H769\"\n\n// Validate an ID\nconsole.log(isValidId(userId)); // true\n\n// Parse an ID\nconst parsed = parseId(userId);\nconsole.log(parsed.prefix); // \"USER\"\nconsole.log(parsed.id); // \"YBNDRFG8EJKMCPQXOT1UWISZA345H769\"\n```\n\n### CLI Usage\n\nThe package includes a command-line interface for generating and validating IDs:\n\n```bash\n# Using npx (recommended)\nnpx @aexoo-ai/spark-id                    # Simple ID\nnpx @aexoo-ai/spark-id -p USER           # With prefix\nnpx @aexoo-ai/spark-id -c 5              # Multiple IDs\nnpx @aexoo-ai/spark-id -v USER_123       # Validate ID\n\n# Install globally\nnpm install -g @aexoo-ai/spark-id\nspark-id -p TXN -c 3 -f json             # JSON output\n\n# In pnpm workspaces\npnpm spark-id                             # Using workspace script\n```\n\n**CLI Options:**\n\n- `-p, --prefix <prefix>` - Add prefix to generated IDs\n- `-c, --count <number>` - Generate multiple IDs\n- `-v, --validate <id>` - Validate if an ID is properly formatted\n- `--parse <id>` - Parse an ID and show its components\n- `-f, --format <format>` - Output format: json, text, csv\n- `-e, --examples` - Show usage examples\n- `-h, --help` - Show help message\n\nFor detailed CLI documentation, see [CLI_USAGE.md](./CLI_USAGE.md).\n\n## 📖 Documentation\n\n- **[Getting Started](https://aexoo-ai.github.io/spark-id/guide/getting-started)** - Quick setup guide\n- **[API Reference](https://aexoo-ai.github.io/spark-id/api/)** - Complete API documentation\n- **[Examples](https://aexoo-ai.github.io/spark-id/examples/)** - Real-world usage patterns\n- **[CLI Guide](https://aexoo-ai.github.io/spark-id/cli/)** - Command-line interface\n- **[Security](https://aexoo-ai.github.io/spark-id/guide/security)** - Security considerations\n\n## 🎯 Use Cases\n\n### Database Primary Keys\n\n```typescript\nimport { generateId } from '@aexoo-ai/spark-id';\n\n// Create user with secure ID\nconst user = {\n  id: generateId('USER'),\n  name: 'John Doe',\n  email: 'john@example.com',\n};\n\n// Create transaction\nconst transaction = {\n  id: generateId('TXN'),\n  userId: user.id,\n  amount: 100.5,\n  status: 'completed',\n};\n```\n\n### Enhanced Features\n\n```typescript\nimport {\n  generateId,\n  generateIdSafe,\n  validateId,\n  generateMultiple,\n  generateUnique,\n  SecureId,\n} from '@aexoo-ai/spark-id';\n\n// Safe generation with error handling\nconst result = generateIdSafe('USER');\nif (result.success) {\n  console.log('Generated ID:', result.id);\n} else {\n  console.error('Error:', result.error);\n}\n\n// Detailed validation\nconst validation = validateId('USER_123456789');\nconsole.log(validation);\n// { isValid: false, error: 'Invalid ID format', code: 'INVALID_FORMAT' }\n\n// Generate multiple IDs\nconst ids = generateMultiple(5, 'BATCH');\nconsole.log(ids); // Array of 5 IDs\n\n// Generate unique IDs\nconst uniqueIds = generateUnique(10, 'UNIQUE');\nconsole.log(uniqueIds); // Set of 10 unique IDs\n\n// Using the SecureId class\nconst secureId = new SecureId(undefined, 'CLASS');\nconsole.log(secureId.toString()); // \"CLASS_...\"\nconsole.log(secureId.getStats()); // Statistics about the ID\nconsole.log(secureId.validate()); // Validation result\n```\n\n### Configuration System\n\n```typescript\nimport {\n  generateId,\n  configure,\n  getConfig,\n  resetConfig,\n} from '@aexoo-ai/spark-id';\n\n// Global configuration\nconfigure({\n  maxPrefixLength: 10,\n  separator: '-',\n  case: 'lower',\n  entropyBits: 48,\n});\n\n// Generate with global config\nconst id1 = generateId('USER'); // \"user-abc123\"\n\n// Per-call configuration (overrides global)\nconst id2 = generateId('TEST', {\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  entropyBits: 32,\n  separator: '=',\n  case: 'upper',\n}); // \"TEST=ABC123\"\n\n// Get current configuration\nconsole.log(getConfig());\n\n// Reset to defaults\nresetConfig();\n```\n\n#### Configuration Options\n\n| Option            | Type                                        | Default                              | Description                                   |\n| ----------------- | ------------------------------------------- | ------------------------------------ | --------------------------------------------- |\n| `alphabet`        | `string`                                    | `'yvndrfg9ejkmcpqxwt2uwxsza345h769'` | Character set for encoding (must be 32 chars) |\n| `entropyBits`     | `number`                                    | `72`                                 | Security level in bits (9 bytes)              |\n| `maxPrefixLength` | `number`                                    | `20`                                 | Maximum prefix length                         |\n| `separator`       | `string`                                    | `'_'`                                | Prefix separator character                    |\n| `case`            | `'upper' \\| 'lower' \\| 'mixed'`             | `'upper'`                            | Output case formatting                        |\n| `encoding`        | `'base32' \\| 'base64' \\| 'hex' \\| 'custom'` | `'base32'`                           | Encoding method                               |\n| `timestamp`       | `boolean`                                   | `false`                              | Include timestamp component                   |\n| `machineId`       | `string \\| number`                          | `undefined`                          | Machine/instance identifier                   |\n\n### Error Handling\n\n```typescript\nimport {\n  generateId,\n  SparkIdError,\n  InvalidPrefixError,\n  InvalidIdError,\n} from '@aexoo-ai/spark-id';\n\ntry {\n  const id = generateId('invalid-prefix!');\n} catch (error) {\n  if (error instanceof InvalidPrefixError) {\n    console.error('Invalid prefix:', error.message);\n    console.error('Error code:', error.code); // 'INVALID_PREFIX'\n  }\n}\n\ntry {\n  const parsed = parseId('invalid-id!');\n} catch (error) {\n  if (error instanceof InvalidIdError) {\n    console.error('Invalid ID:', error.message);\n    console.error('Error code:', error.code); // 'INVALID_ID'\n  }\n}\n```\n\n### API Endpoints\n\n```typescript\nimport { generateId, isValidId } from '@aexoo-ai/spark-id';\n\n// Express.js route\napp.post('/users', (req, res) => {\n  const userId = generateId('USER');\n  const user = { id: userId, ...req.body };\n  res.status(201).json(user);\n});\n\n// Validation middleware\napp.get('/users/:id', (req, res) => {\n  if (!isValidId(req.params.id)) {\n    return res.status(400).json({ error: 'Invalid ID format' });\n  }\n  // Process request...\n});\n```\n\n### Bulk Operations\n\n```typescript\nimport { generateId } from '@aexoo-ai/spark-id';\n\n// Generate multiple IDs efficiently\nconst userIds = Array.from({ length: 1000 }, () => generateId('USER'));\nconst txnIds = Array.from({ length: 500 }, () => generateId('TXN'));\n\n// All IDs are unique and secure\nconsole.log(new Set(userIds).size); // 1000 (no duplicates)\n```\n\n## 🔧 API Reference\n\n### Core Functions\n\n| Function              | Description              | Example                 |\n| --------------------- | ------------------------ | ----------------------- |\n| `generateId(prefix?)` | Generate a new ID        | `generateId('USER')`    |\n| `isValidId(id)`       | Validate ID format       | `isValidId('USER_123')` |\n| `parseId(id)`         | Parse ID components      | `parseId('USER_123')`   |\n| `createId(prefix?)`   | Create SecureId instance | `createId('TXN')`       |\n\n### SecureId Class\n\n```typescript\nimport { SecureId } from '@aexoo-ai/spark-id';\n\nconst secureId = new SecureId(undefined, 'USER');\nconsole.log(secureId.id); // \"YBNDRFG8EJKMCPQXOT1UWISZA345H769\"\nconsole.log(secureId.prefix); // \"USER\"\nconsole.log(secureId.full); // \"USER_YBNDRFG8EJKMCPQXOT1UWISZA345H769\"\n\n// Compare IDs\nconst id1 = new SecureId('abc123');\nconst id2 = new SecureId('abc123');\nconsole.log(id1.equals(id2)); // true\n```\n\n## 🛠️ CLI Commands\n\n```bash\n# Generate IDs\nspark-id                    # Simple ID\nspark-id -p USER           # With prefix\nspark-id -c 5              # Multiple IDs\nspark-id --json            # JSON output\nspark-id --compact         # Comma-separated\n\n# Validation\nspark-id -v USER_123       # Validate single ID\nspark-id --parse USER_123  # Parse ID components\n\n# Help\nspark-id --help            # Show all options\nspark-id --version         # Show version\n```\n\n## 🔒 Security Features\n\n- **Cryptographic Randomness** - Uses Node.js `crypto.randomBytes()`\n- **Collision Resistant** - 128-bit entropy (2^128 possible values)\n- **No Sequential Patterns** - Each ID is completely random\n- **URL-Safe Encoding** - Z-Base32 alphabet, no special characters\n- **Prefix Validation** - Ensures safe prefix characters\n\n## 📊 Performance\n\n```typescript\n// Generate 10,000 IDs in ~15ms\nconst start = Date.now();\nconst ids = Array.from({ length: 10000 }, () => generateId());\nconst end = Date.now();\nconsole.log(`Generated ${ids.length} IDs in ${end - start}ms`);\n\n// Validate 100,000 IDs in ~8ms\nconst testIds = Array.from({ length: 100000 }, () => generateId('TEST'));\nconst start = Date.now();\nconst results = testIds.map(isValidId);\nconst end = Date.now();\nconsole.log(`Validated ${testIds.length} IDs in ${end - start}ms`);\n```\n\n## 🧪 Testing\n\n```bash\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Run tests in watch mode\nnpm run test:watch\n```\n\n## 📦 Installation Options\n\n### npm\n\n```bash\nnpm install @aexoo-ai/spark-id\n```\n\n### pnpm\n\n```bash\npnpm add @aexoo-ai/spark-id\n```\n\n### yarn\n\n```bash\nyarn add @aexoo-ai/spark-id\n```\n\n### Global CLI\n\n```bash\nnpm install -g @aexoo-ai/spark-id\n```\n\n### Using npx (no installation)\n\n```bash\nnpx @aexoo-ai/spark-id\n```\n\n## 🌐 Browser Support\n\nFor browser usage, you'll need to polyfill the Node.js crypto module:\n\n### Webpack\n\n```javascript\nmodule.exports = {\n  resolve: {\n    fallback: {\n      crypto: require.resolve('crypto-browserify'),\n    },\n  },\n};\n```\n\n### Vite\n\n```javascript\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  define: {\n    global: 'globalThis',\n  },\n  resolve: {\n    alias: {\n      crypto: 'crypto-browserify',\n    },\n  },\n});\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/aexoo-ai/spark-id.git\ncd spark-id\n\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build the project\nnpm run build\n\n# Start documentation\nnpm run docs:dev\n```\n\n### Publishing\n\nFor information on how to publish new versions to npm, see [PUBLISHING.md](internal/development/publishing-guide.md).\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Inspired by [nanoid](https://github.com/ai/nanoid) and [ulid](https://github.com/ulid/spec)\n- Z-Base32 encoding for URL-safe characters\n- Node.js crypto module for secure randomness\n- Meets AEXOO requirements\n\n## 📞 Support\n\n- 📖 [Documentation](https://aexoo-ai.github.io/spark-id/)\n- 🐛 [Issue Tracker](https://github.com/aexoo-ai/spark-id/issues)\n- 💬 [Discussions](https://github.com/aexoo-ai/spark-id/discussions)\n- 📧 [Email](mailto:info@aexoo.com)\n\n---\n\n**Made with ❤️ by [ÆXꝎ](https://aexoo.com)**\n","readmeFilename":"README.md"}