{"id":35118591,"url":"https://github.com/git-zodyac/illuma","last_synced_at":"2025-12-30T08:01:49.718Z","repository":{"id":325679880,"uuid":"1102029058","full_name":"git-zodyac/illuma","owner":"git-zodyac","description":"Modern Angular-style Dependency Injection for anything","archived":false,"fork":false,"pushed_at":"2025-12-28T17:46:08.000Z","size":309,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-29T21:36:07.196Z","etag":null,"topics":["angular","containers","dependency-injection","di","electron","inverse-of-control","nodejs"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/git-zodyac.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-22T17:28:29.000Z","updated_at":"2025-12-28T17:46:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/git-zodyac/illuma","commit_stats":null,"previous_names":["git-zodyac/illuma"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/git-zodyac/illuma","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/git-zodyac%2Filluma","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/git-zodyac%2Filluma/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/git-zodyac%2Filluma/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/git-zodyac%2Filluma/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/git-zodyac","download_url":"https://codeload.github.com/git-zodyac/illuma/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/git-zodyac%2Filluma/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28124749,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-30T02:00:05.476Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","containers","dependency-injection","di","electron","inverse-of-control","nodejs"],"created_at":"2025-12-27T22:53:24.187Z","updated_at":"2025-12-30T08:01:49.710Z","avatar_url":"https://github.com/git-zodyac.png","language":"TypeScript","readme":"# 🔥 Illuma – Angular-style Dependency Injection for TypeScript\n\n![NPM Version](https://img.shields.io/npm/v/%40zodyac%2Filluma)\n![NPM Downloads](https://img.shields.io/npm/dw/%40zodyac%2Filluma)\n![npm bundle size](https://img.shields.io/bundlephobia/min/%40zodyac%2Filluma)\n![Test coverage](./badges/coverage.svg)\n\nA lightweight, type-safe dependency injection container for TypeScript. Zero dependencies.\n\n\u003e [!NOTE]\n\u003e This package is in early development. Expect API changes in minor versions.\n\u003e Planned stable release: v2.0.0\n\n## ✨ Features\n\n- 🎯 **Type-Safe** – Full TypeScript support with excellent type inference\n- 🪶 **Lightweight** – Zero dependencies, minimal bundle size\n- 🔄 **Flexible** – Classes, factories, values, and aliases\n- 🎨 **Decorators** – Optional Angular-style `@NodeInjectable()` decorator\n- 🔗 **Multi-Tokens** – Built-in multi-provider support\n- 🔌 **Plugin System** – Extensible architecture with custom scanners and diagnostics\n- 🌍 **Universal** – Node.js, Deno, browser, and Electron\n\n## 📦 Installation\n\n```bash\nnpm install @zodyac/illuma\n```\n\n## 🚀 Quick Start\n\n```typescript\nimport { NodeContainer, NodeInjectable, nodeInject } from '@zodyac/illuma';\n\n@NodeInjectable()\nclass Logger {\n  public log(message: string) {\n    console.log(`[LOG]: ${message}`);\n  }\n}\n\n@NodeInjectable()\nclass UserService {\n  private readonly logger = nodeInject(Logger);\n\n  public getUser(id: string) {\n    this.logger.log(`Fetching user ${id}`);\n    return { id, name: 'John Doe' };\n  }\n}\n\nconst container = new NodeContainer();\ncontainer.provide([Logger, UserService]);\ncontainer.bootstrap();\n\nconst userService = container.get(UserService);\n```\n\n\u003e **Note:** Requires `experimentalDecorators` and `emitDecoratorMetadata` in tsconfig. See [Getting Started](./docs/GETTING_STARTED.md) for decorator-free alternatives.\n\n## 🏷️ Using Tokens\n\n```typescript\nimport { NodeToken, MultiNodeToken, NodeContainer } from '@zodyac/illuma';\n\n// Single-value token\nconst CONFIG = new NodeToken\u003c{ apiUrl: string }\u003e('CONFIG');\n\n// Multi-value token (when injected, returns array)\nconst PLUGINS = new MultiNodeToken\u003cPlugin\u003e('PLUGINS');\n\nconst container = new NodeContainer();\n\ncontainer.provide([\n  // Equivalent to:\n  // { provide: CONFIG, value: { apiUrl: 'https://api.example.com' } }\n  CONFIG.withValue({ apiUrl: 'https://api.example.com' }),\n\n  // Equivalent to:\n  // { provide: PLUGINS, useClass: AnalyticsPlugin }\n  PLUGINS.withClass(AnalyticsPlugin),\n\n  // Equivalent to:\n  // { provide: PLUGINS, useClass: LoggingPlugin }\n  PLUGINS.withClass(LoggingPlugin),\n]);\n\ncontainer.bootstrap();\n\nconst config = container.get(CONFIG);    // { apiUrl: string }\nconst plugins = container.get(PLUGINS);  // Plugin[]: [AnalyticsPlugin, LoggingPlugin]\n```\n\nSee [Tokens Guide](./docs/TOKENS.md) for more details.\n\n## 🎨 Provider Types\n\n```typescript\n// Class provider\ncontainer.provide(MyService);\n\n// Value provider\ncontainer.provide({ provide: CONFIG, value: { apiUrl: '...' } });\n\n// Factory provider\ncontainer.provide({ provide: DATABASE, factory: () =\u003e {\n  const env = nodeInject(ENV);\n  return createDatabase(env.connectionString);\n} });\n\n// Class provider with custom implementation\ncontainer.provide({ provide: DATABASE, useClass: DatabaseImplementation });\n\n// Alias provider\ncontainer.provide({ provide: Database, alias: ExistingDatabase });\n```\n\nSee [Providers Guide](./docs/PROVIDERS.md) for details.\n\n## 🧪 Testing\n\n```typescript\nimport { createTestFactory } from '@zodyac/illuma/testkit';\n\nconst createTest = createTestFactory({\n  target: UserService,\n  provide: [{ provide: Logger, useClass: MockLogger }],\n});\n\nit('should fetch user', () =\u003e {\n  const { instance } = createTest();\n  expect(instance.getUser('123')).toBeDefined();\n});\n```\n\nSee [Testing Guide](./docs/TESTKIT.md) for comprehensive examples.\n\n## 📚 Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Getting Started](./docs/GETTING_STARTED.md) | Installation, setup, and basic usage |\n| [Providers](./docs/PROVIDERS.md) | Value, factory, class, and alias providers |\n| [Tokens](./docs/TOKENS.md) | NodeToken and MultiNodeToken |\n| [Async Injection](./docs/ASYNC_INJECTION.md) | Lazy loading and sub-containers |\n| [Testing](./docs/TESTKIT.md) | Testkit and mocking |\n| [Plugins](./docs/PLUGINS.md) | Extending Illuma with custom scanners and diagnostics |\n| [Technical Overview](./docs/TECHNICAL_OVERVIEW.md) | Deep dive into how Illuma works |\n| [API Reference](./docs/API.md) | Complete API documentation |\n| [Troubleshooting](./docs/TROUBLESHOOTING.md) | Error codes and solutions |\n\n## 🔌 Plugins\n\nIlluma supports a plugin system for extending functionality. Check out these plugins:\n\n- **[illuma-reflect](https://github.com/git-zodyac/illuma-reflect)** – Constructor metadata and property decorator injection support\n\nSee [Plugins Guide](./docs/PLUGINS.md) for creating your own plugins.\n\n## 📄 License\n\nMIT © [bebrasmell](https://github.com/git-zodyac)\n\n## 🔗 Links\n\n- [GitHub](https://github.com/git-zodyac/illuma)\n- [NPM](https://www.npmjs.com/package/@zodyac/illuma)\n- [Issues](https://github.com/git-zodyac/illuma/issues)\n","funding_links":[],"categories":["Angular-Inspired Solutions"],"sub_categories":["Wrappers"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgit-zodyac%2Filluma","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgit-zodyac%2Filluma","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgit-zodyac%2Filluma/lists"}