@depup/typeorm-extension 4.0.0-depup.0 → 4.2.0-depup.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.
package/README.MD CHANGED
@@ -27,6 +27,7 @@ This is a library to
27
27
  - [Create](#create)
28
28
  - [Drop](#drop)
29
29
  - [Schema Drift](#schema-drift)
30
+ - [Generate Migration](#generate-migration)
30
31
  - [Repair Migrations](#repair-migrations)
31
32
  - [Instances](#instances)
32
33
  - [Single](#single)
@@ -288,6 +289,27 @@ import { assertSchemaMatchesMetadata, getSchemaDrift } from 'typeorm-extension';
288
289
 
289
290
  The same check is available on the command line as `typeorm-extension db drift`, which exits with code `1` on drift.
290
291
 
292
+ #### Generate Migration
293
+
294
+ `generateMigration` writes a migration file from the same schema comparison, using typeorm's own statements and file
295
+ templates. The data source must already be initialized.
296
+
297
+ ```typescript
298
+ import { generateMigration } from 'typeorm-extension';
299
+
300
+ (async () => {
301
+ await generateMigration({
302
+ dataSource,
303
+ name: 'add-role',
304
+ directoryPath: 'src/migrations',
305
+ });
306
+ })();
307
+ ```
308
+
309
+ The file is written as `<timestamp>-<name>.<language>`, by default into `migrations/`. Set `language: 'js'` (plus
310
+ `esm: true` for `export class` syntax) for a JavaScript migration, or `preview: true` to receive the statements without
311
+ writing a file.
312
+
291
313
  #### Repair Migrations
292
314
 
293
315
  Renaming a constraint is dialect-asymmetric and easy to get wrong. These helpers read the current state back from the
@@ -333,6 +355,19 @@ database is in **neither** the expected nor the desired state it raises a `Schem
333
355
  quietly, since a repair migration which repairs nothing would otherwise pass for a successful one. Pass
334
356
  `strict: false` per call to opt out.
335
357
 
358
+ `withDatabaseLock(queryRunner, name, fn, { timeout })` runs `fn` while holding a named advisory lock (`postgres`,
359
+ `mysql`, `mariadb`), for example so only one replica runs the migrations (with `migrationsRun` off, since
360
+ `initialize()` would run them before the lock is taken):
361
+
362
+ ```typescript
363
+ const queryRunner = dataSource.createQueryRunner();
364
+ try {
365
+ await withDatabaseLock(queryRunner, 'migrations', () => dataSource.runMigrations());
366
+ } finally {
367
+ await queryRunner.release();
368
+ }
369
+ ```
370
+
336
371
  To get a better overview and understanding of these functions, check out the
337
372
  [documentation](https://typeorm-extension.tada5hi.net/guide/database-api-reference.html).
338
373
 
package/README.md CHANGED
@@ -13,8 +13,8 @@ npm install @depup/typeorm-extension
13
13
 
14
14
  | Field | Value |
15
15
  |-------|-------|
16
- | Original | [typeorm-extension](https://www.npmjs.com/package/typeorm-extension) @ 4.0.0 |
17
- | Processed | 2026-08-16 |
16
+ | Original | [typeorm-extension](https://www.npmjs.com/package/typeorm-extension) @ 4.2.0 |
17
+ | Processed | 2026-09-27 |
18
18
  | Smoke test | failed |
19
19
  | Deps updated | 2 |
20
20
 
package/bin/cli.mjs CHANGED
@@ -54,16 +54,14 @@ function createLogger(level = LogLevel.Info) {
54
54
  if (enabled(LogLevel.Debug)) write(`${tint(DIM, `${ICON_DEBUG} ${msg}`)}`);
55
55
  },
56
56
  section: (title) => {
57
- if (enabled(LogLevel.Info)) {
58
- write("");
59
- write(tint(`${BOLD}${BLUE}`, title));
60
- }
57
+ if (!enabled(LogLevel.Info)) return;
58
+ write("");
59
+ write(tint(`${BOLD}${BLUE}`, title));
61
60
  },
62
61
  kv: (key, value, padTo = 0) => {
63
- if (enabled(LogLevel.Info)) {
64
- const pad = " ".repeat(Math.max(0, padTo - key.length));
65
- write(` ${tint(DIM, key)}${pad} ${value}`);
66
- }
62
+ if (!enabled(LogLevel.Info)) return;
63
+ const pad = " ".repeat(Math.max(0, padTo - key.length));
64
+ write(` ${tint(DIM, key)}${pad} ${value}`);
67
65
  },
68
66
  blank: () => {
69
67
  if (enabled(LogLevel.Info)) write("");
@@ -481,17 +479,19 @@ function defineCLISeedRunCommand() {
481
479
  const dsPad = 9;
482
480
  logger.kv("directory", source.directory, dsPad);
483
481
  logger.kv("name", source.name, dsPad);
484
- setDataSourceOptions(await buildDataSourceOptions({
482
+ const dataSourceOptions = await buildDataSourceOptions({
485
483
  dataSourceName: source.name,
486
484
  directory: source.directory,
487
485
  tsconfig: await pathResolver.tsconfig(),
488
486
  preserveFilePaths: args.preserveFilePaths
489
- }));
487
+ });
488
+ setDataSourceOptions(dataSourceOptions);
490
489
  if (name) {
491
490
  logger.section("Seed");
492
491
  logger.kv("name", name, 4);
493
492
  }
494
- const executor = new SeederExecutor(await useDataSource(), {
493
+ const dataSource = await useDataSource();
494
+ const executor = new SeederExecutor(dataSource, {
495
495
  root: args.root,
496
496
  tsconfig: await pathResolver.tsconfig(),
497
497
  preserveFilePaths: args.preserveFilePaths
package/bin/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli/logger.ts","../src/cli/exit.ts","../src/cli/commands/database/create.ts","../src/cli/commands/database/drift.ts","../src/cli/commands/database/drop.ts","../src/cli/commands/database/index.ts","../src/cli/commands/seed/create.ts","../src/cli/commands/seed/run.ts","../src/cli/commands/seed/index.ts","../src/cli/module.ts","../src/cli/index.ts"],"sourcesContent":["import process from 'node:process';\n\nexport const LogLevel = {\n Silent: 'silent',\n Info: 'info',\n Debug: 'debug',\n} as const;\nexport type LogLevel = typeof LogLevel[keyof typeof LogLevel];\n\nexport const LOG_LEVEL_VALUES: LogLevel[] = Object.values(LogLevel);\n\nconst RANK: Record<LogLevel, number> = {\n [LogLevel.Silent]: 0,\n [LogLevel.Info]: 1,\n [LogLevel.Debug]: 2,\n};\n\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst RED = '\\x1b[31m';\nconst GREEN = '\\x1b[32m';\nconst YELLOW = '\\x1b[33m';\nconst BLUE = '\\x1b[34m';\nconst CYAN = '\\x1b[36m';\n\nconst ICON_INFO = 'ℹ';\nconst ICON_SUCCESS = '✔';\nconst ICON_WARN = '⚠';\nconst ICON_ERROR = '✖';\nconst ICON_DEBUG = '›';\n\nexport type Logger = {\n info: (msg: string) => void;\n debug: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n success: (msg: string) => void;\n section: (title: string) => void;\n kv: (key: string, value: string, padTo?: number) => void;\n blank: () => void;\n};\n\nexport function createLogger(level: LogLevel = LogLevel.Info): Logger {\n const enabled = (target: LogLevel): boolean => RANK[level] >= RANK[target];\n const tty = process.stderr.isTTY;\n const tint = (code: string, text: string) => (tty ? `${code}${text}${RESET}` : text);\n const write = (line: string) => process.stderr.write(`${line}\\n`);\n\n return {\n info: (msg) => {\n if (enabled(LogLevel.Info)) {\n write(`${tint(CYAN, ICON_INFO)} ${msg}`);\n }\n },\n success: (msg) => {\n if (enabled(LogLevel.Info)) {\n write(`${tint(GREEN, ICON_SUCCESS)} ${msg}`);\n }\n },\n warn: (msg) => {\n if (enabled(LogLevel.Info)) {\n write(`${tint(YELLOW, ICON_WARN)} ${msg}`);\n }\n },\n error: (msg) => {\n write(`${tint(RED, ICON_ERROR)} ${msg}`);\n },\n debug: (msg) => {\n if (enabled(LogLevel.Debug)) {\n write(`${tint(DIM, `${ICON_DEBUG} ${msg}`)}`);\n }\n },\n section: (title) => {\n if (enabled(LogLevel.Info)) {\n write('');\n write(tint(`${BOLD}${BLUE}`, title));\n }\n },\n kv: (key, value, padTo = 0) => {\n if (enabled(LogLevel.Info)) {\n const pad = ' '.repeat(Math.max(0, padTo - key.length));\n write(` ${tint(DIM, key)}${pad} ${value}`);\n }\n },\n blank: () => {\n if (enabled(LogLevel.Info)) {\n write('');\n }\n },\n };\n}\n\nexport function normalizeLogLevel(input: string | undefined): LogLevel {\n if (!input) {\n return LogLevel.Info;\n }\n if ((LOG_LEVEL_VALUES as string[]).includes(input)) {\n return input as LogLevel;\n }\n throw new CLIUserError(\n `Unknown log level \"${input}\". Supported: ${LOG_LEVEL_VALUES.join(', ')}.`,\n );\n}\n\nexport class CLIUserError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CLIUserError';\n }\n}\n","import process from 'node:process';\nimport type { Logger } from './logger';\nimport { CLIUserError } from './logger';\n\nexport const ExitCode = {\n Success: 0,\n UserError: 1,\n InternalError: 2,\n} as const;\nexport type ExitCode = typeof ExitCode[keyof typeof ExitCode];\n\nexport async function runWithExitCode(\n logger: Logger,\n fn: () => Promise<void>,\n): Promise<void> {\n try {\n await fn();\n process.exit(ExitCode.Success);\n } catch (err) {\n if (err instanceof CLIUserError) {\n logger.error(err.message);\n process.exit(ExitCode.UserError);\n }\n if (err instanceof Error) {\n logger.error(err.stack ?? err.message);\n } else {\n logger.error(String(err));\n }\n process.exit(ExitCode.InternalError);\n }\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport type { DatabaseCreateContextInput } from '../../../database';\nimport { createDatabase } from '../../../database';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { LOG_LEVEL_VALUES, createLogger, normalizeLogLevel } from '../../logger';\n\nexport function defineCLIDatabaseCreateCommand() {\n return defineCommand({\n meta: {\n name: 'create',\n description: 'Create database.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n synchronize: {\n type: 'enum',\n alias: 's',\n default: 'yes',\n options: ['yes', 'no'],\n description: 'Create database schema for all entities.',\n },\n initialDatabase: {\n type: 'string',\n description: 'Specify the initial database to connect to.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Creating database');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const pad = 'directory'.length;\n logger.kv('directory', source.directory, pad);\n logger.kv('name', source.name, pad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n const context : DatabaseCreateContextInput = {\n ifNotExist: true,\n options: dataSourceOptions,\n synchronize: args.synchronize === 'yes',\n };\n\n if (\n typeof args.initialDatabase === 'string' &&\n args.initialDatabase !== ''\n ) {\n context.initialDatabase = args.initialDatabase;\n }\n\n logger.blank();\n await createDatabase(context);\n logger.success('Created database.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport { getSchemaDrift } from '../../../database';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { \n CLIUserError, \n LOG_LEVEL_VALUES, \n createLogger, \n normalizeLogLevel, \n} from '../../logger';\n\nexport function defineCLIDatabaseDriftCommand() {\n return defineCommand({\n meta: {\n name: 'drift',\n description: 'Assert that the database schema matches the entity metadata.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n skipWithoutMigrations: {\n type: 'boolean',\n default: false,\n description: 'Report no drift if the data-source has no migrations registered.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Checking schema drift');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const pad = 'directory'.length;\n logger.kv('directory', source.directory, pad);\n logger.kv('name', source.name, pad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n logger.blank();\n\n const drift = await getSchemaDrift(dataSourceOptions, { skipWithoutMigrations: args.skipWithoutMigrations });\n\n if (!drift.exists) {\n logger.success('No schema drift detected.');\n\n return;\n }\n\n logger.section('Statements');\n for (let i = 0; i < drift.up.length; i++) {\n const statement = drift.up[i];\n\n logger.warn(\n statement.parameters && statement.parameters.length > 0 ?\n `${statement.query} -- ${JSON.stringify(statement.parameters)}` :\n statement.query,\n );\n }\n\n logger.blank();\n\n throw new CLIUserError(\n `The database schema deviates from the entity metadata (${drift.up.length} statement(s) required to reconcile it).`,\n );\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport type { DatabaseDropContext } from '../../../database';\nimport { dropDatabase } from '../../../database';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { LOG_LEVEL_VALUES, createLogger, normalizeLogLevel } from '../../logger';\n\nexport function defineCLIDatabaseDropCommand() {\n return defineCommand({\n meta: {\n name: 'drop',\n description: 'Drop database.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n initialDatabase: {\n type: 'string',\n description: 'Specify the initial database to connect to.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Dropping database');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const pad = 'directory'.length;\n logger.kv('directory', source.directory, pad);\n logger.kv('name', source.name, pad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n const context : DatabaseDropContext = {\n ifExist: true,\n options: dataSourceOptions,\n };\n\n if (\n typeof args.initialDatabase === 'string' &&\n args.initialDatabase !== ''\n ) {\n context.initialDatabase = args.initialDatabase;\n }\n\n logger.blank();\n await dropDatabase(context);\n logger.success('Dropped database.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport { defineCLIDatabaseCreateCommand } from './create';\nimport { defineCLIDatabaseDriftCommand } from './drift';\nimport { defineCLIDatabaseDropCommand } from './drop';\n\nexport * from './create';\nexport * from './drift';\nexport * from './drop';\n\nexport function defineCLIDatabaseCommand() {\n return defineCommand({\n meta: {\n name: 'db',\n description: 'Database operations.',\n },\n subCommands: {\n create: defineCLIDatabaseCreateCommand(),\n drift: defineCLIDatabaseDriftCommand(),\n drop: defineCLIDatabaseDropCommand(),\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport { removeFileNameExtension } from 'locter';\nimport { isDirectory, parseFilePath } from '../../../utils';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { pascalCase } from 'pascal-case';\nimport { buildSeederFileName, buildSeederFileTemplate } from '../../../seeder';\nimport { runWithExitCode } from '../../exit';\nimport { \n CLIUserError, \n LOG_LEVEL_VALUES, \n createLogger, \n normalizeLogLevel, \n} from '../../logger';\n\nexport function defineCLISeedCreateCommand() {\n return defineCommand({\n meta: {\n name: 'create',\n description: 'Create a seeder file.',\n },\n args: {\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n timestamp: {\n type: 'string',\n alias: 't',\n description: 'Custom timestamp for the seeder name.',\n },\n javascript: {\n type: 'boolean',\n alias: 'j',\n default: false,\n description: 'Generate a seeder file for JavaScript instead of TypeScript.',\n },\n name: {\n type: 'string',\n alias: 'n',\n required: true,\n description: 'Name (or relative path incl. name) of the seeder.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Creating seeder file');\n\n const parsedTimestamp = typeof args.timestamp === 'string' ?\n Number.parseInt(args.timestamp, 10) :\n Number.NaN;\n const timestamp = Number.isNaN(parsedTimestamp) ?\n Date.now() :\n parsedTimestamp;\n\n const sourcePath = parseFilePath(args.name, args.root);\n\n const dirNameIsDirectory = await isDirectory(sourcePath.directory);\n if (!dirNameIsDirectory) {\n throw new CLIUserError(\n `The output directory ${sourcePath.directory} does not exist.`,\n );\n }\n\n const nameWithoutExtension = removeFileNameExtension(sourcePath.name);\n\n const fileName = buildSeederFileName(sourcePath.name, timestamp, { javascript: args.javascript });\n const filePath = path.join(sourcePath.directory, fileName);\n const template = buildSeederFileTemplate(nameWithoutExtension, timestamp);\n\n logger.section('Seed');\n const pad = 'directory'.length;\n logger.kv('directory', sourcePath.directory, pad);\n logger.kv('fileName', fileName, pad);\n logger.kv('name', pascalCase(nameWithoutExtension), pad);\n\n try {\n await fs.promises.writeFile(filePath, template, { encoding: 'utf-8' });\n } catch {\n throw new CLIUserError(\n `The seed could not be written to the path ${filePath}.`,\n );\n }\n\n logger.blank();\n logger.success('Created seeder file.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions, setDataSourceOptions, useDataSource } from '../../../data-source';\nimport { SeederExecutor } from '../../../seeder';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { LOG_LEVEL_VALUES, createLogger, normalizeLogLevel } from '../../logger';\n\nexport function defineCLISeedRunCommand() {\n return defineCommand({\n meta: {\n name: 'run',\n description: 'Populate the database with an initial data set or generated data by a factory.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n name: {\n type: 'string',\n alias: 'n',\n description: 'Name (or relative path incl. name) of the seeder.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Running seeders');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n let { name } = args;\n if (name) {\n name = await pathResolver.transform(name);\n }\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const dsPad = 'directory'.length;\n logger.kv('directory', source.directory, dsPad);\n logger.kv('name', source.name, dsPad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n dataSourceName: source.name,\n directory: source.directory,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n setDataSourceOptions(dataSourceOptions);\n\n if (name) {\n logger.section('Seed');\n logger.kv('name', name, 'name'.length);\n }\n\n const dataSource = await useDataSource();\n const executor = new SeederExecutor(dataSource, {\n root: args.root,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n logger.blank();\n await executor.execute({ seedName: name });\n logger.success('Executed seeders.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport { defineCLISeedCreateCommand } from './create';\nimport { defineCLISeedRunCommand } from './run';\n\nexport * from './create';\nexport * from './run';\n\nexport function defineCLISeedCommand() {\n return defineCommand({\n meta: {\n name: 'seed',\n description: 'Seeder operations.',\n },\n subCommands: {\n create: defineCLISeedCreateCommand(),\n run: defineCLISeedRunCommand(),\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport {\n defineCLIDatabaseCommand,\n defineCLIDatabaseCreateCommand,\n defineCLIDatabaseDropCommand,\n defineCLISeedCommand,\n defineCLISeedCreateCommand,\n defineCLISeedRunCommand,\n} from './commands';\n\nexport function createCLIEntryPointCommand() {\n return defineCommand({\n meta: {\n name: 'typeorm-extension',\n description: 'CLI for typeorm-extension.',\n },\n subCommands: {\n db: defineCLIDatabaseCommand(),\n seed: defineCLISeedCommand(),\n // Legacy colon-form aliases (kept for backwards compatibility with v3 invocations).\n 'db:create': defineCLIDatabaseCreateCommand(),\n 'db:drop': defineCLIDatabaseDropCommand(),\n 'seed:create': defineCLISeedCreateCommand(),\n 'seed:run': defineCLISeedRunCommand(),\n },\n });\n}\n","#!/usr/bin/env node\nimport 'reflect-metadata';\nimport { runMain } from 'citty';\nimport { createCLIEntryPointCommand } from './module';\n\nrunMain(createCLIEntryPointCommand());\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli/logger.ts","../src/cli/exit.ts","../src/cli/commands/database/create.ts","../src/cli/commands/database/drift.ts","../src/cli/commands/database/drop.ts","../src/cli/commands/database/index.ts","../src/cli/commands/seed/create.ts","../src/cli/commands/seed/run.ts","../src/cli/commands/seed/index.ts","../src/cli/module.ts","../src/cli/index.ts"],"sourcesContent":["import process from 'node:process';\n\nexport const LogLevel = {\n Silent: 'silent',\n Info: 'info',\n Debug: 'debug',\n} as const;\nexport type LogLevel = typeof LogLevel[keyof typeof LogLevel];\n\nexport const LOG_LEVEL_VALUES: LogLevel[] = Object.values(LogLevel);\n\nconst RANK: Record<LogLevel, number> = {\n [LogLevel.Silent]: 0,\n [LogLevel.Info]: 1,\n [LogLevel.Debug]: 2,\n};\n\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst RED = '\\x1b[31m';\nconst GREEN = '\\x1b[32m';\nconst YELLOW = '\\x1b[33m';\nconst BLUE = '\\x1b[34m';\nconst CYAN = '\\x1b[36m';\n\nconst ICON_INFO = 'ℹ';\nconst ICON_SUCCESS = '✔';\nconst ICON_WARN = '⚠';\nconst ICON_ERROR = '✖';\nconst ICON_DEBUG = '›';\n\nexport type Logger = {\n info: (msg: string) => void;\n debug: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n success: (msg: string) => void;\n section: (title: string) => void;\n kv: (key: string, value: string, padTo?: number) => void;\n blank: () => void;\n};\n\nexport function createLogger(level: LogLevel = LogLevel.Info): Logger {\n const enabled = (target: LogLevel): boolean => RANK[level] >= RANK[target];\n const tty = process.stderr.isTTY;\n const tint = (code: string, text: string) => (tty ? `${code}${text}${RESET}` : text);\n const write = (line: string) => process.stderr.write(`${line}\\n`);\n\n return {\n info: (msg) => {\n if (enabled(LogLevel.Info)) {\n write(`${tint(CYAN, ICON_INFO)} ${msg}`);\n }\n },\n success: (msg) => {\n if (enabled(LogLevel.Info)) {\n write(`${tint(GREEN, ICON_SUCCESS)} ${msg}`);\n }\n },\n warn: (msg) => {\n if (enabled(LogLevel.Info)) {\n write(`${tint(YELLOW, ICON_WARN)} ${msg}`);\n }\n },\n error: (msg) => {\n write(`${tint(RED, ICON_ERROR)} ${msg}`);\n },\n debug: (msg) => {\n if (enabled(LogLevel.Debug)) {\n write(`${tint(DIM, `${ICON_DEBUG} ${msg}`)}`);\n }\n },\n section: (title) => {\n if (!enabled(LogLevel.Info)) {\n return;\n }\n\n write('');\n write(tint(`${BOLD}${BLUE}`, title));\n },\n kv: (key, value, padTo = 0) => {\n if (!enabled(LogLevel.Info)) {\n return;\n }\n\n const pad = ' '.repeat(Math.max(0, padTo - key.length));\n write(` ${tint(DIM, key)}${pad} ${value}`);\n },\n blank: () => {\n if (enabled(LogLevel.Info)) {\n write('');\n }\n },\n };\n}\n\nexport function normalizeLogLevel(input: string | undefined): LogLevel {\n if (!input) {\n return LogLevel.Info;\n }\n if ((LOG_LEVEL_VALUES as string[]).includes(input)) {\n return input as LogLevel;\n }\n throw new CLIUserError(\n `Unknown log level \"${input}\". Supported: ${LOG_LEVEL_VALUES.join(', ')}.`,\n );\n}\n\nexport class CLIUserError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CLIUserError';\n }\n}\n","import process from 'node:process';\nimport type { Logger } from './logger';\nimport { CLIUserError } from './logger';\n\nexport const ExitCode = {\n Success: 0,\n UserError: 1,\n InternalError: 2,\n} as const;\nexport type ExitCode = typeof ExitCode[keyof typeof ExitCode];\n\nexport async function runWithExitCode(\n logger: Logger,\n fn: () => Promise<void>,\n): Promise<void> {\n try {\n await fn();\n process.exit(ExitCode.Success);\n } catch (err) {\n if (err instanceof CLIUserError) {\n logger.error(err.message);\n process.exit(ExitCode.UserError);\n }\n if (err instanceof Error) {\n logger.error(err.stack ?? err.message);\n } else {\n logger.error(String(err));\n }\n process.exit(ExitCode.InternalError);\n }\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport type { DatabaseCreateContextInput } from '../../../database';\nimport { createDatabase } from '../../../database';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { LOG_LEVEL_VALUES, createLogger, normalizeLogLevel } from '../../logger';\n\nexport function defineCLIDatabaseCreateCommand() {\n return defineCommand({\n meta: {\n name: 'create',\n description: 'Create database.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n synchronize: {\n type: 'enum',\n alias: 's',\n default: 'yes',\n options: ['yes', 'no'],\n description: 'Create database schema for all entities.',\n },\n initialDatabase: {\n type: 'string',\n description: 'Specify the initial database to connect to.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Creating database');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const pad = 'directory'.length;\n logger.kv('directory', source.directory, pad);\n logger.kv('name', source.name, pad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n const context : DatabaseCreateContextInput = {\n ifNotExist: true,\n options: dataSourceOptions,\n synchronize: args.synchronize === 'yes',\n };\n\n if (\n typeof args.initialDatabase === 'string' &&\n args.initialDatabase !== ''\n ) {\n context.initialDatabase = args.initialDatabase;\n }\n\n logger.blank();\n await createDatabase(context);\n logger.success('Created database.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport { getSchemaDrift } from '../../../database';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { \n CLIUserError, \n LOG_LEVEL_VALUES, \n createLogger, \n normalizeLogLevel, \n} from '../../logger';\n\nexport function defineCLIDatabaseDriftCommand() {\n return defineCommand({\n meta: {\n name: 'drift',\n description: 'Assert that the database schema matches the entity metadata.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n skipWithoutMigrations: {\n type: 'boolean',\n default: false,\n description: 'Report no drift if the data-source has no migrations registered.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Checking schema drift');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const pad = 'directory'.length;\n logger.kv('directory', source.directory, pad);\n logger.kv('name', source.name, pad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n logger.blank();\n\n const drift = await getSchemaDrift(dataSourceOptions, { skipWithoutMigrations: args.skipWithoutMigrations });\n\n if (!drift.exists) {\n logger.success('No schema drift detected.');\n\n return;\n }\n\n logger.section('Statements');\n for (let i = 0; i < drift.up.length; i++) {\n const statement = drift.up[i];\n\n logger.warn(\n statement.parameters && statement.parameters.length > 0 ?\n `${statement.query} -- ${JSON.stringify(statement.parameters)}` :\n statement.query,\n );\n }\n\n logger.blank();\n\n throw new CLIUserError(\n `The database schema deviates from the entity metadata (${drift.up.length} statement(s) required to reconcile it).`,\n );\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport type { DatabaseDropContext } from '../../../database';\nimport { dropDatabase } from '../../../database';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { LOG_LEVEL_VALUES, createLogger, normalizeLogLevel } from '../../logger';\n\nexport function defineCLIDatabaseDropCommand() {\n return defineCommand({\n meta: {\n name: 'drop',\n description: 'Drop database.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n initialDatabase: {\n type: 'string',\n description: 'Specify the initial database to connect to.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Dropping database');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const pad = 'directory'.length;\n logger.kv('directory', source.directory, pad);\n logger.kv('name', source.name, pad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n const context : DatabaseDropContext = {\n ifExist: true,\n options: dataSourceOptions,\n };\n\n if (\n typeof args.initialDatabase === 'string' &&\n args.initialDatabase !== ''\n ) {\n context.initialDatabase = args.initialDatabase;\n }\n\n logger.blank();\n await dropDatabase(context);\n logger.success('Dropped database.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport { defineCLIDatabaseCreateCommand } from './create';\nimport { defineCLIDatabaseDriftCommand } from './drift';\nimport { defineCLIDatabaseDropCommand } from './drop';\n\nexport * from './create';\nexport * from './drift';\nexport * from './drop';\n\nexport function defineCLIDatabaseCommand() {\n return defineCommand({\n meta: {\n name: 'db',\n description: 'Database operations.',\n },\n subCommands: {\n create: defineCLIDatabaseCreateCommand(),\n drift: defineCLIDatabaseDriftCommand(),\n drop: defineCLIDatabaseDropCommand(),\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport { removeFileNameExtension } from 'locter';\nimport { isDirectory, parseFilePath } from '../../../utils';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { pascalCase } from 'pascal-case';\nimport { buildSeederFileName, buildSeederFileTemplate } from '../../../seeder';\nimport { runWithExitCode } from '../../exit';\nimport { \n CLIUserError, \n LOG_LEVEL_VALUES, \n createLogger, \n normalizeLogLevel, \n} from '../../logger';\n\nexport function defineCLISeedCreateCommand() {\n return defineCommand({\n meta: {\n name: 'create',\n description: 'Create a seeder file.',\n },\n args: {\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n timestamp: {\n type: 'string',\n alias: 't',\n description: 'Custom timestamp for the seeder name.',\n },\n javascript: {\n type: 'boolean',\n alias: 'j',\n default: false,\n description: 'Generate a seeder file for JavaScript instead of TypeScript.',\n },\n name: {\n type: 'string',\n alias: 'n',\n required: true,\n description: 'Name (or relative path incl. name) of the seeder.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Creating seeder file');\n\n const parsedTimestamp = typeof args.timestamp === 'string' ?\n Number.parseInt(args.timestamp, 10) :\n NaN;\n const timestamp = Number.isNaN(parsedTimestamp) ?\n Date.now() :\n parsedTimestamp;\n\n const sourcePath = parseFilePath(args.name, args.root);\n\n const dirNameIsDirectory = await isDirectory(sourcePath.directory);\n if (!dirNameIsDirectory) {\n throw new CLIUserError(\n `The output directory ${sourcePath.directory} does not exist.`,\n );\n }\n\n const nameWithoutExtension = removeFileNameExtension(sourcePath.name);\n\n const fileName = buildSeederFileName(sourcePath.name, timestamp, { javascript: args.javascript });\n const filePath = path.join(sourcePath.directory, fileName);\n const template = buildSeederFileTemplate(nameWithoutExtension, timestamp);\n\n logger.section('Seed');\n const pad = 'directory'.length;\n logger.kv('directory', sourcePath.directory, pad);\n logger.kv('fileName', fileName, pad);\n logger.kv('name', pascalCase(nameWithoutExtension), pad);\n\n try {\n await fs.promises.writeFile(filePath, template, { encoding: 'utf-8' });\n } catch {\n throw new CLIUserError(\n `The seed could not be written to the path ${filePath}.`,\n );\n }\n\n logger.blank();\n logger.success('Created seeder file.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport process from 'node:process';\nimport { buildDataSourceOptions, setDataSourceOptions, useDataSource } from '../../../data-source';\nimport { SeederExecutor } from '../../../seeder';\nimport {\n PathResolverMode,\n createPathResolver,\n parseFilePath,\n} from '../../../utils';\nimport { runWithExitCode } from '../../exit';\nimport { LOG_LEVEL_VALUES, createLogger, normalizeLogLevel } from '../../logger';\n\nexport function defineCLISeedRunCommand() {\n return defineCommand({\n meta: {\n name: 'run',\n description: 'Populate the database with an initial data set or generated data by a factory.',\n },\n args: {\n preserveFilePaths: {\n type: 'boolean',\n default: false,\n description: 'This option indicates if file paths should be preserved.',\n },\n root: {\n type: 'string',\n alias: 'r',\n default: process.cwd(),\n description: 'Root directory of the project.',\n },\n tsconfig: {\n type: 'string',\n alias: 'tc',\n default: 'tsconfig.json',\n description: 'Name (or relative path incl. name) of the tsconfig file.',\n },\n dataSource: {\n type: 'string',\n alias: 'd',\n default: 'data-source',\n description: 'Name (or relative path incl. name) of the data-source file.',\n },\n name: {\n type: 'string',\n alias: 'n',\n description: 'Name (or relative path incl. name) of the seeder.',\n },\n 'log-level': {\n type: 'string',\n description: 'Logger verbosity.',\n valueHint: LOG_LEVEL_VALUES.join('|'),\n options: LOG_LEVEL_VALUES as string[],\n },\n },\n async run({ args }) {\n const logger = createLogger(normalizeLogLevel(args['log-level'] as string | undefined));\n await runWithExitCode(logger, async () => {\n logger.info('Running seeders');\n\n const pathResolver = createPathResolver({\n root: args.root,\n tsconfig: args.tsconfig,\n mode: args.preserveFilePaths ?\n PathResolverMode.PRESERVE :\n PathResolverMode.AUTO,\n });\n\n let { name } = args;\n if (name) {\n name = await pathResolver.transform(name);\n }\n\n const source = parseFilePath(await pathResolver.resolve(args.dataSource));\n\n logger.section('DataSource');\n const dsPad = 'directory'.length;\n logger.kv('directory', source.directory, dsPad);\n logger.kv('name', source.name, dsPad);\n\n const dataSourceOptions = await buildDataSourceOptions({\n dataSourceName: source.name,\n directory: source.directory,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n setDataSourceOptions(dataSourceOptions);\n\n if (name) {\n logger.section('Seed');\n logger.kv('name', name, 'name'.length);\n }\n\n const dataSource = await useDataSource();\n const executor = new SeederExecutor(dataSource, {\n root: args.root,\n tsconfig: await pathResolver.tsconfig(),\n preserveFilePaths: args.preserveFilePaths,\n });\n\n logger.blank();\n await executor.execute({ seedName: name });\n logger.success('Executed seeders.');\n });\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport { defineCLISeedCreateCommand } from './create';\nimport { defineCLISeedRunCommand } from './run';\n\nexport * from './create';\nexport * from './run';\n\nexport function defineCLISeedCommand() {\n return defineCommand({\n meta: {\n name: 'seed',\n description: 'Seeder operations.',\n },\n subCommands: {\n create: defineCLISeedCreateCommand(),\n run: defineCLISeedRunCommand(),\n },\n });\n}\n","import { defineCommand } from 'citty';\nimport {\n defineCLIDatabaseCommand,\n defineCLIDatabaseCreateCommand,\n defineCLIDatabaseDropCommand,\n defineCLISeedCommand,\n defineCLISeedCreateCommand,\n defineCLISeedRunCommand,\n} from './commands';\n\nexport function createCLIEntryPointCommand() {\n return defineCommand({\n meta: {\n name: 'typeorm-extension',\n description: 'CLI for typeorm-extension.',\n },\n subCommands: {\n db: defineCLIDatabaseCommand(),\n seed: defineCLISeedCommand(),\n // Legacy colon-form aliases (kept for backwards compatibility with v3 invocations).\n 'db:create': defineCLIDatabaseCreateCommand(),\n 'db:drop': defineCLIDatabaseDropCommand(),\n 'seed:create': defineCLISeedCreateCommand(),\n 'seed:run': defineCLISeedRunCommand(),\n },\n });\n}\n","#!/usr/bin/env node\nimport 'reflect-metadata';\nimport { runMain } from 'citty';\nimport { createCLIEntryPointCommand } from './module';\n\nrunMain(createCLIEntryPointCommand());\n"],"mappings":"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"}
package/changes.json CHANGED
@@ -9,6 +9,6 @@
9
9
  "to": "^1.6.2"
10
10
  }
11
11
  },
12
- "timestamp": "2026-08-16T00:30:51.033Z",
12
+ "timestamp": "2026-09-27T01:04:52.135Z",
13
13
  "totalUpdated": 2
14
14
  }