{"_id":"@dbs-portal/core-module-registry","name":"@dbs-portal/core-module-registry","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@dbs-portal/core-module-registry","version":"1.0.0","description":"Core module registry system for automatic module discovery and registration","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc && vite build","dev":"tsc --watch","type-check":"tsc --noEmit","lint":"biome lint src","format":"biome format src --write","test":"vitest","test:ui":"vitest --ui","test:coverage":"vitest --coverage","clean":"rimraf dist"},"dependencies":{"@dbs-portal/core-shared":"1.0.0","zod":"^3.22.0","lodash-es":"^4.17.21","glob":"^10.3.10"},"devDependencies":{"@types/lodash-es":"^4.17.0","@types/glob":"^8.1.0","typescript":"^5.0.0","vite":"^5.0.0","vitest":"^1.0.0","eslint":"^8.0.0","rimraf":"^5.0.0"},"keywords":["dbs-portal","module-registry","module-discovery","automatic-registration","framework","typescript"],"author":{"name":"DBS Portal Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/devboost-solutions/dbs-portal.git","directory":"packages/core/module-registry"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bugs":{"url":"https://github.com/your-org/dbs-portal/issues"},"homepage":"https://github.com/your-org/dbs-portal#readme","_id":"@dbs-portal/core-module-registry@1.0.0","gitHead":"61a23904a481b624f3e8ed7abb6c944ecfeaca7b","_nodeVersion":"20.19.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-q3/0H22CQqxg2sfe8jxbq79eR+y0DNhlYvtLweugiFq8RtmFbhJnSqQb067zREbd6p8nwYcExUAv2JPEZVACjg==","shasum":"47d6530aa4303e010e626de736219d31c8d0e8b3","tarball":"https://registry.npmjs.org/@dbs-portal/core-module-registry/-/core-module-registry-1.0.0.tgz","fileCount":70,"unpackedSize":581162,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDUEFEfwSi3BvU0YbYaJ56JWayMEoDa3EXLa0mQuKmSWAiEA9GNSmwjCSukxIuWNOZ+QIYQhXWeZccu2Eb7V4EhhDCQ="}]},"_npmUser":{"name":"longvq","email":"vqlong1604@gmail.com"},"directories":{},"maintainers":[{"name":"longvq","email":"vqlong1604@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core-module-registry_1.0.0_1754218655263_0.6864186631118478"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-03T10:57:35.164Z","1.0.0":"2025-08-03T10:57:35.439Z","modified":"2025-08-03T10:57:35.757Z"},"maintainers":[{"name":"longvq","email":"vqlong1604@gmail.com"}],"description":"Core module registry system for automatic module discovery and registration","homepage":"https://github.com/your-org/dbs-portal#readme","keywords":["dbs-portal","module-registry","module-discovery","automatic-registration","framework","typescript"],"repository":{"type":"git","url":"git+https://github.com/devboost-solutions/dbs-portal.git","directory":"packages/core/module-registry"},"author":{"name":"DBS Portal Team"},"bugs":{"url":"https://github.com/your-org/dbs-portal/issues"},"license":"MIT","readme":"# @dbs-portal/core-module-registry\n\nCore module registry system for automatic module discovery and registration in the DBS Portal framework.\n\n## Features\n\n- 🔍 **Automatic Module Discovery** - Discovers modules from packages, configs, and runtime registration\n- 📝 **Module Metadata Management** - Complete module metadata schema with validation\n- ⚡ **High-Performance Caching** - Built-in caching system with TTL and memory management\n- 🎯 **Event-Driven Architecture** - Real-time notifications for module changes\n- 🔒 **Permission Integration** - Built-in permission and role-based filtering\n- 📊 **Statistics & Monitoring** - Comprehensive stats and performance monitoring\n- 🛡️ **TypeScript-First** - Full TypeScript support with strict typing\n- 🌐 **Universal Compatibility** - Works in both browser and Node.js environments\n\n## Installation\n\n```bash\nyarn add @dbs-portal/core-module-registry\n```\n\n## Quick Start\n\n```typescript\nimport { ModuleRegistry } from '@dbs-portal/core-module-registry'\n\n// Initialize registry\nconst registry = ModuleRegistry.getInstance()\nawait registry.initialize()\n\n// Get all active modules\nconst modules = registry.getActiveModules()\nconsole.log(`Found ${modules.length} active modules`)\n\n// Register a new module\nawait registry.registerModule({\n  id: 'my-module',\n  name: 'My Module',\n  version: '1.0.0',\n  description: 'A sample module',\n  category: 'business',\n  icon: 'AppstoreOutlined',\n  permissions: ['MyModule.View'],\n  routes: [{\n    path: '/my-module',\n    component: 'MyModulePage'\n  }],\n  navigation: [{\n    key: '/my-module',\n    label: 'My Module',\n    icon: 'AppstoreOutlined',\n    path: '/my-module',\n    category: 'business',\n    order: 1\n  }],\n  dependencies: [],\n  status: 'active',\n  priority: 100,\n  author: 'Your Name',\n  license: 'MIT'\n})\n```\n\n## Module Configuration\n\nCreate a `module.config.ts` file in your module directory:\n\n```typescript\nimport { ModuleMetadata, ModuleCategory } from '@dbs-portal/core-module-registry'\n\nexport const moduleConfig: ModuleMetadata = {\n  id: 'file-management',\n  name: 'File Management',\n  version: '1.0.0',\n  description: 'Comprehensive file management system',\n  category: ModuleCategory.CONTENT,\n  icon: 'FileOutlined',\n  permissions: ['FileManagement.View', 'FileManagement.Upload'],\n  routes: [\n    {\n      path: '/files',\n      component: 'FileManagementPage',\n      permissions: ['FileManagement.View']\n    }\n  ],\n  navigation: [\n    {\n      key: '/files',\n      label: 'File Management',\n      icon: 'FileOutlined',\n      path: '/files',\n      category: 'content',\n      order: 1\n    }\n  ],\n  dependencies: ['@dbs-portal/core-ui'],\n  status: 'active',\n  priority: 100,\n  author: 'DBS Portal Team',\n  license: 'MIT'\n}\n```\n\n## API Reference\n\n### ModuleRegistry\n\nThe main registry class for managing modules.\n\n#### Methods\n\n- `getInstance(options?)` - Get singleton instance\n- `initialize()` - Initialize with automatic discovery\n- `registerModule(metadata, source?)` - Register a module\n- `unregisterModule(moduleId)` - Unregister a module\n- `getModule(moduleId)` - Get specific module\n- `getAllModules()` - Get all modules\n- `getActiveModules()` - Get active modules only\n- `getModulesByCategory(category)` - Get modules by category\n- `searchModules(query)` - Search modules\n- `addListener(listener)` - Add event listener\n\n#### Events\n\n```typescript\ninterface RegistryListener {\n  onModuleRegistered?(module: ModuleMetadata): void\n  onModuleUnregistered?(module: ModuleMetadata): void\n  onModuleUpdated?(module: ModuleMetadata): void\n  onRegistryInitialized?(modules: ModuleMetadata[]): void\n  onRegistryError?(error: Error, moduleId?: string): void\n}\n```\n\n### ModuleDiscoveryService\n\nService for discovering modules from various sources.\n\n#### Discovery Strategies\n\n1. **Package Scanning** - Scans for `@dbs-portal/module-*` packages\n2. **Config Detection** - Finds `module.config.ts` files\n3. **Runtime Registration** - Allows manual registration\n\n#### Options\n\n```typescript\ninterface DiscoveryOptions {\n  packageScanPaths?: string[]\n  configScanPaths?: string[]\n  packageNamePattern?: string\n  configFilePattern?: string\n  enablePackageScanning?: boolean\n  enableConfigDetection?: boolean\n  enableRuntimeRegistration?: boolean\n  validateModules?: boolean\n  ignorePatterns?: string[]\n}\n```\n\n### Module Metadata Schema\n\nComplete module configuration schema:\n\n```typescript\ninterface ModuleMetadata {\n  // Core identification\n  id: string\n  name: string\n  version: string\n  description: string\n\n  // Categorization\n  category: ModuleCategory\n  tags: string[]\n\n  // Visual configuration\n  icon: string\n  color?: string\n\n  // Security\n  permissions: string[]\n  roles?: string[]\n\n  // Routing\n  routes: ModuleRoute[]\n  \n  // Navigation\n  navigation: NavigationItem[]\n\n  // Dependencies\n  dependencies: string[]\n\n  // Status and metadata\n  status: ModuleStatus\n  priority: number\n  author: string\n  license: string\n\n  // Optional features\n  features?: Record<string, boolean>\n  config?: Record<string, any>\n}\n```\n\n## Advanced Usage\n\n### Custom Discovery\n\n```typescript\nimport { ModuleDiscoveryService } from '@dbs-portal/core-module-registry'\n\nconst discovery = new ModuleDiscoveryService({\n  packageScanPaths: ['custom/modules/*'],\n  configFilePattern: 'my-module.config.ts',\n  validateModules: true\n})\n\nconst modules = await discovery.discoverModules()\n```\n\n### Permission Filtering\n\n```typescript\nimport { filterModulesByPermissions } from '@dbs-portal/core-module-registry'\n\nconst userPermissions = ['FileManagement.View', 'Chat.View']\nconst accessibleModules = filterModulesByPermissions(modules, userPermissions)\n```\n\n### Caching\n\n```typescript\nimport { ModuleCache } from '@dbs-portal/core-module-registry'\n\nconst cache = new ModuleCache(10 * 60 * 1000) // 10 minutes TTL\ncache.set('my-key', { data: 'value' })\nconst value = cache.get('my-key')\n```\n\n### Performance Monitoring\n\n```typescript\nimport { measurePerformance } from '@dbs-portal/core-module-registry'\n\nconst { result, duration } = await measurePerformance(\n  () => registry.discoverModules(),\n  'Module Discovery'\n)\n```\n\n## Integration with DBS Portal\n\n### Router Integration\n\n```typescript\n// src/routes/dynamic.routes.ts\nimport { ModuleRegistry } from '@dbs-portal/core-module-registry'\n\nexport const createDynamicRoutes = async () => {\n  const registry = ModuleRegistry.getInstance()\n  const modules = registry.getActiveModules()\n  \n  return modules.flatMap(module => \n    module.routes.map(route => ({\n      path: route.path,\n      component: lazy(() => import(route.component))\n    }))\n  )\n}\n```\n\n### Navigation Integration\n\n```typescript\n// src/components/navigation/DynamicNavigation.tsx\nimport { ModuleRegistry, groupModulesByCategory } from '@dbs-portal/core-module-registry'\n\nexport const DynamicNavigation = () => {\n  const registry = ModuleRegistry.getInstance()\n  const modules = registry.getActiveModules()\n  const groupedModules = groupModulesByCategory(modules)\n  \n  return (\n    <Menu>\n      {Object.entries(groupedModules).map(([category, categoryModules]) => (\n        <SubMenu key={category} title={category}>\n          {categoryModules.flatMap(module => \n            module.navigation.map(nav => (\n              <Menu.Item key={nav.key} icon={nav.icon}>\n                {nav.label}\n              </Menu.Item>\n            ))\n          )}\n        </SubMenu>\n      ))}\n    </Menu>\n  )\n}\n```\n\n## Development\n\n```bash\n# Install dependencies\nyarn install\n\n# Build the package\nyarn build\n\n# Run tests\nyarn test\n\n# Type checking\nyarn type-check\n\n# Linting\nyarn lint\n```\n\n## License\n\nMIT © DBS Portal Team\n","readmeFilename":"README.md","_rev":"1-1b1beacc444899ef1a730240858039f1"}