0
# Helper API
1
2
MikroORM CLI Helper API provides programmatic access to CLI functionality for custom tooling, scripts, and integrations. The CLIHelper class offers static methods for common ORM operations used throughout the CLI commands.
3
4
## Capabilities
5
6
### Configuration Management
7
8
Load and validate MikroORM configuration from various sources and contexts.
9
10
```typescript { .api }
11
/**
12
* Load ORM configuration with context and path resolution
13
*/
14
static async getConfiguration<D extends IDatabaseDriver = IDatabaseDriver>(
15
contextName?: string,
16
configPaths?: string[],
17
options?: Partial<Options<D>>
18
): Promise<Configuration<D>>;
19
```
20
21
**Usage Examples:**
22
23
```typescript
24
import { CLIHelper } from '@mikro-orm/cli';
25
26
// Load default configuration
27
const config = await CLIHelper.getConfiguration();
28
29
// Load specific context
30
const prodConfig = await CLIHelper.getConfiguration('production');
31
32
// Load with custom config paths
33
const config = await CLIHelper.getConfiguration('default', ['./custom.config.js']);
34
35
// Load with additional options
36
const config = await CLIHelper.getConfiguration('default', undefined, {
37
debug: true,
38
discovery: { warnWhenNoEntities: false }
39
});
40
```
41
42
### ORM Instance Management
43
44
Initialize MikroORM instances with CLI-specific configuration and settings.
45
46
```typescript { .api }
47
/**
48
* Initialize MikroORM instance with CLI settings
49
*/
50
static async getORM<D extends IDatabaseDriver = IDatabaseDriver>(
51
contextName?: string,
52
configPaths?: string[],
53
opts?: Partial<Options<D>>
54
): Promise<MikroORM<D>>;
55
```
56
57
**Usage Examples:**
58
59
```typescript
60
import { CLIHelper } from '@mikro-orm/cli';
61
62
// Initialize default ORM instance
63
const orm = await CLIHelper.getORM();
64
65
// Initialize with specific context
66
const orm = await CLIHelper.getORM('development');
67
68
// Initialize with custom options
69
const orm = await CLIHelper.getORM('default', undefined, {
70
pool: { min: 1, max: 2 },
71
discovery: { warnWhenNoEntities: false }
72
});
73
74
// Don't forget to close when done
75
await orm.close(true);
76
```
77
78
### Database Connectivity
79
80
Test database connections and validate connectivity status.
81
82
```typescript { .api }
83
/**
84
* Check database connection status
85
*/
86
static async isDBConnected(config: Configuration, reason?: false): Promise<boolean>;
87
static async isDBConnected(config: Configuration, reason: true): Promise<true | string>;
88
```
89
90
**Usage Examples:**
91
92
```typescript
93
import { CLIHelper } from '@mikro-orm/cli';
94
95
const config = await CLIHelper.getConfiguration();
96
97
// Simple boolean check
98
const connected = await CLIHelper.isDBConnected(config);
99
if (connected) {
100
console.log('Database is connected');
101
}
102
103
// Get connection status with reason
104
const status = await CLIHelper.isDBConnected(config, true);
105
if (status === true) {
106
console.log('Connection successful');
107
} else {
108
console.log(`Connection failed: ${status}`);
109
}
110
```
111
112
### System Information
113
114
Retrieve system and dependency information for debugging and diagnostics.
115
116
```typescript { .api }
117
/**
118
* Get Node.js version
119
*/
120
static getNodeVersion(): string;
121
122
/**
123
* Get database driver dependencies
124
*/
125
static getDriverDependencies(config: Configuration): string[];
126
127
/**
128
* Get module version information
129
*/
130
static async getModuleVersion(name: string): Promise<string>;
131
```
132
133
**Usage Examples:**
134
135
```typescript
136
import { CLIHelper } from '@mikro-orm/cli';
137
138
// Get Node.js version
139
const nodeVersion = CLIHelper.getNodeVersion();
140
console.log(`Node.js: ${nodeVersion}`);
141
142
// Get driver dependencies
143
const config = await CLIHelper.getConfiguration();
144
const drivers = CLIHelper.getDriverDependencies(config);
145
console.log('Drivers:', drivers);
146
147
// Get specific module version
148
const tsVersion = await CLIHelper.getModuleVersion('typescript');
149
console.log(`TypeScript: ${tsVersion}`);
150
```
151
152
### Output and Display
153
154
Format and display information with consistent styling and formatting.
155
156
```typescript { .api }
157
/**
158
* Output text with optional syntax highlighting
159
*/
160
static dump(text: string, config?: Configuration): void;
161
162
/**
163
* Display formatted table
164
*/
165
static dumpTable(options: TableOptions): void;
166
167
/**
168
* Display dependency information
169
*/
170
static async dumpDependencies(): Promise<void>;
171
172
/**
173
* Show CLI help
174
*/
175
static showHelp(): void;
176
```
177
178
**Usage Examples:**
179
180
```typescript
181
import { CLIHelper } from '@mikro-orm/cli';
182
183
// Simple text output
184
CLIHelper.dump('Operation completed successfully');
185
186
// Output with highlighting (if configured)
187
const config = await CLIHelper.getConfiguration();
188
CLIHelper.dump('SELECT * FROM users;', config);
189
190
// Display table
191
CLIHelper.dumpTable({
192
columns: ['Name', 'Version', 'Status'],
193
rows: [
194
['mikro-orm', '6.5.2', 'installed'],
195
['typescript', '5.2.0', 'installed']
196
],
197
empty: 'No packages found'
198
});
199
200
// Display system dependencies
201
await CLIHelper.dumpDependencies();
202
203
// Show help
204
CLIHelper.showHelp();
205
```
206
207
### Configuration Path Management
208
209
Manage and discover configuration file paths.
210
211
```typescript { .api }
212
/**
213
* Get standard configuration file paths
214
*/
215
static getConfigPaths(): string[];
216
```
217
218
**Usage Examples:**
219
220
```typescript
221
import { CLIHelper } from '@mikro-orm/cli';
222
223
// Get standard config paths
224
const paths = CLIHelper.getConfigPaths();
225
console.log('Searching config paths:', paths);
226
227
// Use with configuration loading
228
const config = await CLIHelper.getConfiguration('default', paths);
229
```
230
231
## Types and Interfaces
232
233
```typescript { .api }
234
// Table formatting options
235
interface TableOptions {
236
columns: string[]; // Column headers
237
rows: string[][]; // Table data rows
238
empty: string; // Message when no rows
239
}
240
241
// Database driver interface
242
interface IDatabaseDriver {
243
// Driver-specific implementation
244
}
245
246
// Configuration options
247
interface Options<D extends IDatabaseDriver> {
248
debug?: boolean;
249
discovery?: {
250
warnWhenNoEntities?: boolean;
251
};
252
pool?: {
253
min?: number;
254
max?: number;
255
};
256
connect?: boolean;
257
allowGlobalContext?: boolean;
258
preferTs?: boolean;
259
entities?: any[];
260
entitiesTs?: any[];
261
// ... other MikroORM options
262
}
263
```
264
265
## Error Handling
266
267
### Common Errors
268
269
- **Configuration not found**: When config files don't exist at specified paths
270
- **Invalid context**: When requested context doesn't exist in configuration
271
- **Connection failures**: Database connectivity issues
272
- **Module not found**: When checking versions of uninstalled packages
273
- **Permission errors**: File system access issues
274
275
### Error Examples
276
277
```typescript
278
import { CLIHelper } from '@mikro-orm/cli';
279
280
try {
281
const config = await CLIHelper.getConfiguration('invalid-context');
282
} catch (error) {
283
console.error('Configuration error:', error.message);
284
}
285
286
try {
287
const orm = await CLIHelper.getORM();
288
// ... use ORM
289
} catch (error) {
290
console.error('ORM initialization failed:', error.message);
291
} finally {
292
// Ensure proper cleanup
293
if (orm) await orm.close(true);
294
}
295
```
296
297
## Integration Examples
298
299
### Custom CLI Script
300
301
```typescript
302
#!/usr/bin/env node
303
import { CLIHelper } from '@mikro-orm/cli';
304
305
async function customMigrationCheck() {
306
try {
307
const orm = await CLIHelper.getORM();
308
const migrator = orm.getMigrator();
309
310
const pending = await migrator.getPendingMigrations();
311
if (pending.length > 0) {
312
CLIHelper.dump(`Found ${pending.length} pending migrations`);
313
process.exit(1);
314
}
315
316
CLIHelper.dump('Database is up to date');
317
await orm.close(true);
318
} catch (error) {
319
CLIHelper.dump(`Error: ${error.message}`);
320
process.exit(1);
321
}
322
}
323
324
customMigrationCheck();
325
```
326
327
### Build Process Integration
328
329
```typescript
330
import { CLIHelper } from '@mikro-orm/cli';
331
332
export async function validateDatabaseSetup(): Promise<boolean> {
333
try {
334
const config = await CLIHelper.getConfiguration();
335
const connected = await CLIHelper.isDBConnected(config);
336
337
if (!connected) {
338
console.error('Database connection failed');
339
return false;
340
}
341
342
// Additional validation...
343
return true;
344
} catch (error) {
345
console.error('Setup validation failed:', error.message);
346
return false;
347
}
348
}
349
```
350
351
## Best Practices
352
353
### Resource Management
354
355
- Always close ORM instances when done: `await orm.close(true)`
356
- Handle configuration errors gracefully
357
- Use try-catch blocks for async operations
358
- Clean up resources in finally blocks
359
360
### Performance Considerations
361
362
- Reuse configuration objects when possible
363
- Use connection pooling options for multiple operations
364
- Close database connections promptly
365
- Cache system information when making multiple calls
366
367
### Error Handling
368
369
- Provide meaningful error messages
370
- Log errors appropriately for debugging
371
- Handle network timeouts and connection failures
372
- Validate inputs before processing