@mikro-orm/cli 6.3.14-dev.8 → 6.4.0

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.
@@ -14,6 +14,8 @@ export interface BaseCommand<CommandArgs extends BaseArgs = BaseArgs> extends Co
14
14
  export declare class CLIConfigurator {
15
15
  private static createBasicConfig;
16
16
  static configure(): yargs.Argv<{
17
- config: string | undefined;
17
+ config: string[] | undefined;
18
+ } & {
19
+ contextName: string;
18
20
  }>;
19
21
  }
@@ -27,7 +27,14 @@ class CLIConfigurator {
27
27
  .example('$0 schema:update --run', 'Runs schema synchronization')
28
28
  .option('config', {
29
29
  type: 'string',
30
+ array: true,
30
31
  desc: `Set path to the ORM configuration file`,
32
+ })
33
+ .option('contextName', {
34
+ alias: 'context',
35
+ type: 'string',
36
+ desc: 'Set name of config to load out of the ORM configuration file. Used when config file exports an array or a function',
37
+ default: process.env.MIKRO_ORM_CONTEXT_NAME ?? 'default',
31
38
  })
32
39
  .alias('v', 'version')
33
40
  .alias('h', 'help')
@@ -39,9 +46,9 @@ class CLIConfigurator {
39
46
  const settings = core_1.ConfigurationLoader.getSettings();
40
47
  const version = core_1.Utils.getORMVersion();
41
48
  if (settings.useTsNode !== false) {
42
- const tsNode = core_1.ConfigurationLoader.registerTsNode(settings.tsConfigPath);
49
+ const preferTs = core_1.ConfigurationLoader.registerTsNode(settings.tsConfigPath);
43
50
  /* istanbul ignore if */
44
- if (!tsNode) {
51
+ if (!preferTs) {
45
52
  process.env.MIKRO_ORM_CLI_USE_TS_NODE ??= '0';
46
53
  }
47
54
  }
package/CLIHelper.d.ts CHANGED
@@ -3,11 +3,12 @@ import { MikroORM, type Configuration, type IDatabaseDriver, type Options } from
3
3
  * @internal
4
4
  */
5
5
  export declare class CLIHelper {
6
- static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver>(validate?: boolean, options?: Partial<Options>): Promise<Configuration<D>>;
7
- static getORM(warnWhenNoEntities?: boolean, opts?: Partial<Options>): Promise<MikroORM>;
8
- static isDBConnected(reason?: boolean): Promise<boolean | string>;
6
+ static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver>(contextName?: string, configPaths?: string[], options?: Partial<Options<D>>): Promise<Configuration<D>>;
7
+ static getORM<D extends IDatabaseDriver = IDatabaseDriver>(contextName?: string, configPaths?: string[], opts?: Partial<Options<D>>): Promise<MikroORM<D>>;
8
+ static isDBConnected(config: Configuration, reason?: false): Promise<boolean>;
9
+ static isDBConnected(config: Configuration, reason: true): Promise<true | string>;
9
10
  static getNodeVersion(): string;
10
- static getDriverDependencies(): Promise<string[]>;
11
+ static getDriverDependencies(config: Configuration): string[];
11
12
  static dump(text: string, config?: Configuration): void;
12
13
  static getConfigPaths(): string[];
13
14
  static dumpDependencies(): Promise<void>;
package/CLIHelper.js CHANGED
@@ -11,35 +11,40 @@ const core_1 = require("@mikro-orm/core");
11
11
  * @internal
12
12
  */
13
13
  class CLIHelper {
14
- static async getConfiguration(validate = true, options = {}) {
14
+ static async getConfiguration(contextName, configPaths, options = {}) {
15
15
  const deps = core_1.ConfigurationLoader.getORMPackages();
16
16
  if (!deps.has('@mikro-orm/cli') && !process.env.MIKRO_ORM_ALLOW_GLOBAL_CLI) {
17
17
  throw new Error('@mikro-orm/cli needs to be installed as a local dependency!');
18
18
  }
19
- return core_1.ConfigurationLoader.getConfiguration(validate, options);
19
+ core_1.ConfigurationLoader.commonJSCompat(options);
20
+ core_1.ConfigurationLoader.registerDotenv(options);
21
+ configPaths ??= core_1.ConfigurationLoader.getConfigPaths();
22
+ contextName ??= process.env.MIKRO_ORM_CONTEXT_NAME ?? 'default';
23
+ return core_1.ConfigurationLoader.getConfiguration(contextName, configPaths, options);
20
24
  }
21
- static async getORM(warnWhenNoEntities, opts = {}) {
22
- const options = await CLIHelper.getConfiguration(warnWhenNoEntities, opts);
25
+ static async getORM(contextName, configPaths, opts = {}) {
26
+ const options = await CLIHelper.getConfiguration(contextName, configPaths, opts);
23
27
  const settings = core_1.ConfigurationLoader.getSettings();
24
28
  options.set('allowGlobalContext', true);
25
29
  options.set('debug', !!settings.verbose);
26
30
  options.getLogger().setDebugMode(!!settings.verbose);
27
31
  options.set('connect', false);
28
32
  if (settings.useTsNode !== false) {
29
- options.set('tsNode', true);
33
+ options.set('preferTs', true);
30
34
  }
31
- if (core_1.Utils.isDefined(warnWhenNoEntities)) {
32
- options.get('discovery').warnWhenNoEntities = warnWhenNoEntities;
35
+ // The only times when we don't care to have a warning about no entities is also the time when we ignore entities.
36
+ if (opts.discovery?.warnWhenNoEntities === false) {
37
+ options.set('entities', []);
38
+ options.set('entitiesTs', []);
33
39
  }
34
40
  return core_1.MikroORM.init(options.getAll());
35
41
  }
36
- static async isDBConnected(reason = false) {
42
+ static async isDBConnected(config, reason = false) {
37
43
  try {
38
- const config = await CLIHelper.getConfiguration();
39
44
  await config.getDriver().connect();
40
45
  const isConnected = await config.getDriver().getConnection().checkConnection();
41
46
  await config.getDriver().close();
42
- return isConnected.reason && reason ? isConnected.reason : isConnected.ok;
47
+ return isConnected.ok || (reason ? isConnected.reason : false);
43
48
  }
44
49
  catch {
45
50
  return false;
@@ -48,9 +53,8 @@ class CLIHelper {
48
53
  static getNodeVersion() {
49
54
  return process.versions.node;
50
55
  }
51
- static async getDriverDependencies() {
56
+ static getDriverDependencies(config) {
52
57
  try {
53
- const config = await CLIHelper.getConfiguration();
54
58
  return config.getDriver().getDependencies();
55
59
  }
56
60
  catch {
@@ -73,10 +77,6 @@ class CLIHelper {
73
77
  CLIHelper.dump(` - mikro-orm ${core_1.colors.green(version)}`);
74
78
  CLIHelper.dump(` - node ${core_1.colors.green(CLIHelper.getNodeVersion())}`);
75
79
  if ((0, fs_extra_1.pathExistsSync)(process.cwd() + '/package.json')) {
76
- const drivers = await CLIHelper.getDriverDependencies();
77
- for (const driver of drivers) {
78
- CLIHelper.dump(` - ${driver} ${await CLIHelper.getModuleVersion(driver)}`);
79
- }
80
80
  /* istanbul ignore next */
81
81
  if (process.versions.bun) {
82
82
  CLIHelper.dump(` - typescript via bun`);
package/cli CHANGED
File without changes
@@ -10,7 +10,7 @@ class ClearCacheCommand {
10
10
  * @inheritDoc
11
11
  */
12
12
  async handler(args) {
13
- const config = await CLIHelper_1.CLIHelper.getConfiguration();
13
+ const config = await CLIHelper_1.CLIHelper.getConfiguration(args.contextName, args.config);
14
14
  if (!config.get('metadataCache').enabled) {
15
15
  CLIHelper_1.CLIHelper.dump(core_1.colors.red('Metadata cache is disabled in your configuration. Set cache.enabled to true to use this command.'));
16
16
  return;
@@ -9,7 +9,7 @@ class CreateDatabaseCommand {
9
9
  * @inheritDoc
10
10
  */
11
11
  async handler(args) {
12
- const orm = await CLIHelper_1.CLIHelper.getORM();
12
+ const orm = await CLIHelper_1.CLIHelper.getORM(args.contextName, args.config);
13
13
  const schemaGenerator = orm.getSchemaGenerator();
14
14
  await schemaGenerator.ensureDatabase();
15
15
  await orm.close(true);
@@ -9,8 +9,8 @@ class CreateSeederCommand {
9
9
  builder = (args) => {
10
10
  args.positional('seeder', {
11
11
  describe: 'Name for the seeder class. (e.g. "test" will generate "TestSeeder" or "TestSeeder" will generate "TestSeeder")',
12
+ demandOption: true,
12
13
  });
13
- args.demandOption('seeder');
14
14
  return args;
15
15
  };
16
16
  /**
@@ -18,7 +18,7 @@ class CreateSeederCommand {
18
18
  */
19
19
  async handler(args) {
20
20
  const className = CreateSeederCommand.getSeederClassName(args.seeder);
21
- const orm = await CLIHelper_1.CLIHelper.getORM();
21
+ const orm = await CLIHelper_1.CLIHelper.getORM(args.contextName, args.config);
22
22
  const seeder = orm.getSeeder();
23
23
  const path = await seeder.createSeeder(className);
24
24
  CLIHelper_1.CLIHelper.dump(core_1.colors.green(`Seeder ${args.seeder} successfully created at ${path}`));
@@ -18,7 +18,7 @@ class DatabaseSeedCommand {
18
18
  * @inheritDoc
19
19
  */
20
20
  async handler(args) {
21
- const orm = await CLIHelper_1.CLIHelper.getORM();
21
+ const orm = await CLIHelper_1.CLIHelper.getORM(args.contextName, args.config);
22
22
  const className = args.class ?? orm.config.get('seeder').defaultSeeder;
23
23
  await orm.getSeeder().seedString(className);
24
24
  CLIHelper_1.CLIHelper.dump(core_1.colors.green(`Seeder ${className} successfully executed`));
@@ -16,29 +16,35 @@ class DebugCommand {
16
16
  if (!process.versions.bun && settings.useTsNode !== false) {
17
17
  CLIHelper_1.CLIHelper.dump(' - ts-node ' + core_1.colors.green('enabled'));
18
18
  }
19
- const configPaths = CLIHelper_1.CLIHelper.getConfigPaths();
19
+ const configPaths = args.config ?? CLIHelper_1.CLIHelper.getConfigPaths();
20
20
  CLIHelper_1.CLIHelper.dump(' - searched config paths:');
21
21
  await DebugCommand.checkPaths(configPaths, 'yellow');
22
+ CLIHelper_1.CLIHelper.dump(` - searched for config name: ${core_1.colors.green(args.contextName)}`);
22
23
  try {
23
- const config = await CLIHelper_1.CLIHelper.getConfiguration();
24
+ const config = await CLIHelper_1.CLIHelper.getConfiguration(args.contextName, configPaths);
24
25
  CLIHelper_1.CLIHelper.dump(` - configuration ${core_1.colors.green('found')}`);
25
- const isConnected = await CLIHelper_1.CLIHelper.isDBConnected(true);
26
+ const drivers = CLIHelper_1.CLIHelper.getDriverDependencies(config);
27
+ CLIHelper_1.CLIHelper.dump(' - driver dependencies:');
28
+ for (const driver of drivers) {
29
+ CLIHelper_1.CLIHelper.dump(` - ${driver} ${await CLIHelper_1.CLIHelper.getModuleVersion(driver)}`);
30
+ }
31
+ const isConnected = await CLIHelper_1.CLIHelper.isDBConnected(config, true);
26
32
  if (isConnected === true) {
27
33
  CLIHelper_1.CLIHelper.dump(` - ${core_1.colors.green('database connection successful')}`);
28
34
  }
29
35
  else {
30
36
  CLIHelper_1.CLIHelper.dump(` - ${core_1.colors.yellow(`database connection failed (${isConnected})`)}`);
31
37
  }
32
- const tsNode = config.get('tsNode');
33
- if ([true, false].includes(tsNode)) {
34
- const warning = tsNode ? ' (this value should be set to `false` when running compiled code!)' : '';
35
- CLIHelper_1.CLIHelper.dump(` - \`tsNode\` flag explicitly set to ${tsNode}, will use \`entities${tsNode ? 'Ts' : ''}\` array${warning}`);
38
+ const preferTs = config.get('preferTs');
39
+ if ([true, false].includes(preferTs)) {
40
+ const warning = preferTs ? ' (this value should be set to `false` when running compiled code!)' : '';
41
+ CLIHelper_1.CLIHelper.dump(` - \`preferTs\` flag explicitly set to ${preferTs}, will use \`entities${preferTs ? 'Ts' : ''}\` array${warning}`);
36
42
  }
37
43
  const entities = config.get('entities', []);
38
44
  if (entities.length > 0) {
39
45
  const refs = entities.filter(p => !core_1.Utils.isString(p));
40
46
  const paths = entities.filter(p => core_1.Utils.isString(p));
41
- const will = !config.get('tsNode') ? 'will' : 'could';
47
+ const will = !config.get('preferTs') ? 'will' : 'could';
42
48
  CLIHelper_1.CLIHelper.dump(` - ${will} use \`entities\` array (contains ${refs.length} references and ${paths.length} paths)`);
43
49
  if (paths.length > 0) {
44
50
  await DebugCommand.checkPaths(paths, 'red', config.get('baseDir'));
@@ -49,7 +55,7 @@ class DebugCommand {
49
55
  const refs = entitiesTs.filter(p => !core_1.Utils.isString(p));
50
56
  const paths = entitiesTs.filter(p => core_1.Utils.isString(p));
51
57
  /* istanbul ignore next */
52
- const will = config.get('tsNode') ? 'will' : 'could';
58
+ const will = config.get('preferTs') ? 'will' : 'could';
53
59
  CLIHelper_1.CLIHelper.dump(` - ${will} use \`entitiesTs\` array (contains ${refs.length} references and ${paths.length} paths)`);
54
60
  /* istanbul ignore else */
55
61
  if (paths.length > 0) {
@@ -23,7 +23,7 @@ class GenerateCacheCommand {
23
23
  */
24
24
  async handler(args) {
25
25
  const options = args.combined ? { combined: './metadata.json' } : {};
26
- const config = await CLIHelper_1.CLIHelper.getConfiguration(true, {
26
+ const config = await CLIHelper_1.CLIHelper.getConfiguration(args.contextName, args.config, {
27
27
  metadataCache: { enabled: true, adapter: core_1.FileCacheAdapter, options },
28
28
  });
29
29
  config.getMetadataCacheAdapter().clear();
@@ -37,7 +37,7 @@ class GenerateEntitiesCommand {
37
37
  if (!args.save && !args.dump) {
38
38
  return CLIHelper_1.CLIHelper.showHelp();
39
39
  }
40
- const orm = await CLIHelper_1.CLIHelper.getORM(false);
40
+ const orm = await CLIHelper_1.CLIHelper.getORM(args.contextName, args.config, { discovery: { warnWhenNoEntities: false } });
41
41
  const dump = await orm.entityGenerator.generate({
42
42
  save: args.save,
43
43
  path: args.path,
@@ -1,10 +1,14 @@
1
1
  import type { ArgumentsCamelCase } from 'yargs';
2
2
  import type { BaseArgs, BaseCommand } from '../CLIConfigurator';
3
- export declare class ImportCommand implements BaseCommand {
3
+ type ImportArgs = BaseArgs & {
4
+ file: string;
5
+ };
6
+ export declare class ImportCommand implements BaseCommand<ImportArgs> {
4
7
  command: string;
5
8
  describe: string;
6
9
  /**
7
10
  * @inheritDoc
8
11
  */
9
- handler(args: ArgumentsCamelCase<BaseArgs>): Promise<void>;
12
+ handler(args: ArgumentsCamelCase<ImportArgs>): Promise<void>;
10
13
  }
14
+ export {};
@@ -10,7 +10,7 @@ class ImportCommand {
10
10
  * @inheritDoc
11
11
  */
12
12
  async handler(args) {
13
- const orm = await CLIHelper_1.CLIHelper.getORM();
13
+ const orm = await CLIHelper_1.CLIHelper.getORM(args.contextName, args.config, { multipleStatements: true });
14
14
  await orm.em.getConnection().loadFile(args.file);
15
15
  CLIHelper_1.CLIHelper.dump(core_1.colors.green(`File ${args.file} successfully imported`));
16
16
  await orm.close(true);
@@ -82,7 +82,7 @@ class MigrationCommandFactory {
82
82
  static async handleMigrationCommand(args, method) {
83
83
  // to be able to run have a master transaction, but run marked migrations outside of it, we need a second connection
84
84
  const options = { pool: { min: 1, max: 2 } };
85
- const orm = await CLIHelper_1.CLIHelper.getORM(undefined, options);
85
+ const orm = await CLIHelper_1.CLIHelper.getORM(args.contextName, args.config, options);
86
86
  const migrator = orm.getMigrator();
87
87
  switch (method) {
88
88
  case 'create':
@@ -82,7 +82,7 @@ class SchemaCommandFactory {
82
82
  if (!args.run && !args.dump) {
83
83
  return CLIHelper_1.CLIHelper.showHelp();
84
84
  }
85
- const orm = await CLIHelper_1.CLIHelper.getORM();
85
+ const orm = await CLIHelper_1.CLIHelper.getORM(args.contextName, args.config);
86
86
  const generator = orm.getSchemaGenerator();
87
87
  const params = { wrap: args.fkChecks == null ? undefined : !args.fkChecks, ...args };
88
88
  if (args.dump) {
package/esm CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/cli",
3
- "version": "6.3.14-dev.8",
3
+ "version": "6.4.0",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -63,15 +63,15 @@
63
63
  },
64
64
  "dependencies": {
65
65
  "@jercle/yargonaut": "1.1.5",
66
- "@mikro-orm/core": "6.3.14-dev.8",
67
- "@mikro-orm/knex": "6.3.14-dev.8",
66
+ "@mikro-orm/core": "6.4.0",
67
+ "@mikro-orm/knex": "6.4.0",
68
68
  "fs-extra": "11.2.0",
69
69
  "tsconfig-paths": "4.2.0",
70
70
  "yargs": "17.7.2"
71
71
  },
72
72
  "devDependencies": {
73
- "@mikro-orm/entity-generator": "^6.3.13",
74
- "@mikro-orm/migrations": "^6.3.13",
75
- "@mikro-orm/seeder": "^6.3.13"
73
+ "@mikro-orm/entity-generator": "^6.4.0",
74
+ "@mikro-orm/migrations": "^6.4.0",
75
+ "@mikro-orm/seeder": "^6.4.0"
76
76
  }
77
77
  }