@venizia/ignis-docs 0.0.1-1
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/mcp-server/dist/common/config.d.ts +27 -0
- package/mcp-server/dist/common/config.d.ts.map +1 -0
- package/mcp-server/dist/common/config.js +27 -0
- package/mcp-server/dist/common/config.js.map +1 -0
- package/mcp-server/dist/common/index.d.ts +3 -0
- package/mcp-server/dist/common/index.d.ts.map +1 -0
- package/mcp-server/dist/common/index.js +19 -0
- package/mcp-server/dist/common/index.js.map +1 -0
- package/mcp-server/dist/common/paths.d.ts +13 -0
- package/mcp-server/dist/common/paths.d.ts.map +1 -0
- package/mcp-server/dist/common/paths.js +23 -0
- package/mcp-server/dist/common/paths.js.map +1 -0
- package/mcp-server/dist/helpers/docs.helper.d.ts +81 -0
- package/mcp-server/dist/helpers/docs.helper.d.ts.map +1 -0
- package/mcp-server/dist/helpers/docs.helper.js +171 -0
- package/mcp-server/dist/helpers/docs.helper.js.map +1 -0
- package/mcp-server/dist/helpers/index.d.ts +3 -0
- package/mcp-server/dist/helpers/index.d.ts.map +1 -0
- package/mcp-server/dist/helpers/index.js +19 -0
- package/mcp-server/dist/helpers/index.js.map +1 -0
- package/mcp-server/dist/helpers/logger.helper.d.ts +7 -0
- package/mcp-server/dist/helpers/logger.helper.d.ts.map +1 -0
- package/mcp-server/dist/helpers/logger.helper.js +22 -0
- package/mcp-server/dist/helpers/logger.helper.js.map +1 -0
- package/mcp-server/dist/index.d.ts +3 -0
- package/mcp-server/dist/index.d.ts.map +1 -0
- package/mcp-server/dist/index.js +62 -0
- package/mcp-server/dist/index.js.map +1 -0
- package/mcp-server/dist/tools/base.tool.d.ts +98 -0
- package/mcp-server/dist/tools/base.tool.d.ts.map +1 -0
- package/mcp-server/dist/tools/base.tool.js +47 -0
- package/mcp-server/dist/tools/base.tool.js.map +1 -0
- package/mcp-server/dist/tools/get-doc-content.tool.d.ts +30 -0
- package/mcp-server/dist/tools/get-doc-content.tool.d.ts.map +1 -0
- package/mcp-server/dist/tools/get-doc-content.tool.js +127 -0
- package/mcp-server/dist/tools/get-doc-content.tool.js.map +1 -0
- package/mcp-server/dist/tools/get-doc-metadata.tool.d.ts +40 -0
- package/mcp-server/dist/tools/get-doc-metadata.tool.d.ts.map +1 -0
- package/mcp-server/dist/tools/get-doc-metadata.tool.js +121 -0
- package/mcp-server/dist/tools/get-doc-metadata.tool.js.map +1 -0
- package/mcp-server/dist/tools/index.d.ts +8 -0
- package/mcp-server/dist/tools/index.d.ts.map +1 -0
- package/mcp-server/dist/tools/index.js +18 -0
- package/mcp-server/dist/tools/index.js.map +1 -0
- package/mcp-server/dist/tools/list-categories.tool.d.ts +20 -0
- package/mcp-server/dist/tools/list-categories.tool.d.ts.map +1 -0
- package/mcp-server/dist/tools/list-categories.tool.js +105 -0
- package/mcp-server/dist/tools/list-categories.tool.js.map +1 -0
- package/mcp-server/dist/tools/list-docs.tool.d.ts +32 -0
- package/mcp-server/dist/tools/list-docs.tool.d.ts.map +1 -0
- package/mcp-server/dist/tools/list-docs.tool.js +121 -0
- package/mcp-server/dist/tools/list-docs.tool.js.map +1 -0
- package/mcp-server/dist/tools/search-docs.tool.d.ts +32 -0
- package/mcp-server/dist/tools/search-docs.tool.d.ts.map +1 -0
- package/mcp-server/dist/tools/search-docs.tool.js +120 -0
- package/mcp-server/dist/tools/search-docs.tool.js.map +1 -0
- package/package.json +102 -0
- package/wiki/get-started/5-minute-quickstart.md +266 -0
- package/wiki/get-started/best-practices/api-usage-examples.md +222 -0
- package/wiki/get-started/best-practices/architectural-patterns.md +129 -0
- package/wiki/get-started/best-practices/code-style-standards.md +122 -0
- package/wiki/get-started/best-practices/common-pitfalls.md +136 -0
- package/wiki/get-started/best-practices/contribution-workflow.md +145 -0
- package/wiki/get-started/best-practices/deployment-strategies.md +121 -0
- package/wiki/get-started/best-practices/performance-optimization.md +88 -0
- package/wiki/get-started/best-practices/security-guidelines.md +97 -0
- package/wiki/get-started/best-practices/troubleshooting-tips.md +100 -0
- package/wiki/get-started/building-a-crud-api.md +717 -0
- package/wiki/get-started/core-concepts/application.md +168 -0
- package/wiki/get-started/core-concepts/components.md +96 -0
- package/wiki/get-started/core-concepts/controllers.md +441 -0
- package/wiki/get-started/core-concepts/dependency-injection.md +160 -0
- package/wiki/get-started/core-concepts/persistent.md +591 -0
- package/wiki/get-started/core-concepts/services.md +88 -0
- package/wiki/get-started/index.md +65 -0
- package/wiki/get-started/mcp-docs-server.md +840 -0
- package/wiki/get-started/philosophy.md +123 -0
- package/wiki/get-started/prerequisites.md +113 -0
- package/wiki/get-started/quickstart.md +382 -0
- package/wiki/index.md +48 -0
- package/wiki/references/base/application.md +67 -0
- package/wiki/references/base/components.md +80 -0
- package/wiki/references/base/controllers.md +361 -0
- package/wiki/references/base/datasources.md +105 -0
- package/wiki/references/base/dependency-injection.md +83 -0
- package/wiki/references/base/models.md +104 -0
- package/wiki/references/base/repositories.md +118 -0
- package/wiki/references/base/services.md +97 -0
- package/wiki/references/components/authentication.md +224 -0
- package/wiki/references/components/health-check.md +190 -0
- package/wiki/references/components/index.md +61 -0
- package/wiki/references/components/request-tracker.md +35 -0
- package/wiki/references/components/socket-io.md +127 -0
- package/wiki/references/components/swagger.md +175 -0
- package/wiki/references/helpers/cron.md +94 -0
- package/wiki/references/helpers/crypto.md +117 -0
- package/wiki/references/helpers/env.md +67 -0
- package/wiki/references/helpers/error.md +80 -0
- package/wiki/references/helpers/index.md +21 -0
- package/wiki/references/helpers/inversion.md +141 -0
- package/wiki/references/helpers/logger.md +98 -0
- package/wiki/references/helpers/network.md +143 -0
- package/wiki/references/helpers/queue.md +131 -0
- package/wiki/references/helpers/redis.md +121 -0
- package/wiki/references/helpers/socket-io.md +103 -0
- package/wiki/references/helpers/storage.md +130 -0
- package/wiki/references/helpers/testing.md +115 -0
- package/wiki/references/helpers/worker-thread.md +162 -0
- package/wiki/references/src-details/core.md +249 -0
- package/wiki/references/src-details/dev-configs.md +302 -0
- package/wiki/references/src-details/docs.md +61 -0
- package/wiki/references/src-details/helpers.md +211 -0
- package/wiki/references/src-details/inversion.md +345 -0
- package/wiki/references/src-details/mcp-server.md +726 -0
- package/wiki/references/utilities/crypto.md +39 -0
- package/wiki/references/utilities/date.md +72 -0
- package/wiki/references/utilities/index.md +12 -0
- package/wiki/references/utilities/module.md +40 -0
- package/wiki/references/utilities/parse.md +68 -0
- package/wiki/references/utilities/performance.md +64 -0
- package/wiki/references/utilities/promise.md +83 -0
- package/wiki/references/utilities/request.md +66 -0
- package/wiki/references/utilities/schema.md +88 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# Package: `@venizia/ignis-inversion`
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `@venizia/ignis-inversion` package provides a standalone, lightweight Dependency Injection (DI) and Inversion of Control (IoC) container. This package was extracted from `@venizia/ignis-helpers` to enable independent usage and better modularity.
|
|
6
|
+
|
|
7
|
+
## Package Information
|
|
8
|
+
|
|
9
|
+
| Property | Value |
|
|
10
|
+
|----------|-------|
|
|
11
|
+
| **Package Name** | `@venizia/ignis-inversion` |
|
|
12
|
+
| **Location** | `packages/inversion/` |
|
|
13
|
+
| **Purpose** | Standalone DI/IoC container |
|
|
14
|
+
| **Dependencies** | `lodash`, `reflect-metadata`, `zod` |
|
|
15
|
+
|
|
16
|
+
## Key Features
|
|
17
|
+
|
|
18
|
+
- **Flexible Binding Strategies**: Class, Value, and Provider-based bindings
|
|
19
|
+
- **Scope Management**: Singleton and Transient scopes
|
|
20
|
+
- **Metadata-driven Injection**: Constructor and property injection via decorators
|
|
21
|
+
- **Tag-based Discovery**: Find bindings by tag for modular composition
|
|
22
|
+
- **Type-safe**: Full TypeScript support with generics
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Core Components
|
|
27
|
+
|
|
28
|
+
### Binding Class
|
|
29
|
+
|
|
30
|
+
The `Binding<T>` class represents a single dependency registration in the container.
|
|
31
|
+
|
|
32
|
+
#### Binding Methods
|
|
33
|
+
|
|
34
|
+
| Method | Description | Returns |
|
|
35
|
+
|--------|-------------|---------|
|
|
36
|
+
| `toClass(cls)` | Bind to a class constructor | `this` |
|
|
37
|
+
| `toValue(value)` | Bind to a static value | `this` |
|
|
38
|
+
| `toProvider(fn)` | Bind to a provider function or class | `this` |
|
|
39
|
+
| `setScope(scope)` | Set binding scope (SINGLETON/TRANSIENT) | `this` |
|
|
40
|
+
| `setTags(...tags)` | Add tags for discovery | `this` |
|
|
41
|
+
| `getValue(container)` | Resolve the bound value | `T` |
|
|
42
|
+
| `clearCache()` | Clear singleton cache | `void` |
|
|
43
|
+
|
|
44
|
+
#### Binding Example
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import { Binding, BindingScopes } from '@venizia/ignis-inversion';
|
|
48
|
+
|
|
49
|
+
// Create a binding
|
|
50
|
+
const binding = new Binding<MyService>({ key: 'services.MyService' })
|
|
51
|
+
.toClass(MyService)
|
|
52
|
+
.setScope(BindingScopes.SINGLETON)
|
|
53
|
+
.setTags('services', 'core');
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Container Class
|
|
57
|
+
|
|
58
|
+
The `Container` class is the main DI container for managing bindings and resolving dependencies.
|
|
59
|
+
|
|
60
|
+
#### Container Methods
|
|
61
|
+
|
|
62
|
+
| Method | Description | Returns |
|
|
63
|
+
|--------|-------------|---------|
|
|
64
|
+
| `bind<T>({ key })` | Create a new binding | `Binding<T>` |
|
|
65
|
+
| `isBound({ key })` | Check if binding exists | `boolean` |
|
|
66
|
+
| `getBinding<T>({ key })` | Get a specific binding | `Binding<T> \| undefined` |
|
|
67
|
+
| `unbind({ key })` | Remove a binding | `boolean` |
|
|
68
|
+
| `get<T>({ key, isOptional? })` | Resolve a dependency | `T \| undefined` |
|
|
69
|
+
| `resolve<T>(cls)` | Instantiate a class with injection | `T` |
|
|
70
|
+
| `instantiate<T>(cls)` | Same as resolve | `T` |
|
|
71
|
+
| `findByTag<T>({ tag })` | Find bindings by tag | `Binding<T>[]` |
|
|
72
|
+
| `clear()` | Clear singleton caches | `void` |
|
|
73
|
+
| `reset()` | Clear all bindings | `void` |
|
|
74
|
+
|
|
75
|
+
#### Container Example
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { Container, BindingScopes } from '@venizia/ignis-inversion';
|
|
79
|
+
|
|
80
|
+
const container = new Container({ scope: 'MyApp' });
|
|
81
|
+
|
|
82
|
+
// Bind a class
|
|
83
|
+
container.bind<UserService>({ key: 'services.UserService' })
|
|
84
|
+
.toClass(UserService)
|
|
85
|
+
.setScope(BindingScopes.SINGLETON);
|
|
86
|
+
|
|
87
|
+
// Bind a value
|
|
88
|
+
container.bind<string>({ key: 'config.apiUrl' })
|
|
89
|
+
.toValue('https://api.example.com');
|
|
90
|
+
|
|
91
|
+
// Bind a provider
|
|
92
|
+
container.bind<DatabaseConnection>({ key: 'database' })
|
|
93
|
+
.toProvider((container) => {
|
|
94
|
+
const config = container.get<Config>({ key: 'config' });
|
|
95
|
+
return new DatabaseConnection(config.dbUrl);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Resolve dependencies
|
|
99
|
+
const userService = container.get<UserService>({ key: 'services.UserService' });
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### MetadataRegistry Class
|
|
103
|
+
|
|
104
|
+
The `MetadataRegistry` stores and retrieves decorator metadata for DI.
|
|
105
|
+
|
|
106
|
+
#### Registry Methods
|
|
107
|
+
|
|
108
|
+
| Method | Description |
|
|
109
|
+
|--------|-------------|
|
|
110
|
+
| `define({ target, key, value })` | Define metadata on a target |
|
|
111
|
+
| `get({ target, key })` | Get metadata from a target |
|
|
112
|
+
| `has({ target, key })` | Check if metadata exists |
|
|
113
|
+
| `delete({ target, key })` | Delete metadata |
|
|
114
|
+
| `getKeys({ target })` | Get all metadata keys |
|
|
115
|
+
| `setPropertyMetadata(...)` | Set property injection metadata |
|
|
116
|
+
| `getPropertiesMetadata(...)` | Get all property metadata |
|
|
117
|
+
| `setInjectMetadata(...)` | Set constructor injection metadata |
|
|
118
|
+
| `getInjectMetadata(...)` | Get constructor injection metadata |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Types and Interfaces
|
|
123
|
+
|
|
124
|
+
### Binding Scopes
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
import { BindingScopes } from '@venizia/ignis-inversion';
|
|
128
|
+
|
|
129
|
+
BindingScopes.SINGLETON // Single instance, reused
|
|
130
|
+
BindingScopes.TRANSIENT // New instance each request (default)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Binding Value Types
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { BindingValueTypes } from '@venizia/ignis-inversion';
|
|
137
|
+
|
|
138
|
+
BindingValueTypes.CLASS // Bind to class constructor
|
|
139
|
+
BindingValueTypes.VALUE // Bind to static value
|
|
140
|
+
BindingValueTypes.PROVIDER // Bind to provider function/class
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Provider Interface
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
interface IProvider<T> {
|
|
147
|
+
value(container: Container): T;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Example provider class
|
|
151
|
+
class DatabaseProvider implements IProvider<DatabaseConnection> {
|
|
152
|
+
value(container: Container): DatabaseConnection {
|
|
153
|
+
const config = container.get<Config>({ key: 'config' });
|
|
154
|
+
return new DatabaseConnection(config.dbUrl);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### BindingKeys Helper
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
import { BindingKeys } from '@venizia/ignis-inversion';
|
|
163
|
+
|
|
164
|
+
const key = BindingKeys.build({ namespace: 'services', key: 'UserService' });
|
|
165
|
+
// Result: 'services.UserService'
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Type Definitions
|
|
169
|
+
|
|
170
|
+
| Type | Description |
|
|
171
|
+
|------|-------------|
|
|
172
|
+
| `TNullable<T>` | `T \| undefined \| null` |
|
|
173
|
+
| `TClass<T>` | Class constructor type |
|
|
174
|
+
| `TConstructor<T>` | Generic constructor |
|
|
175
|
+
| `TBindingScope` | `'singleton' \| 'transient'` |
|
|
176
|
+
| `IPropertyMetadata` | Property injection metadata |
|
|
177
|
+
| `IInjectMetadata` | Constructor injection metadata |
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Injection Metadata
|
|
182
|
+
|
|
183
|
+
### Property Injection
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
interface IPropertyMetadata {
|
|
187
|
+
bindingKey: string | symbol;
|
|
188
|
+
isOptional?: boolean;
|
|
189
|
+
[key: string]: any;
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Constructor Injection
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
interface IInjectMetadata {
|
|
197
|
+
key: string | symbol;
|
|
198
|
+
index: number;
|
|
199
|
+
isOptional?: boolean;
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Project Structure
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
packages/inversion/
|
|
209
|
+
├── package.json
|
|
210
|
+
├── tsconfig.json
|
|
211
|
+
├── src/
|
|
212
|
+
│ ├── index.ts # Main exports + reflect-metadata import
|
|
213
|
+
│ ├── container.ts # Container and Binding classes
|
|
214
|
+
│ ├── registry.ts # MetadataRegistry class
|
|
215
|
+
│ └── common/
|
|
216
|
+
│ ├── index.ts # Common exports
|
|
217
|
+
│ ├── types.ts # Types, interfaces, BindingScopes, etc.
|
|
218
|
+
│ ├── keys.ts # MetadataKeys symbols
|
|
219
|
+
│ ├── app-error.ts # ApplicationError class
|
|
220
|
+
│ ├── base-helper.ts # BaseHelper base class
|
|
221
|
+
│ └── logger.ts # Simple Logger class
|
|
222
|
+
├── scripts/
|
|
223
|
+
│ ├── build.sh
|
|
224
|
+
│ ├── clean.sh
|
|
225
|
+
│ └── rebuild.sh
|
|
226
|
+
└── dist/ # Built output
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Usage Examples
|
|
232
|
+
|
|
233
|
+
### Basic Container Usage
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
import { Container, BindingScopes } from '@venizia/ignis-inversion';
|
|
237
|
+
|
|
238
|
+
// Create container
|
|
239
|
+
const container = new Container();
|
|
240
|
+
|
|
241
|
+
// Register services
|
|
242
|
+
container.bind({ key: 'logger' }).toValue(console);
|
|
243
|
+
container.bind({ key: 'services.UserService' })
|
|
244
|
+
.toClass(UserService)
|
|
245
|
+
.setScope(BindingScopes.SINGLETON);
|
|
246
|
+
|
|
247
|
+
// Resolve
|
|
248
|
+
const logger = container.get({ key: 'logger' });
|
|
249
|
+
const userService = container.get({ key: 'services.UserService' });
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Using Providers
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
import { Container, IProvider } from '@venizia/ignis-inversion';
|
|
256
|
+
|
|
257
|
+
// Function provider
|
|
258
|
+
container.bind({ key: 'database' })
|
|
259
|
+
.toProvider((container) => {
|
|
260
|
+
return new Database(container.get({ key: 'config.dbUrl' }));
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// Class provider
|
|
264
|
+
class ConfigProvider implements IProvider<Config> {
|
|
265
|
+
value(container: Container): Config {
|
|
266
|
+
return {
|
|
267
|
+
env: process.env.NODE_ENV,
|
|
268
|
+
port: parseInt(process.env.PORT || '3000'),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
container.bind({ key: 'config' }).toProvider(ConfigProvider);
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Tag-based Discovery
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
// Register with tags
|
|
280
|
+
container.bind({ key: 'handlers.UserHandler' })
|
|
281
|
+
.toClass(UserHandler)
|
|
282
|
+
.setTags('handlers', 'user');
|
|
283
|
+
|
|
284
|
+
container.bind({ key: 'handlers.OrderHandler' })
|
|
285
|
+
.toClass(OrderHandler)
|
|
286
|
+
.setTags('handlers', 'order');
|
|
287
|
+
|
|
288
|
+
// Find all handlers
|
|
289
|
+
const handlers = container.findByTag({ tag: 'handlers' });
|
|
290
|
+
handlers.forEach(binding => {
|
|
291
|
+
const handler = binding.getValue(container);
|
|
292
|
+
// Use handler...
|
|
293
|
+
});
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Optional Dependencies
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
// Get optional dependency (returns undefined if not bound)
|
|
300
|
+
const cache = container.get<CacheService>({
|
|
301
|
+
key: 'services.CacheService',
|
|
302
|
+
isOptional: true
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
if (cache) {
|
|
306
|
+
// Use cache service
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Relationship with @venizia/ignis-helpers
|
|
313
|
+
|
|
314
|
+
The `@venizia/ignis-helpers` package extends this base inversion package with:
|
|
315
|
+
|
|
316
|
+
- **ApplicationLogger integration**: Container with structured logging
|
|
317
|
+
- **Framework-specific metadata**: Controllers, models, repositories, data sources
|
|
318
|
+
- **Decorator implementations**: `@inject`, `@controller`, `@service`, etc.
|
|
319
|
+
|
|
320
|
+
For framework usage, import from `@venizia/ignis-helpers` or `@venizia/ignis`. For standalone DI container usage, import directly from `@venizia/ignis-inversion`.
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
// Standalone usage
|
|
324
|
+
import { Container, Binding } from '@venizia/ignis-inversion';
|
|
325
|
+
|
|
326
|
+
// Framework usage (includes logging and framework metadata)
|
|
327
|
+
import { Container, inject, service } from '@venizia/ignis-helpers';
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## Building the Package
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
cd packages/inversion
|
|
336
|
+
|
|
337
|
+
# Build
|
|
338
|
+
bun run build
|
|
339
|
+
|
|
340
|
+
# Clean
|
|
341
|
+
bun run clean
|
|
342
|
+
|
|
343
|
+
# Rebuild (clean + build)
|
|
344
|
+
bun run rebuild
|
|
345
|
+
```
|